Java入門・初心者質問スレ Part.4 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>21
OSが一生懸命他のプロセスとこんてきすとすいっちんぐぅしてるからでしょ 何度もすみません。
こっちも同じ例外で落ちます。
なぜでしょうか?
public class GuessNumber {
____public static void main(String[] args) {
________System.out.println("【数あてゲーム】");
________java.util.Random rnd = new java.util.Random();
________int ans = rnd.nextInt(10);
________for(int i = 0; i < 5; i++) {
____________System.out.print("0〜9の数字を入力してください");
____________java.util.Scanner sc = new java.util.Scanner(System.in);
____________int num = sc.nextInt();
____________if(num == ans) {
________________System.out.println("アタリ!");
________________break;
____________} else {
________________System.out.println("違います。");
____________}
____________sc.close();
________}
________System.out.println("ゲームを終了します");
____}
} >>24
ループ内でScanner閉じちゃってるからじゃないかな >>26
ありがとうございます。確かにsc.close()をコメントアウトすると落ちません。
C++のnewとdeleteと同じようなものではないのですね。
難しいです・・・ >>27
JavaではGCが勝手にメモリの整理してるから消さなくてもメモリは圧迫しない、けど入出力ストリームは勝手に閉じたりしないから使わなくなったら閉じないといけない
もし閉じるとしたらループの外やな >>28
ありがとうございます。
java.util.Scanner sc = new java.util.Scanner(System.in);
と
sc.close()をループの外に出しました。
ガーベッジコレクション、今読んでいる本に出てきました。 >>11
どう違うか明示できない時点でお前はこのスレでは初心者にも劣る生き物
このスレを見る資格すらない >>19
[公開 API を使用して非公開な型をエクスポート]
っていう警告です
文法的に問題ないようだったらこのまま使おうとおもいます >>31
何が非公開になってるの?
ソース出してよ。 >>18
パッケージとアクセス修飾子も書いて
警告消すのにほんとにabstract消しただけ?abstract消して代わりにpublicにしたりしてんじゃないの? >>32-33
それでした
public abstarctにしたら消えました
アクセス修飾子ちょっと勉強してきます 画像回転させるときにどっちの方法使いますか?
理由も教えてください
---A---
affin.setToRotation(45 * Math.PI/180, 90d, 40d);
g2.setTransform(affin);
g2.drawImage(img, x, y, w, h, p);
---B---
affin.translate(x - w / 2, y - h / 2);
affin.rotate(Math.toRadians(-1.0 * angle), w / 2, h / 2);
g2.drawImage(image, affin, p); 3Dの基本だけど、回転・移動・拡大縮小には順番がある
回転・拡大縮小には、中心・基準点があるけど、移動にはない。
だから、中心がずれるかどうかを考える
サンプルを作って、順番を変えて、やってみればすぐわかる パネル上で二つの画像を合成してそれぞれの色の濃いところを取りたいのですが可能でしょうか? JavaFXの勉強始めたのですが
FXMLについて詳しく書かれた資料がかなり少ないのですが、なぜなのでしょうか? エンバカさん、JBuilder FX作ってよ
JBuilder ver7位使い易いのをお願い リスナーで処理Aを待機してBを実行、という仕様をforループ内で使用したいです
************************************
hoge.~~.addListener( {
if(Aの実行完了を確認){
Bの実行
});
Aの実行
************************************
雑ですがこのようなもので、単体では思い通りに動きます
ですが処理Aの所要時間が長く、ループにするとAが完了する前にループが回りきってしまい
1つのAが動作を終えると全てのリスナーがその1つの結果に対して動き出してしまいます
理想としてはA,B,A,B,… のようにそれぞれ交互に処理されることです
どなたか良い方法をお持ちではないでしょうか for ループは同期処理で、
EventListener は、コールバック・非同期処理だろ
コールバックは、後で呼ばれる
同期・非同期処理で検索! >>44
何がやりたいのか全くわからん
A -> Bが1セットならその組みでイベントしかけりゃえーやん Listインターフェースのadd系ってなんでadd(int, E)だけ戻り値がvoidなんだろ
ArrayListを拡張して要素数の上限値付きリストを作って
上限越えてaddしようとした時falseを返すようにしようとしたのに
ひとつだけ挙動が違ってしまう…… >>48
なんでfalseなん?
仕様を満たさない入力なんだから例外で良さそうだけど そういや Java 8 で interface に default メソッド作れるようになったのに default コンストラクタが作れないのは何故か? class Cat implements Animal{
static string jpname = "ねこ";
int size;
private int sex;
:
:
}
class Dog implements Animal{…}
こんな感じのクラスがあったとして
Animal anml = new Cat();
anml = new Dog();
としたらメモリリークは発生するのでしょうか?
以前staticを使うとメモリリークが発生するという記事を見た気がするので気になりました >>53
どっからどう漏れるんだ?
てか、その記事何について書いてあったの?JavaVMのバグ? >>54
sizeやsexに格納した値が参照が外れたにも関わらずメモリに残り続けるという意味だと思います
あまり覚えてないのですが、staticのデメリットとしてメモリリークが発生すると言ってる記事でした >>45-47
意味不明な質問にかまっていただきありがとうございます
たしかに同期非同期について全くわかっていませんでした
別の実装を考えてみます
失礼しました >>55
どこからも参照されなくなればgcの対象になってその内解放される筈だが?
その例の場合そもそも size や sex はプリミティブ型だから Cat や Dog クラスのインスタンスが
どこからも参照されなくなれば同時に開放される。jpname は static だから開放はされないが
new してインスタンス作っても増えることはない(staticだから)。
しかし Java では C/C++ でいうようなメモリリークは起きようがないぞ。プログラマがうっかり
いつまでもクラスのインスタンスを参照し続けるように書いてしまった場合だけそうなる。
だからだいたいはプログラムがおかしいだけ(盲点はあるけどな)。それとライブラリの内部の
書き方が悪くてプログラマが意識せずして参照を残存させてしまうことはありうる。
・書き方が悪くて残存させてしまうような例(しかしJavaのことをよく知っていれば防げそうなバグ)
http://networkprogramming.blog18.fc2.com/blog-entry%2d74.html
・ライブラリの問題で残存させてしまう例(但しこれはJ2SE 5.0で解消)
http://www.aerith.net/java/thread-memory-leak-j.html JavaScript のメモリリークでは、
クロージャ内の変数とか、
タイマーを解放しなかったとか、
製品版で、console.log を使っているとか、
イベントハンドラーを付けた要素の、先祖の要素が削除された際、
その子孫のイベントハンドラーが削除されないとか NetBeansでSwing JFrameを追加すると以下のコードがmain()に挿入されるのですが
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
メインスレッドの方でこのインスタンスを参照したいときにはどの様に書くべきなのでしょうか? >>59
メインメソッドでBlockingQueueを用意して
invokeLaterでJFrameのインスタンスをputして
メインメソッドでtakeすればいいよ 参照型とオブジェクト型の違いがよく分かりません
同じものだと思っていたので混乱しています
Super sp = new Sub();
とした場合、左辺が参照型で右辺がオブジェクト型でしょうか?
オブジェクト型も参照型ですよね 参照型は変数の種類、intみたいなデータがそのまま入ってる変数(プリミティブ)と比較してって感じ
オブジェクト型は参照型の変数に実際に入ってる物
こんな感じかな The Java Language Specification
http://docs.oracle.com/javase/specs/jls/se7/html/index.html
| 参照型は、クラス型、インタフェース型、型変数、配列型の4種類です。
| オブジェクトは、クラスインスタンスまたは配列です。
| オブジェクトクラスは、すべてのクラスのスーパークラスです。
言語仕様にはオブジェクト型という用語が出てこないので
オブジェクト型は文脈によるんじゃないかな
オブジェクト型は
・参照型のことかもしれない
・Objectクラスのことかもしれない
・クラス型と配列型のことかもしれない
いずれにしても参照型の部分集合
AがBの部分集合であるとき
AはBと表現するならば
オブジェクト型は参照型
はい論破 論破って言いながら丁寧に説明してあげてるのかわいい 型には、primitive と、参照型(オブジェクト)の2つがある
primitive には、参照は無く、値しか存在しない。
代入・コピーでも、値そのものが、代入・コピーされる。
参照を考えなくてよいから、わかりやすい
一方、オブジェクトの代入・コピーでは、参照だけが代入・コピーされる。
Shallow Copy
新しいオブジェクトを作っていないから、1つのオブジェクトしか存在せず、
2つの参照が、同一オブジェクトを指すから、ややこしい
新しいオブジェクトを作りながら、代入・コピーする事を、Deep Copy と言う。
Deep Copy では、オブジェクト内に、オブジェクトを含む場合、
ドンドン、中まで再帰的に、Deep Copy をしていく
最終的に、primitive に突き当たると、参照ではないので、値が代入・コピーされる。
Deep Copy の最終地点が、primitive ループ処理でもなんでもないところで、Listの0番目を取得して処理するのって、あまりよくないですよね?
人のコードでよく見るので気になってます >>71
何を気にしてるのかがよくわからんがListの0番目のデータが必要であればアクセスするし問題はない >>71
何がよくないの?どうしてあなたがそれをよくないと思うようになったのかが謎だよ。なんで? すみません。言葉足らずでした。
気にしていたのはマジックナンバーの使用です。
1. Listそのものを作成する段階で、その事前に取得していた0番目の要素は別の情報で保持しておく
2. 判断が必要な段階で、その保持した情報のみを参照して処理を行う
こうすると、あらかじめ保持しておく分の処理は増えますが、0というマジックナンバーを使うことがなくなります。 >>74
マジックナンバーってww
むしろお前のその冗長な案こそ、あとから見た人にとってはなんの意図があってこんなことしてるのかわからないだろうから、
ちゃんとコメントで言い訳しとけよw >>75
マジックナンバーを使うと、理由に関係無く上司が顔を真っ赤にして怒るので忌避しています。
自案は、要素内の情報で適宜判断するのではなく、予め情報を専用の領域に確保することでパラメータの抽象化をしたかったのです。
どちらの形でも動作は変わらないので、正直どっちでもいいのかなとは思いますが、保守性を考えると0番目取得はそうしている理由が見えづらいのでナシなのかなと考えていました。 >>76
ライブラリとか人のコードが返すリストの先頭要素が欲しいときはどうすんの? たとえばListの0番目に名前が入っていて1番目に住所が入っています
みたいな仕様だとインデックス直書きでアクセスするのはよろしくないかもね
最初の要素を取得するってだけなら0で良いと思う
最初の要素を取得するためのインタフェースとしては
・Stream.findFirst()
・Queue.element()
があるのでケースバイケースで まあデータ構造決まってるなら構造体みたいなクラスを定義するのが一番分かりやすくはあると思うけどね hash突っ込んどけば名前で扱えるからましになるのでは?
名前変わったら終わりだけどな。 すいません
スッキリわかるJAVA入門でいきなりつまづきました
system.out.println(““)この中に文字を入れて文章を表示させたんですが
「次は二桁を書き足して表示させよう」となってるんですが、一桁目のsystem.out.println(““)をコピーして
改行後下に貼り付けてコンパイルしてもエラーになってしまいます
やり方が違うんでしょうがどうしたらいいかわかりません、すいません、教えてください。 >>82
ソースコードと小一時間にらめっこして分からなかったらideoneでもpastebinでもいいからここに貼れ、話はそれからだ
というのはさておきセミコロンまでコピペした? >>87
エラー文の\12288を16進に直すと3000、これはUnicodeで全角スペースを表す
どこかに全角スペースが混ざってるから取り除くとおk
俺もやったなーこれw
解決に1時間くらいかかった >>87
セミコロンが全角
全角スペースがある
右側のエラーちゃんと見ろ >>88
ありがとうございます、解決しました!
他の方もありがとうございました! >>90
ありがとうございます
ちなみにエラー番号からエラー内容を調べる事は出来るのでしょうか? エラーの内容がそのまま書いてあるだけだよ、慣れればすぐに読めるようになる 入門書を一通りやり終えた後の次はどんなことに手を出せばいいのかわからない
今はとりあえずAPI仕様を読んだりオブジェクト指向関連の書籍でお茶を濁している最中
ステップアップのフローチャートが頭に浮かばない
デザインパターンやフレームワークもやりたいけど、多分今の実力じゃ手に余るし >>95
何か作りたいもんがあるからJavaやってんじゃないのか。
作ってるうちに足りないもんが見えてくるから
それをやればいい。 まぁみんながみんな作りたいものがあるわけでもないよね
特に初心者なんて何が出来るかもよくわからんわけだし 何かが作りたくて始めたわけじゃないのか…
俺は最初から作りたいものありきだったからよくわからん >>96
当初はAndroidアプリで音楽プレーヤーを製作したかった
でもアプリ開発入門書を読んでもコードを叩いてもちんぷんかんぷんだったからjava自体を学習し始めた
現状、デスクトップアプリとして着手しようと目標変更
そこでオブジェクト指向の理解深化やjavafxに触れたり、
OSSのソースコードを見てみたりするも絶賛五里霧中で
プログラミングに体系化された学習方法や方針があると思い込んでいる節が頭の中にあった
それがそもそもの間違いなのか 何作ったらいいかわからない?
それでは俺のためにエロゲでも作ってくれたまえ。 >>99
体系化されたものなんてほとんどないけどアルゴリズムの知識やらプログラムの組み立て方はどこに行っても役に立つから学んでおくといいかな
Aizu Online Judgeの簡単な問題でも解いてみたらどうだろう、人のコード見れるから参考にもなるし >>101
OnlineJudge初めて知った、やってみる
更なる問題としては頭の中にべき論が多数生まれたこと
java8だから新しく導入されたラムダ式で書くべき、デザインパターンに則るべきとか
他には、まずコンソールアプリをそれなりに作れるようになるべき等…
入門書に出てきた単語や技術・テクニックを習得しないと、
まともにプログラミングできない強迫観念にも似た考えを抱いた
だから作ることより知ることの方に比重が置かれて自己目的化しつつある本末転倒状態 知ることはもちろんいいことだが今は考えてる暇があったら手を動かせ
クソコードを量産して初めてわかる新機能のありがたみというのもある >>102
>java8だから新しく導入されたラムダ式で書くべき
Kotlin
javaとpythonってどっちが初学に向いてる?
https://mevius.2ch.net/test/read.cgi/tech/1496856778/41-42
ここに、読むべき本が書いてある >>102
書くのと知るの、どっちが欠けても良いプログラマーにはなれんよ
それにやってみればわかるがJavaの関数型インターフェースやストリームは既存の有名なデザパタと競合したりしない >>102
知識不足ばかりが気になるなら知識の補充だけやってればいいと思う
結局さ、なにかを作りたい人は作りたいモチベを抑えられない人なんだよ
そうじゃない人がそうなろうとしても、人種が違うんだからうまくいかないよ 質問なのですが4GBのメモリのノートPCだと本当にAndroidシミュレータ動かないのでしょうか?
もしそうだとしたら悲しい気持ちに打ちひしがれそうなのですが >>110
やってみてから言えよ
環境わかんないけどうちではメモリ4Gでも動いた
つーかJavaの質問じゃなくね? (´・ω・`)クラス.メソッド().メソッド()
この書き方わからなかったの
最初のメソッドでクラスが返ってきて、そのクラスのメソッドをつかうときにこういう書き方するんだって
しらんかったー
ようやく読み終えたスッキリわかるJava入門には説明してなかったの
こういうメソッドふたつが並んでる書き方とかみんなは特別な説明なくても見ただけでわかるの?
この辺でプログラミングの適正とかでてくるんやろか?
それで調べてたら
クラス.メソッド().メソッド().メソッド().メソッド()
とか書くメソッドチェーンっていうのもあるらしい
これってリターンで他のクラス呼び出したらどんなものでもメソッドチェーンで書けるの? >>111
う、う〜...
>>112
4GBでも動いたんですねっ!希望が持てます
自分でもやってみたのですがNexusでメモリー不足ですって出たもので
というかスレチですね
失礼しました 返り値のあるメソッドを書く時、
左側に変数を用意して代入するものだと思っていましたが、
メソッドのみで書いてもエラーにならないのですね。
この場合、返り値はどこに行くのでしょうか。
無かった事にされるのでしょうか。 メソッドチェーンは、JavaScript でよくやっている。
jQuery, Underscore とか
戻り値で、this を返すように作る。
そうすれば、同じインスタンスのメソッドを、連続して呼べる
obj = obj.a();
obj = obj.b();
obj = obj.c();
obj.a().b().c(); >>113
(クラス.メソッド()) をAと考えて
A.メソッド()って考えるといい てか、streamはメソッド数珠繋ぎが当たり前だな。それできないと不便だし。 >クラス.メソッド()
厳密に言うと、メソッドチェーンは、クラスではなく、インスタンスメソッド
そのインスタンス(this)を返すから。
bind で、そのインスタンスを束縛しているのと同じ ■ このスレッドは過去ログ倉庫に格納されています