1 名前:デフォルトの名無しさん [2010/05/01(土) 12:46:59 ] 1 名前:デフォルトの名無しさん[] 投稿日:2010/03/16(火) 10:23:04 プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作管理 ttp://pc11.2ch.net/hp/ Webプログラミング ttp://pc11.2ch.net/php/ をご利用下さい。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 ttp://www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド ★★Java質問・相談スレッド137★★ pc12.2ch.net/test/read.cgi/tech/1268702584/ 次スレは>>950 あたりで。 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 ttp://www.wikiroom.com/java/
2 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 12:47:40 ] **** 関連スレッド案内 **** ■ AWT と Swing は -- Java低速GUI Swing 9 pc12.2ch.net/test/read.cgi/tech/1261232019/ ■ SWT は -- Java 高速GUI SWT 3 pc12.2ch.net/test/read.cgi/tech/1164877399/ ■ NTT DoCoMo の iモード携帯電話用 Java (iアプリ) は -- iモード携帯電話用Java(iアプリ) Part20 pc12.2ch.net/test/read.cgi/tech/1253532993/ ■ DoCoMo 以外は -- CLDC+MIDP+携帯電話用Javaスレッド part 9 ttp://pc12.2ch.net/test/read.cgi/tech/1249357352/ ■ Androidアプリの作成は -- GoogleAndroidアプリ作成part3 pc12.2ch.net/test/read.cgi/tech/1268692293/ ■ 課題・宿題は -- ★★ Java の宿題ここで答えます Part 69 ★★ pc12.2ch.net/test/read.cgi/tech/1267796762/ ■ NetBeansに関する雑談は -- NetBeans Part5【Java/C++/Ruby/Python/PHP】 pc12.2ch.net/test/read.cgi/tech/1247926906/ ■ Eclipseに関する雑談は -- Eclipse統合M29【Java/C++/Ruby/Python/Perl】 pc12.2ch.net/test/read.cgi/tech/1265820185/
3 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 12:48:21 ] **** 開発環境が必要の場合は **** ■ J2SE 5.0 (1.5.0) ttp://java.sun.com/j2se/1.5.0/ja/ ■ Java SE 6 ttp://java.sun.com/javase/ja/6/ **** 実行環境だけが必要の場合は **** ■ Java ソフトウェアのダウンロード ttp://www.java.com/ja
4 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 12:49:47 ] ありゃ、1行余分にコピーしてるな、まあいいか 乙>俺w
5 名前:デフォルトの名無しさん [2010/05/01(土) 13:44:13 ] 1>>乙
6 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 14:27:15 ] otu
7 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 14:39:12 ] 何故、左シフトには論理左シフトと算術左シフトの2種類無いの?右シフトには論理右シフトと算術右シフトの両方あるのに
8 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 14:41:55 ] 中央シフトが無いのは差別ニダ!
9 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:07:46 ] >>7 それはね、論理左シフトと算術左シフトは結果が同じだからですよ。
10 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:09:39 ] 符号には影響されないってことか
11 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:18:42 ] つまり算術左シフトは符号無視して論理左シフトと同じように 10000010 (-126) → 00000100 (4) になるってこと? 1000100(-60) にはならないってこと?
12 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:20:59 ] >>11 アホ
13 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:22:43 ] >>11 勉強しなおせ
14 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:23:26 ] >>11 低脳のクズが市ね
15 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:33:34 ] 清清しいまでの自演
16 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:01:46 ] 自演乙
17 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:15:59 ] (´・ω・`)
18 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:17:16 ] >>11 算術シフトは符号ビットを入れるルール × 1000100 ○ 1000101
19 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:23:59 ] あれ俺まで混乱してきた 1001 1000 (-104)を算術左シフトすると 1011 0000 (-80)になっちまう
20 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:25:35 ] 算術左シフトの定義からして符号ビットは無視します^^;;
21 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:32:34 ] 元 1 000 1000 (符号付8ビット整数) 算術 左シフト 0 001 0000 右シフト 1 100 0100 論理 左シフト 0 001 0000 右シフト 0 100 0100
22 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:38:39 ] >>8 上シフトや下シフトが無いのも差別ニダ!
23 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:42:27 ] どうやら俺の理解が足りていないようだ >>21 論理シフトは符号付に向いてないからいいとして 算術左シフトで、結果的に元の数が負だったのが 00010000という負でない数になってるのは正しいのですか?
24 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:46:25 ] ビット演算 - Wikipedia ttp://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E6%BC%94%E7%AE%97 Wikipediaだと算術左シフトは符号ビット無視してる シフト演算 - Security Akademeia ttp://akademeia.info/index.php?%A5%B7%A5%D5%A5%C8%B1%E9%BB%BB このサイトだと算術左シフトは符号ビット残してる どっちが正しいのか
25 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:50:57 ] CASL II だと算術左シフトは符号ビット残す。 CやJavaだと算術左シフト=論理左シフトになる。
26 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:55:37 ] >>19 符号ビット残すと数値がおかしくなるので 算術左シフト自体に利用価値が無い。使うような用途が無い。 だから存在しない
27 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 17:24:56 ] つまり 10011000 (-104)を-208にするためにはどうすればいいってばよ?
28 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 17:48:54 ] >>21 8bitしかかいてないのでbyteデータだとすると 論理 ×右シフト 0 100 0100 ○右シフト 1 100 0100 なぜなら、論理シフトであろうと、シフトする前に32bitに符号拡張される謎仕様だから
29 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 18:00:49 ] 理論上じゃなくてまずJava仕様だったなwスレ的にw
30 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 18:05:15 ] >>27 int a=-104; System.out.println("a="+a); a*=2; System.out.println("a="+a); //Output // a=-104 // a=-208
31 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 18:20:16 ] >>27 8bitでは-208は表せませんが
32 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 20:58:15 ] 自分をシフトしたいわ
33 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 21:04:17 ] >>31 8bit整数を負符号オンリーで現せば ほら 0〜-255 この通り1
34 名前:デフォルトの名無しさん [2010/05/01(土) 21:30:38 ] そんな一般的でない符号化が許されるなら、1ビットで-208表したっていいだろ。0ビットでもいいかもな。
35 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 22:08:47 ] 0bitは無理だろ
36 名前:デフォルトの名無しさん [2010/05/01(土) 22:19:55 ] Javaに限らず 算術左シフトなんて需要ないだろ・・・
37 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 22:30:05 ] >>34 int hugo(byte n) { return -127+(int)n; }
38 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 23:39:30 ] >>36 Javaに限らなければ需要はあるぞ オーバーフローフラグを持つCPUなら算術シフトと論理シフトでフラグの変化が違う
39 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 00:06:29 ] それでも負数に使うことは無いだろう
40 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 01:46:57 ] 内部クラスでthisって使ったらthisは何を参照してることになるの?
41 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 03:38:40 ] >>40 内部クラス
42 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 04:33:26 ] >>41 なるほど。以外に不便そうだな内部クラスってのは
43 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 04:38:57 ] class ClassA { private static ClassA classA; ClassA() { classA=this; ClassB classB=new ClassB(); } void hoge() { System.out.println("hoge!"); } class ClassB { ClassB() { this.hoge(); ClassA.classA.hoge(); } void hoge() { System.out.println("hoge?"); } } }
44 名前:デフォルトの名無しさん [2010/05/02(日) 10:52:12 ] 全ての植物は植物クラスを継承する 全ての食物は食物クラスを継承する このような考えを元に継承を考えたとき、多重継承が無いJavaでは どちらにも該当するりんごクラスなどをどのように実装すればいいんでしょうか?
45 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 11:36:03 ] class Plant{ } interface Eatable( } class Apple extends Plant implemnts Eatable{ } こんなんでどうでしょ? 食べられるものにはEatableを実装と言うことで。
46 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 12:55:39 ] 正直継承よりはインタフェースにこだわった方がいいよ。 あと別にクラスで無理やり自然界を記述しなくてもいいから。
47 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 13:00:46 ] で、Java 7 は何時出るんだよ?
48 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 13:16:38 ] >>43 そんな危ないことしなくても、外側のメンバを直接呼び出すか、 名前がかぶっているなら ClassA.this.hoge(); でいい
49 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 15:12:41 ] >>48 クラス名.thisの参照方法を知らないんだろ。
50 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 15:38:55 ] public ClassA { private static ClassA classa = new ClassA(); private ClassA() { new ClassB(); } public ClassA getInstance() { return classa; } public void hoge() { System.out.println("hoge!"); } private class ClassB { public ClassB() { hoge(); ClassA.hoge(); } public void hoge() { System.out.println("hoge?"); } } } 何となく、>>43 のを書き直してみた 専ブラで書いたから、スペルとか間違えてるかも
51 名前:デフォルトの名無しさん [2010/05/02(日) 23:25:06 ] >>48-49 >クラス名.this kwsk
52 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 23:27:13 ] >>50 本来の形から>>40 の意図に合わせて単純化されたクラスをそのように直してしまってもいいのでしょうか?
53 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 23:32:55 ] 結論: 設計を見直せ
54 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 23:34:11 ] >>51 Java で内部クラスから外部クラスの関数を明示的に呼ぶときはどう書くのか教えてください。 - 人力検索はてな q.hatena.ne.jp/1122203296
55 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 23:37:53 ] class ClassA { ClassA() { new ClassB(); } class ClassB { ClassB() { new ClassA(); } } }
56 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 00:15:31 ] 別にコンストラクタで無限ループさせるなら内部クラス経なくてもよろしくてよ
57 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 01:05:35 ] 出来る出来ないという仕様的な話はありかと思うけど、 実際にこんなコード渡されたらぶちぎれるw
58 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 04:28:51 ] switchのジャンプで一番最後のところでもbreak;って入れたほうがいいの? 例えば switch (n) { case 1: hoge(); break; case 2: hoge2(); break; //←これとか } switch (p) { case 1: hogehoge(); break; case 2: hogehoge2(); break; default: hogehoge3(); break; //←これとか }
59 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 04:35:52 ] 一々選択的に書いたり書かなかったりしていると何時かうっかりミスが出るから 書く癖を付けとけ。
60 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 05:05:18 ] switch多重ネストでソースがごちゃごちゃしてわけわかんなくなった
61 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 05:14:01 ] switchのcaseをインデントする癖がついてるんだけど、やめたほうがいいのかな
62 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 05:21:31 ] 今時は IDE も色分けするしフォーマッターも付いてるから 仕事でコーディング規約とかなければその程度は良いんじゃねぇか。
63 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 08:54:01 ] ある程度まではオートフォーマッタとCheckstyleやら Findbugsに全てを委ねてる
64 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 13:20:00 ] defaultで処理をするのは意味的にどうかと思う。 っていう宗教戦争を投げかけてみる。
65 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 13:29:22 ] まあ列挙に対する全てのパターンを記述する場合とか、 defaultにAssertionErrorをスローするコードとか書くんじゃね?
66 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 16:06:41 ] LinkedHashSetにはなぜlistIterator()メソッドがないのだろう。 ListIterator#previous()で反復子を前に移動したかったのに。 next()しかできないよ。 しぶしぶLinkedHashSet使うの辞めてLinkedListにしたけど。 Setは重複を許さないから使い勝手がいいと思ったんだけどな。 LinkedListにしたので挿入時に重複チェックしなきゃならない。 もっといいCollection型はないかな?
67 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 16:12:17 ] あと、ListIterator#next()とprevious()の仕様、反復子の隣の要素取ってから反復子を隣に移動させているが これを、反復子を移動させてから隣の要素とるように指定できないだろうか。
68 名前:67 mailto:sage [2010/05/03(月) 16:29:46 ] 一応、自己解決したかも知れない。 List<String> ll = new LinkedList<String>(); ll.add("A"); ll.add("B"); ll.add("C"); ListIterator<String> it = new ListIterator<String>(); String result; it.next(); result = it.next(); it.previous(); return result; .//これでカーソルをAとBの間に移動しつつBを取得できる。 next()二回実行してprevious()を実行するというやり方。 逆方向の場合はprevious()を二回実行してからnext()を実行。 問題はListの末端に来たときの処理も作っておかないといけないのが難点。 if(lt.hasNext())とかif(it.hasPrevious())とかでまいどまいどチェックしないといけない。 本当は、末端に来てnext()したら先頭に戻る永久ループ型のIteratorが欲しいのだが…。 時計の針のように12時になったら0時からスタートする、というIterator。 Apache Common Collectionsあたりでも探すしかないだろうか…。しかしあのCollection Frameworkはまだ Genericsに完全対応していないし…。
69 名前:67 [2010/05/03(月) 16:48:13 ] 見つけた。末端でnext()すると先頭に戻るLoopingListIteratorを発見。 案の定、Genericsに対応していない残念なコレクションフレームワークだった。 commons.apache.org/collections/api-release/org/apache/commons/collections/iterators/LoopingListIterator.html しかしLinkedListにはこのIteratorに変換するメソッドがない。 ということはどこかのクラスのstaticメソッドを使うのだろうか、それともこのLoopingに対応したListIteratorと 別途用意しなければないのだろうか…。
70 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 16:50:00 ] commons.apache.org/collections/api-release/org/apache/commons/collections/IteratorUtils.html#loopingListIterator (java.util.List) やはり専用のメソッドが用意されていた。 IteratorUtils.loopingListIterator(java.util.List)
71 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 17:02:54 ] Set は List のように順序性を維持するものではない。
72 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 17:19:33 ] >>68 >本当は、末端に来てnext()したら先頭に戻る永久ループ型のIteratorが欲しいのだが…。 これでいけない? www.javaworld.com/jw-07-1997/jw-07-enumerated.html?page=6
73 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 17:20:27 ] それくらいテメェで作れよと。
74 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 17:25:41 ] >>69 > しかしLinkedListにはこのIteratorに変換するメソッドがない。 コンストラクタに放り込むだけじゃない?
75 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 19:05:07 ] #include standard io.h
76 名前:67 mailto:sage [2010/05/03(月) 21:59:19 ] >>71 しかし、LinkedHashSetは順序性を維持するものになっている。 LinkedHashMapも同様。LinkedとついたSetとMapはadd()した順番にオブジェクトが並び順序性が保証されている。 順序性が保証されないのはHashSetとHashMap。 >>72 おお自作物。アルゴリズムとデータ構造の本に載ってそうなコードだ。 すでにCommons CollectionsにLoopingListIterator という便利なクラスを見つけたので一応は解決したと思う。 >>74 それも一応、>>70 のユーティリティクラスを使うという解決策を見つけた。 今探しているのは反復子を移動してからデータを取り出す方法。 現状のnext()はデータを取り出してから反復子を移動している。 何をやりたいかというと、時計の針のようなものを再現したいだけ。 Iteratorを継承した新しいIteratorクラスを作ってそこに独自のnext()メソッドを実装する しかないだろうか。 俺はIteratorの間違った使い方を試そうとしているのかもしれない。
77 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 22:05:33 ] >>74 IteratorUtilsが必要と思ったら コンストラクタもあった。 LoopingListIterator(java.util.List list)
78 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 00:13:31 ] int h=100,i=100,j=100; h += ++h; i += i++; j += (j+=1) + (j+=10); System.out.println("h="+h); System.out.println("i="+i); System.out.println("j="+j); 無精できねえ・・・なんてこったい
79 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 00:49:55 ] >>78 結果が分からないCよりはマシだろ
80 名前:デフォルトの名無しさん [2010/05/04(火) 02:20:03 ] >>35 1ビットあれば、二つの数(例えば0と-208)を符号化できる。 0ビットあれば、一つの数(例えば-208)を符号化できる。 一般にnビットあれば、2のn乗個の数を符号化できる。
81 名前:デフォルトの名無しさん [2010/05/04(火) 02:56:50 ] その0biって奴tはハードウェア的にもソフトウェア的にも実現不可能だな 概念的には存在しうるみたいだけど イデアみたいなもんか?
82 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 12:51:36 ] セットにイテレータなんてないだろ。 自作すりゃいいもんをだらだら張り付けるな。 ブログでやれ。
83 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 13:24:46 ] え?SetはCollectionだからIterableだろ?
84 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 16:07:44 ] >>83 それはJava Collection Frameworkの実装の都合だろ。 setてのはふつう順不同というか要素の前後関係は知らないもんだろ。 そういう用途はlinkedlistだ。 たとえIteratorを持ってたとしてもputやsetした順に 取得できる保証もないし前後関係を知らないんだからprevで要素が取れるわけもない。 LinkedHashSetがあがってるがこれは実装由来のコレクション。特殊な要件で使うもんだ。
85 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 16:30:57 ] >>84 SetがIterableであることが、実装上の都合だという ソースはどこにあります?
86 名前:デフォルトの名無しさん [2010/05/04(火) 16:53:06 ] 実装されているが、仕様に規定がないなら、それは実装上の都合ということ。 ないことは示せない。あえて示すならこの世の仕様をすべて見ろと言うしか無い。
87 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 17:07:26 ] いや、意味が分からないんだが。IterableはCollectionの契約だろ? まあ気にくわないならUnsupportedOperationExceptionでも投げればいいけど。 正直何をいいたいのかさっぱり。
88 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 17:46:07 ] お前がコレクションやらコンテナと呼ばれるものの使い方を理解してないだけだろ。 だいたいLinkedHashSetは既存のsetを守りつつ順序を保ちたいときに使うラッパーだ。 IterableなのはCollectionインターフェイスで強制されてるからだ。
89 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 17:49:27 ] >>87 たぶん 「Setってーのは重複要素がないコレクションなんだぜ。」 「Setの実装クラスが何を持とうとそれは実装都合なんだぜ。」 「CollectionってーのはIterableだが、順序付けされているかそうでないかは実装クラス次第なんだぜ。」 ってことをいいたいんじゃないのかな。
90 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 17:55:52 ] >>89 いや、>>82 でSetにイテレータ無いって言ってるから どういう意味かと思って。
91 名前:89 mailto:sage [2010/05/04(火) 18:17:25 ] >>90 それは、ミスったんじゃないかな。>>84 で、 「Iteratorがあっても(入れた時の)順序を保障するものではない。」※括弧内はおれ補完 と記載されているし。 ところで、なんだかIteratorとIterableをゴチャゴチャに書かれている書き込みが多い気がする。
92 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 18:29:49 ] Collectionの話してるんだ。混ぜて構わんだろ。
93 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 18:44:50 ] 列挙性とその順序性は全く別の話。 分かっていないバカが一匹混ぜ繰り返している。
94 名前:デフォルトの名無しさん [2010/05/04(火) 22:36:28 ] あるメソッドの中だけ別のpackageを参照するように出来ますか? クラスのあたまで import org.easymock.EasyMock; とやると そのクラスのメソッド内で EasyMock. と呼び出すと上のパッケージのクラスを参照するじゃないですか? で、あるメソッドだけ org.easymock.classextension.EasyMock のクラスを参照したいのですが、上記のようにフル修飾名をいちいち入れるとソースが見づらくなるので、あたまでなんか宣言して、そのメソッドだけ別のパッケージを参照するように出来ませんでしたっけ? 方法ありましたらお願いします
95 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 23:05:43 ] JavaScript なら出来るが。
96 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 23:31:04 ] Effective Java 2版 140p に通常のキャストと Class.cast の説明があったのですが、意味がよく分かりませんでした。 class Favorites { private Map<Class<?>, Object> favorites = new HashMap<Class<?>, Object>(); // Class.cast public <T> T getFavorite(Class<T> type) { return type.cast(favorites.get(type)); } // キャスト演算子 public <T> T getFavorite(Class<T> type) { return (T)favorites.get(type); } } 上記の Class.cast を使う場合ととキャスト演算子を使う場合ではどのような差があるのでしょうか? この二つに差があるのだとしたら、どのようなときにどう使い分けるのでしょうか? どうかお願いします。
97 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 01:04:29 ] >>96 public Favorites() { favorites.put(Integer.class, "string"); } と変なもの入れて Favorites f = new Favorites(); try { System.out.println(f.getFavoriteCast(Integer.class)); } catch (Exception e) { e.printStackTrace(); } try { System.out.println(f.getFavorite(Integer.class)); } catch (Exception e) { e.printStackTrace(); } と使ってみるといい。f.getFavoriteCastはClass.cast版ね。
98 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 02:09:36 ] 質問です。 getClass()メソッドのテストをしようと思い、次のようなソースを実行しました。 配列int[]とStringクラスでgetClass()を行い、結果をprintln()で出力するものです。 出力結果の" class [I "というのはどういう意味なんでしょうか? (てっきり"class java.lang.reflect.Array"あたりが出力されると思ったのですが…) そもそも配列にgetClass()を行うのは好ましくないのでしょうか? 【ソース】 public class Test1 { public static void main(String[] args){ int[] a = {1,2,3}; System.out.println(a.getClass()); System.out.println((new String("abc")).getClass()); } } 【出力結果】 class [I class java.lang.String 以上です。 どうぞよろしくお願いします。
99 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 02:22:42 ] >>98 java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#14152
100 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 02:37:47 ] >>99 こんな仕様があったとは知りませんでした。勉強になります。 夜遅くにご回答いただき、どうもありがとうございました。
101 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 04:33:17 ] >>97 キャスト演算子は型が一致しなくても放置で Class.cast は型が一致しなければ ClassCastException を投げる の違いということですか?
102 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 06:34:21 ] Class#castだと Integer.class.cast("") とかコンパイル通っちゃう。
103 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 09:55:29 ] そんな珍しいコードよう書かんわw ちなみに、ジェネリックスとの組み合わせは分かりにくくなる罠。 現状のジェネリックスはある種のトリックだから。 www.ibm.com/developerworks/jp/java/library/j-jtp01255/
104 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 15:37:01 ] class ClassA { private String name=null; ClassA(String name) { this.name=name; } String getName() { return name; } void setName(String name) { this.name=name; } } class ClassB { static void method1(ClassA c) { c.setName("Method 1"); } static void method2(ClassA c) { c=new ClassA("Method 2"); } } とあったとき ClassA a=new ClassA("Class A"); System.out.println(a.getName()); ClassB.method1(a); System.out.println(a.getName()); ClassB.method2(a); System.out.println(a.getName()); としたら Output: Class A Method 1 Method 2 ってなるよね?
105 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 16:00:45 ] >>104 最後のMethod 2はMethod 1のままだろ。 Javaでは参照渡しはできない。参照の値渡しなら出来る。
106 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 16:39:21 ] なるほど・・・残念
107 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 19:08:05 ] Class.cast なんて初めて知った どっちも実行時に型チェックして例外投げると思うんだが何が違うの?
108 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 19:25:43 ] >>97 で相違動作のサンプルまで書いてあるじゃねーか。
109 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 19:28:47 ] 未チェック警告抑止しなきゃならない時に手元に Class オブジェクトがあれば Class#cast() でやってる。 private final Map<String,Object> values = new HashMap<String,Object>(); public <T> T getValue(String key, Class<T> type){ Object value = values.get(key); if(value == null) return value; assert(type.isAssignableFrom(value.getClass()): value.getClass().getSimpleType(); return type.cast(value); }
110 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 19:48:08 ] >>97 やってみたけどf.getFavoriteが例外投げないのは何故? 通常のキャストも実行時の型チェックやってるよね?
111 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 20:01:52 ] >>110 ジェネリクスのイレイジャ機構により、 おそらくキャストしてる方は実行時Integer型ではなく Object型そのまんまで扱ってる。(実行時に型情報は消えるから) ただ、もちろん Integer i = f.getFavoriteCast(〜〜); とすればClassCastExceptionが発生する。
112 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 20:02:21 ] >>109 Classオブジェクトが無いときはどうするの?
113 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 20:11:57 ] >>112 Classを用意できない場合ってあるかい?
114 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 20:14:46 ] curses的なことができる何かってないですか? jcursesというのとlibjcsiというのを使ってみたけど、 マルチバイト文字に対応してない?っぽいので、 いいの知ってる方教えてください。
115 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 21:13:38 ] >>113 1.5以前とか総称型を想定してないのとか
116 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:14:47 ] 普通のプログラミングとネットワークプログラミングは別なんでしょうか? ネットワークプログラミングを習得しないといけないことになったんですが 即ネットワークプログラミング? 普通のプログラミング習得⇒ネットワーク? プログラムに関してはC言語をファイルの入出力なんかあたりまでやった程度です。
117 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:15:18 ] jcursesもlibjcsiなんかして日本語通ったはずだが忘れた。 CHARVAは無理だった。
118 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:16:51 ] 1.5以前というか総称型以前はそもそも未チェック警告が無いからキャストで 問題なかったはず。
119 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:29:24 ] >>116 普通の業務アプリではネットワークプログラミングはしません。 そういう意味では別です。それ以外を除けば別じゃありません。 ネットワークプログラミングというのは、 簡単に言えば、ちょっと面倒くさいファイル入出力です。
120 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:38:55 ] プロトコル考えなきゃ行けないからちょっとでは済まんだろw
121 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:40:20 ] じゃあ面倒くさいファイル入出力でいいよ。
122 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 23:02:44 ] ファイル入出力もネットワーク入出力も同じようなもの。には同意。 「普通」って発言にはちょっと引っかかるな。 自分トコだとJavaサーバと.Netリッチクライアントが「普通」なんだが。 また別のトコだとWEBアプリが「普通」だったり、Excel+ODBCが「普通」だったり。 RubyサーバにJavaリッチクライアントが「普通」なんてトコもある。 皆それぞれに「普通」。
123 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 23:04:34 ] >>118 そういう意味じゃなくて、総称型を想定しないで作ったクラスだとメソッドの追加が必要になるけど言語仕様ごとにクラスの修正やメソッドの追加は出来ないってこと。 ほとんどのクラスはもともと総称型を意識しないような設計だからClassをいちいち用意できない。
124 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 23:07:58 ] 同じ様なものって、ストリーム型入出力の基礎の基礎のところだけじゃねえか。 まともに使おうと思ったら相手方のアプリの知識も非同期処理の知識も、 もちろんバークレイソケットの知識も必要になる。プロトコルによっては 状態管理もパケ落ち対応も必要。
125 名前:116 mailto:sage [2010/05/05(水) 23:10:12 ] 文字見ただけで難しそうですね・・・ P2PにおけるDHT関連をやるんですが。
126 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 23:43:01 ] >>124 詳細言い出したらキリないだろうが。 ファイル入出力だってファイルシステム言い出したらキリないし、 そもそもフォーマットはどうだの、即時追記に対応するだの、 クラッシュ時安全にするだの、あるよ。 お前はいちいち全部言わないと気が済まないのか
127 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 23:59:38 ] >>125 P2PでDHTとかってのは業務的なことでネットワークプログラミング の範疇に入れるべきなのだろうか? スレッド間でロジックをシミュレートすることだって出来る部分だし。 確かどっかでアプレット見た気がする。ノード毎に伝搬していく様子の。
128 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 00:09:16 ] あ、スマン。それ言い始めたらアプリケーション層のアプリって軒並み ネットワークじゃねぇってことになる。
129 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 00:13:04 ] >>126 それらを同じ様なものと言いのける低脳。
130 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 00:26:18 ] スーパークラスのメソッド呼ぶときって必ずsuper.method();ってしたほうがいいの? つまり class ClassA { void hoge() { System.out.println("Hoge!"); } } class ClassB extends ClassA { void hogehoge() { super.hoge(); //← super. つけたほうがいいの? hoge(); //← super. つけないほうがいいの? } } classBでhoge()をオーバーライドしてないとして
131 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 00:36:37 ] >>130 どっちでもいい。 むしろhoge()のほうをthis.hoge()にしてほしいわ。
132 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 00:49:24 ] >>131 スーパークラスのメソッドってthis.で呼び出せるって知りませんでした。勉強になりました。 ありがとうございます
133 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 00:51:05 ] >>131 ちなみにsuper使う場合もthisってつけたほうがいいんですか? this.super.hoge(); ? super.this.hoge(); ? なんか細かいことばっか訊いてすみません
134 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 03:12:26 ] >>94 static import? リフレクション?
135 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 03:26:56 ] >>84 > >>83 > それはJava Collection Frameworkの実装の都合だろ。 > setてのはふつう順不同というか要素の前後関係は知らないもんだろ。 > そういう用途はlinkedlistだ。 > > たとえIteratorを持ってたとしてもputやsetした順に > 取得できる保証もないし前後関係を知らないんだからprevで要素が取れるわけもない。 そもそもあるコレクションにlistIterator()メソッドがないとprevious()が使えない。 コレクションによってはiterator()メソッドしか実装されてないのがある。 > LinkedHashSetがあがってるがこれは実装由来のコレクション。特殊な要件で使うもんだ。 SortedSet、TreeSetもComparableが実装されたオブジェクトをadd()できるから (挿入ソートで挿入したときにComparable#compareTo()が働いて自動的に順番が並ぶ) 順序関係は保証される。これも特殊だと? LinkedHashSetとArrayListとの違いはオブジェクトが重複を許すか許さないかの違いでしか無いと思うが。 使えるメソッドも若干違うが。
136 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 03:36:15 ] 抽象化と実装仕様の区別も付いていない人が何で Java なんかやってんの?
137 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 03:44:21 ] >>132 >>133 なぜthisやsuperをつけるのかわかってないような気がする。 途中からClassBにhoge()という名前のメソッドを 新たに作ることになったとき(hogeをオーバーライド)は、thisをつけると 新たに作ったメソッドのほうが呼ばれるのだが。 後でhoge()メソッドをオーバーライドするときに備えてsuperというキーワードが用意されている。 いかなる状況でもClassAのhoge()メソッドを呼び出したいのに、あとからClassBのhoge()メソッドを実装すると なぜかClassBのhoge()メソッドを呼び出してしまう。そういう問題を防ぐために、superというキーワードがある。 だから将来のオーバーライドや、同じ名前のメソッド名衝突に備えてsuperクラスのメソッドを呼びたいときはsuperをつけるべき。 (ちなみにスーパークラスに同じ名前のメソッドがあることに気付かずメソッド名衝突する問題はJava5から登場した@Overrideアノテーションで回避できる) 自分のクラスのメソッドを呼びたいときはできるかぎりthisをつけるべき。インスタンスメソッドはできるかぎりthis.メソッド名() staticなメソッドはthisつけないでクラス名.メソッド名()とするのが望ましい。Checkstyleとか使ってコーディング規約を守るなら。 そもそもthis.superとかsuper.thisなんて記述ではコンパイル通らない。
138 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 03:58:36 ] 詳しい説明ありがとうございます
139 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 04:03:05 ] となると、変数や定数のフィールドもsuperやthisをつけて使ったほうがよさそうですね・・・ 今後気をつけます
140 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 04:14:16 ] 仮に>>130 の例で
141 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 04:17:57 ] 仮に>>130 の例で ClassBでhoge()をオーバーライドしたとき 他のクラスからClassBのインスタンスからスーパークラスであるClassAのhoge()を呼び出すってことできます? 例えば class ClassB extends ClassA { void hoge() { System.out.println("Hoge Override"); } } class ClassC { void nanika() { ClassB b=new ClassB(); b.hoge(); //←ここでClassBのhoge()じゃなくてスーパークラスのほうのhoge()を呼び出すことって出来ますか? } }
142 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 04:23:30 ] できないしできたらおかしい
143 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 04:25:43 ] class ClassC { void nanika() { ClassB b=new ClassB(); ClassA a=(ClassA)b; a.hoge(); //←もしかして、こうしたらスーパークラスのほうのhoge()になりますか? b.super.hoge();とかありそうな気もします } }
144 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 11:42:54 ] >>94 Javaでは無理ですね。1ファイル中に登場するクラスの単純名が重複している場合は そのうち1つだけしか単純名で扱えず、それ以外はFQNで書く必要があります。 Groovy(Scalaも?)は別名をつけられるので、上記のようなJavaの煩わしさは 軽減できるようですが。
145 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 13:29:43 ] >>141 できない。 >>143 できない。ためしにコンパイルしようとすればわかる。 どうしてもそんなことしたかったら ClassA a = new ClassA(); a.hoge(); こうする。 bを(ClassA)にキャストしても中身はこれと同じだからオーバーライドしたメソッドしか呼び出されない。 ClassA a = new ClassB(); というかいい加減に自分でコンパイルして自分の目で確かめろと。
146 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 14:04:49 ] >>142 ,145 回答ありがとうございます。 出来ないのですか・・・となるとどちらも使いたい場合は 何とかメソッド名を変えるなり対応するしかなさそうですね・・・ わかりました
147 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 14:59:25 ] >>146 マジレスすると設計がおかしい
148 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 18:42:54 ] >>146 デザインパターンの勉強をすべき
149 名前:114 mailto:sage [2010/05/06(木) 19:48:50 ] >>117 機種依存部分に対してなんかするんだったか、 jar内のjava部分に対してなんかするんだったか、 自分が書いたコードに対してなんかするんだったかだけでも思い出せませんか? いすれにしても素敵なヒントありがとうございました。
150 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 19:51:29 ] >>149 罫線がSJISとかだと半角カタカナの領域できめうちだったりしたような。
151 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 21:37:13 ] Java6からQueueが追加されたっていうんで調べてみたら LinkedListがQueueを実装してpop()が使えるようになってた。 早速使ってみたが private List<String> list = new LinkedList<String>() this.list.add("test"); this.list.add("abc"); this.list.add("def"); String result = list.pop(); という使い方はさすがにできなかった。 pop()はQueueで定義されListで定義されてないため。 private Queue<String> list = new LinkedList<String>() とやりたかったがLinkedList#listIterator()を使いたかったために 仕方なく private LinkedList<String> list = new LinkedList<String>() ってやった。 なんだかな。
152 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 21:39:35 ] おまえはコンクリートクラスをベタ書きで使ってるのがお似合い。
153 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 21:41:53 ] >>151 意味が分からない俺は初心者です。ハイ。
154 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 22:02:30 ] >>151 まさにLinkedListの性質が必要となっているので、 インタフェースを指定する必要はない。 ところで、<E, T extends List<E> & Deque<E>> とか&指定する機会ってあんまりないよねー。
155 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 22:47:47 ] >>151 意味がわからん。 なんでqueue使うのにlistIteratorが要るんだ? だいたいLinkedListじゃなくてArrayDequeue使うところだろ。 listIterator使うってことはカーソル基準の相対位置にアクセスしたいのか? pop要らんしpopしたら意味が変わってくるだろ。
156 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 22:50:34 ] ところでリスト更新したらConcurrentModificationでない?
157 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 23:40:44 ] >>155 というかさ、LinkedListだとしても普通に Queue<String> queue = new LinkedList<String>(); queue.add("1"); queue.add("2"); queue.add("3"); String elm; while((elm = queue.poll()) != null ){ System.out.println(elm); } だと思うんだ。
158 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 23:53:08 ] >>151 Queue<String> q = new LinkedList<String>(); q.add("test"); q.add("abc"); q.add("def"); Iterator<String> i = q.iterator(); while (i.hasNext()) { System.out.println(i.next()); } System.out.println("-----"); String s; while ((s=q.poll())!=null) { System.out.println(s); } とかはダメなのか?ListIteratorしか使えない呪いでも?
159 名前:157 mailto:sage [2010/05/07(金) 00:00:16 ] >>158 Iterator<String> i = q.iterator(); while (i.hasNext()) { System.out.println(i.next()); } の部分は、 for(String s : queue){ System.out.println(s); } の方がスッキリして好きだな。
160 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 00:04:30 ] 前の LinkedList 厨だからスルーが吉
161 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 05:38:23 ] え?厨?
162 名前:デフォルトの名無しさん [2010/05/07(金) 09:04:58 ] 初心者です。試験勉強用の事で、言葉の定義とかなんですが、質問させて下さい。 1)メソッドに渡した基本型のフィールド変数は、メソッド内側の操作は、 外側の変数には反映されないでしょうか。(合っていますよね。) 2)このメソッド内の変数をローカル変数と呼ぶ、合っていますか。 3)通常、引数で渡した変数の反映を読んだ側でも反映して返すには、 戻り値で返すのが普通でしょうか。(static変数との使い分けがよく分からない;) 4)メソッドに参照型の参照で渡した場合、 メソッド内部のインスタンスに対する操作は反映される、っていうのが、 当たり前だと個人的には感じるんだけども、 わざわざ参考書とかで説明してあるのが謎です。 例えば、 method1(Vector v)の中で Vector v = new Vector(); v.add(new String("abc"); とやった場合には外側のvにはabcはくっつかない、 method2(Vector v)の中で v.add(new String("abc"); とかやると、くっつく、と。 当たり前の様な気もしますし、どうなんでしょう。 5)この4)の場合と、1)の場合を比較した時の理論がよくわかりません。 1)だと、メソッド側に引数で渡された基本型の値はコピーされて (多分JVMのメモリにはその値用の領域が確保されますよね) メソッド内の操作はそのコピーされた領域に保存された値を操作しているんだと 思いますが、4)で参照を渡した時も、参照は別の領域にコピーされるんですよね。 すると、4−method2の場合には、v.add〜のvで指せる参照はコピーされた 値な様な気がして・・どうなんでしょうか。
163 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 09:25:20 ] >>162 1:反映されません。というよりは、関数内の変数に値がコピーされます。 2:ローカル変数と読んでもいいです。パラメータって普通言うけど。 3:staticは基本的に何度も値を書き込むのに使わないでください。 基本的に定数に使うものです。 返り(戻り)値で済むなら返り値を使ってください。 返り値で済まないなら、状態を持つクラスのインスタンスを渡して、 それに対してメソッド内部で操作を行います。 void method(VOClass vo){ vo.setXXXX("hogehoge"); } クラスを作るのが面倒な時は配列で渡します。 あんまりやらないほうがいいですが。 void method(Object[] o){ o[0] = "hogehoge"; } 4.どうなんでしょう?っていわれてもね、参考書は初学者のためのものだからね。 でもオブジェクトの値渡しするような言語(C++)は、普通に引数にモノを渡すと 一般的にはオブジェクトがコピーされるんで、その理論は通用しません。 どうでもいいですが、Stringのコンストラクタは意味がないどころか 普通はコスト的に有害なので超特別な理由がない限り呼ばないでください。 あとVectorじゃなくて普通はArrayListを使います。 5.Javaには参照渡しはありません。メソッドのオブジェクトを渡した時は、 オブジェクトへの参照がコピられて値渡しされてるだけ。 オブジェクト以外の基本型(プリミティヴ)を 渡した時もその値がコピられて値渡しされてるだけ。 method2はmethod2に渡した引数(オブジェクト)の参照がコピられて method2のvパラメータに設定されているだけ。 参照ってのは32bitのメモリ空間を表す数字ね。
164 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 09:41:37 ] >>163 >staticは基本的に何度も値を書き込むのに使わないでください。 >基本的に定数に使うものです。 定数のときはstatic final クラス内で共通、唯一つな時に使えばいいのであって何度も値を書いて問題なし FPSでの弾の数とか
165 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 10:41:33 ] >>164 弾の数… ビミョー。使っちゃダメってことはないけど、 あんまり正当化できるシーンは少ない。 少なくともstatic変数が現れたら「きちんと使っているかどうか」 ってのは見てしまうね。コードレビューの時とか。 だいたい「使う正当な理由はないよね。じゃやめて。」 って注意して終わる。
166 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:41:40 ] javaの公式サイトにここ数日まったく繋がらないんですが・・・
167 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:51:15 ] >>166 java.sun.com/ 普通にこのサイトにつながるけど
168 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 18:49:58 ] >>155 それArrayDequeueじゃなくてArrayDeque javadocにも書いてある通りdequeとdequeueでは英語的にもまったく意味が違う 話を戻して、Listに入れたい要素のオブジェクトを作るクラスを独自に作って 前後関係をもたせたので結局Iteratorを使う必要がなくなってしまった。 Chain of Responsibilityのたらい回しを参考に、となりどうしのオブジェクトがお互い参照しあう方式をとることにした。 それとは別にこういうデータ構造が必要だった。 ・基本的に、Stackのように端からしかデータを取得除去する必要がないからpop()を使う。 ・ひたすら端からデータを取るだけ。 ・要素が空になったときのみ一気に補充する。 ・感覚としては弾薬の再装填や燃料補給に近い。しかし個々の要素はまったく異なるものを含み重複を許可する。 だから削除速度が速いらしいLinkedListにした。 Dequeによるとpoll()はpollFirst()と同じ。 pop()はremoveFirst()同じ。 removeFirst()は空のときNoSushElementExceptionをthrowするpollFirst()。空のときはnullを返す。 (isEmpty()を使えば例外は気にしなくていい) みたいだったがnullで判定するのが好きな人が多いね。
169 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 18:55:45 ] >>165 > >>164 > 弾の数… ビミョー。使っちゃダメってことはないけど、 > あんまり正当化できるシーンは少ない。 > 少なくともstatic変数が現れたら「きちんと使っているかどうか」 > ってのは見てしまうね。コードレビューの時とか。 > だいたい「使う正当な理由はないよね。じゃやめて。」 > って注意して終わる。 複数のインスタンスでひとつの状態を共有するときはstatic変数は重宝する。
170 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 19:28:14 ] だから"ビミョー"なんじゃないの?
171 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 20:00:11 ] 書籍『Java言語仕様』によると、純粋主義者はインスタンスフィールドはすべてprivateにすべき staticフィールドはfinalにすべきというが、そんな感じの意見か。 staticなフィールドの代替をCollectionを集約したSlngletonで代用するとかいう感じか。
172 名前:デフォルトの名無しさん [2010/05/07(金) 21:51:12 ] 入力するときに、import java.io.* とimport java.io.* って何が違うの? JAVA初めて即効分からなくなった。 どっちのがいいとかある? IOで解説してるサイトが多いからそっちのが簡単とか?
173 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 21:52:56 ] 間違えた。 java.util.
174 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 21:55:27 ] ( ゚Д゚)ポカーン
175 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 22:01:12 ] イギリスとフランスって何が違うの?級の質問
176 名前:デフォルトの名無しさん [2010/05/07(金) 22:09:21 ] そうなんですか。 ではテキスト通りutilにします。 有難うございました。
177 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 22:23:00 ] test
178 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 22:28:00 ] 質問させてください。 現在コンソール入力でヒットアンドブロー(数字当て)のゲームを開発中で詰まっている点があります。 まず、プログラム上で乱数にて4桁の数字をセットします。 コンソール画面上の例 : ▲回目:1234 ⇒ Hit :● Blow :● ※▲には入力の回数カウンタを表示。 ※●には入力した数字に対して正否の数字がそれぞれ入る。 @『 ▲回目: 』 と表示させた後、ユーザーが入力で4桁の数字を入力してEnterを押す。 ABufferedReaderクラスのInputStreamReaderメソッドにてSystem.Inを入力し変換させ表示 B正否判定を表示 『 ⇒ Hit :● Blow :● 』 このAとBの間で、改行させずに入力を行いたいのですがうまくいきません。 改行はBの正否の判定を表示した時にSystem.out.printlnでするだけにしたいんです。 以下のような形での画面・入力仕様が目標です。 1回目:1234 ⇒ Hit :0 Blow :4 2回目:2525 ⇒ Hit :2 Blow :2 1回目:7777 ⇒ Hit :4 Blow :0 Congratulation・・・
179 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 22:29:48 ] >>178 どうせBufferedReaderでreadlineとかしてんでしょ。
180 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 22:32:18 ] >>179 はい、その通りです。
181 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 22:36:19 ] >>168 おれなら、 public class Test { public static void main(String[] args) { Deque<String> queue = new ReloadableDeque<String>() { @Override public void reload() { System.out.println("リロードっ"); this.add("1"); this.add("2"); this.add("3"); } }; String elm; while ((elm = queue.pollFirst())!=null) System.out.println(elm); } } public abstract class ReloadableDeque<E> extends ArrayDeque<E> implements Reloadable{ @Override public E pollFirst() { E elm; if ((elm = super.pollFirst()) == null) { reload(); elm = super.pollFirst(); } return elm; } } public interface Reloadable { void reload(); } だな。
182 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 22:39:38 ] >>180 readlineは一行分読み込みが終わるまで読み込めない。 ファイルが読み込み元なら改行文字にブチ当たるまで読み込めない。 コンソールが読み込み元なら改行してくれるまで読み込めない。 別の読み込みメソッドを使いましょう。
183 名前:182 mailto:sage [2010/05/07(金) 22:43:17 ] と思ったけど、無理だな
184 名前:178 mailto:sage [2010/05/07(金) 22:54:36 ] >>183 ありがとうです。 やっぱり無理なんですかねぇ 3日3晩APIの仕様書熟読とWeb中探しがしんどい・・・orz
185 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:02:09 ] >>184 一応言っておくと、 Java6使ってるならSystem.console()使おうぜ
186 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:08:03 ] >>178 こんなの使うとできる、のかも。 ttp://www.nilab.info/resource/bbslog/megabbs/1070189533.html
187 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:12:35 ] >>172 は? java.sql.Date と java.util.Date との違い、 これらを同時に使用するにはどうすればいいのかっていう質問ならわかるんだが。 それともimport java.io.*とimport java.io.PrintWriterとの違いやimport java.util.Collectionとimport java.util.*との違いのことをいっているのか?
188 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:13:28 ] >>184 どうしてもやりたかったらawt.keyevent あとはlinux、cygwinとか?
189 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:18:27 ] こんなのとか。 jline.sourceforge.net/
190 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:20:12 ] >>172 www.atmarkit.co.jp/fjava/rensai4/java5eclipse10/java5eclipse10_1.html
191 名前:178 mailto:sage [2010/05/07(金) 23:24:46 ] >>185 >>186 >>188-189 みんなありがとう。ちょっと調べてみて吟味して後の仕様拡張とあわせて 選択しようかなと思います。
192 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:28:31 ] >>181 そこまでやるか。 Template Methodに匿名クラスに抽象メソッドにインタフェース全部作ってまでやるか。 そこまでやりだすメリットってそんなにあるのか? ジェネリックスにワイルドカード指定すればもっと凄い堅牢性が高いものが できあがりそうだが、やりだすと苦労しそうだ。
193 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:35:38 ] >>185 C#のSystem.Console.WriteLine()かと思った。 そんなメソッドとjava.io.Consoleが追加されていたとは。 これでScannerクラスを使う必要もなくなるのか
194 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:37:03 ] Apache Commons CLIという選択肢もあり commons.apache.org/cli/
195 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:50:30 ] >>194 cliってgetoptみたいなものでは。
196 名前:デフォルトの名無しさん [2010/05/08(土) 00:14:24 ] 超初心者増えたなぁ
197 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 00:15:32 ] >>192 匿名クラスなのは、ReloadableDequeの中でreloadを実装すると融通効かなそうだから(部品として弱そうだから)、 匿名クラスでReloadable#reloadを実装した。それから、クラス名考えるのめんどくさかったからってのもある。 抽象クラスなのは、ReloadableDequeを使う人に、 確実にreloadをOverrideさせるため。 Reloadableをインタフェースにしたのは、なんか全然違うところでも使いそうじゃない?そんな理由。マーカ的につかえるかなぁ〜って。
198 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 00:21:25 ] 誤)Reloadableをインタフェースにしたのは、 正)Reloadableインタフェースをつくったのは、
199 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 01:26:02 ] >>193 正直いってConsoleは微妙 というかeclipseで使えない
200 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 01:52:39 ] うわあマジだ。ある意味正しい動きではあるが。クソだな。
201 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 01:59:33 ] >>196 お前いっつもそれしか言わないよな。
202 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 02:00:14 ] 初心者の域を抜け出せない初心者が初心者批判してるんですね
203 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 02:43:15 ] >>200 利点はioexceptionなげないのとpasswordだけ・・・ 自分はIDE上で登録済み br Java ステートメント try { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String line; while((line=br.readLine())!=null){ ${cursor} } } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); }
204 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 05:14:29 ] マルチスレッドについての質問です。 マルチコアCPUの場合、プロセスのコア割り当てはOSが管理しますよね。 Javaプロセスを複数立ち上げれば、OSが適切にプロセスごとに割り振るのは分かります。 でも、一つのJavaプロセスの中で複数スレッドを走らせた場合、 OSからは一つのJavaプロセスに見えてると思うのですが、 どうやって複数コアへ処理の割り当てを行っているのでしょうか。
205 名前:デフォルトの名無しさん [2010/05/08(土) 05:51:05 ] / 名前を読み込んで挨拶する(その2:nextLine()版) import java.util.Scanner; class HelloNextLine { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.print("お名前は:"); String s = stdIn.nextLine(); // 1行分の文字列を読み込む System.out.println("こんにちは" + s + "さん。"); // 表示 } } Exception in thread "main" java.lang.NoClassDefFoundError: HelloNextline (wrong name: HelloNextLine) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Could not find the main class: HelloNextline. Program will exit. 上記のようになったのですが、エラーが出た時はどの部分をみればいいのでしょうか?
206 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 06:02:11 ] HelloNextline (wrong name: HelloNextLine)
207 名前:デフォルトの名無しさん [2010/05/08(土) 07:37:04 ] compress形式で圧縮されたファイル(拡張子 .z のファイル)を解凍したいのですが、 どうすればいいのでしょうか?
208 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 07:42:39 ] >>204 vmのスレッディングapi実装はosネイティブのスレッディングapiを利用して行われる
209 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 08:45:03 ] バックグラウンドで画像のサムネールを作る処理を走らせたときに MIN_PRIORITY に 設定しても CPU 100% 行ってしまい、枚数が多いと CPU 熱のフェールセーフが働いて スリープ状態になってしまう。もうこれ以上って Timer か何かから細かい間隔で suspend resume してやるしかないかな。
210 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 08:48:11 ] >>207 標準 API には無いから Runtime#exec() 使ってシェル経由でやるしかない。 ネットで探せばどこかにライブラリが落ちているかもしれないが。
211 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 08:49:55 ] >>204 今時の Java VM 実装では OS は Java のスレッドまで見えているので スレッドを適切に CPU に割り当てられる。
212 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 09:21:50 ] >>209 100%になるのが悪いんじゃなくて冷却が足らないだけだ ヒートシンク掃除して扇風機でも当てとけ ハードウェア的な話だから続けるならよそでやってくれ
213 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 09:40:28 ] ThinkPad だからどうしようもない。役に立たないしょうもない煽りだけならよそでやってくれ。 で、200ms ごとに suspend, resume 繰り返すようにしたらとりあえず 80% ほどに落ち着いた。 TimerTask × ImageIO の閉じた処理どうしなのでデッドロックもないだろう。 少し調整の余地はあるがこれでやるか。
214 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 11:56:35 ] >>213 PC買い換えろ
215 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 12:39:47 ] >>213 java.sun.com/javase/ja/6/docs/ja/api/java/lang/management/ThreadMXBean.html ここら辺使ってスレッドのCPU時間の測定してsuspend~resumeの間隔を調整すれば、CPU使用率の調整とかも出来るかも?
216 名前:207 mailto:sage [2010/05/08(土) 13:10:46 ] >>210 標準にはないですか。ありがとうございます。 Windowsでも動かすかもしれないので、シェルはちょっと不味いです。 ライブラリ探すか、自作してみます。
217 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 13:12:52 ] デュアルコアならCPU1つに制限するとかなしなの?
218 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 13:59:26 ] >>211 >>208 ありがとうございます。よく分かりました。
219 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 14:36:44 ] >>199 なんでEclipseで使えないんだ と思ってやってみたら本当に例外を吐いて DOSプロンプトではちゃんと動く。 さすがにEclipseのコミュニティにバグ報告されている内容だろうか。
220 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:26:00 ] すんませんjavaの練習したいと思ってJDKインスコしたんですが。ユーザー変数にC:\Sun\SDK\bin入れてるけどコマンドプロントで認識しません。 いまいま始めたばっかでよく分からないんですが。 とにかくコマンドプロントで練習できるようにするにはどうすればいいんでしょうか?
221 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:28:40 ] PATH %PATH%;C:\Sun\SDK\bin
222 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:29:56 ] インストール先のフォルダそれで合ってるの? ユーザー変数?環境変数のこと?
223 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:31:00 ] C:\Program Files\Java\jdk1.*.*_**\bin
224 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:33:11 ] SDKファイルの中の何を指定すればいいのかがよくわかりません・・・
225 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:33:55 ] C:\Sun\SDK\bin フォルダの場所自体はこれであってるんですが
226 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:34:53 ] >ユーザー変数にC:\Sun\SDK\bin入れてるけど これを具体的に説明
227 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:36:27 ] 環境変数のユーザー編集 変数名 PATH 変数値 C:\Sun\SDK\bin にしてて、フォルダの位置も正しいはずなんですが コマンドはC:\>setでやってます
228 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:40:30 ] 環境変数の設定変更したあとPC再起動した?
229 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:44:07 ] 先程しましたが結果は同じでした
230 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:01:36 ] >>220 OSとJDKインストールした場所は?
231 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:05:09 ] >>230 OSはCです JDKはC:\Sun\SDKです
232 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:08:07 ] 環境変数の設定をsetコマンドでやってるならPC再起動したらダメじゃん
233 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:08:58 ] 設定はパフォーマンスとメンテナンスのシステムからやってます
234 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:08:59 ] >>220 は何をしたかったの? javacが実行されないってこと?
235 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:09:40 ] コマンドプロントでjavaが認識されないってことです 'java' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 ってメッセージがでるんです
236 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:12:51 ] >>227 環境変数の設定画面見て、一度、スペルミスが無いかチェック コロンとセミコロンの打ち間違いや、ドットとカンマの打ち間違いとかの可能性はあるかも 問題なかったらコマンドプロンプトでpath[エンター]打つと 現在のPATHが表示されるからPATHにC:\Sun\SDK\binが含まれていることを確認 それと、C:\Sun\SDK\binのフォルダ内に、javac.exe等のファイルが存在してるかを確認 もしかするとインストール失敗してるのかも
237 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:15:09 ] cmdでpathと打つとC:\Sun\SDK\binは含まれてます binのフォルダの中にjavac.exeらしきファイルが見当たらないんですが
238 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:18:14 ] うちはJDKインストールしたら>>223 のように Program Files\Jana\ のところにインストールされたけど C:\Sun\SDK\bin って自分でフォルダ指定してインストールしたの?
239 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:18:54 ] 実はJDKをインスコしたつもりでJREをインスコしたとか… んなわけないかw
240 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:18:58 ] >>238 自分はそこにインストールされました
241 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:22:03 ] もう一回違うJDKインスコします
242 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:23:47 ] jreがインスコされちまった。これはJKDとは違うの?
243 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:29:39 ] JKD? Joshi Kousei Daisuki 女子 高生 大好き ?
244 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:33:59 ] JDKもインスコされてました。 新しいファイルは C:\Program Files\Java\jdk16.0_20\binに指定しましたが結果は同じです 他に設定するべき所があるんでしょうか・・・・?
245 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:41:00 ] コマンドプロンプトでpathと入力 C:\Program Files\Java\jdk1.6.0_20\bin がちゃんと指定されているか確認 (>>244 C:\Program Files\Java\jdk16.0_20\bin ← 16.0は間違いじゃね?) C:\Program Files\Java\jdk1.6.0_20\binフォルダに java.exeやjavac.exeが存在していることを確認 もし、java.exeやjavac.exeが存在していなかったら 可能性としては、インストール時にセキュリティソフトがjava.exeやjavac.exeをウィルスと誤検知して、削除か移動された可能性もある
246 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:56:47 ] >>231 >OSはCです WindowsC ?
247 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 17:00:38 ] >>1 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 ttp://www.wikiroom.com/java/
248 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 17:02:05 ] >>246 Cドライブってことでしょ
249 名前:デフォルトの名無しさん [2010/05/08(土) 17:44:56 ] どうした
250 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 18:38:07 ] 他クラスのpublicな定数を利用するときって定数名だけじゃダメなんですか?
251 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 18:44:44 ] public staticな定数ならstatic importという物があってだな。
252 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 18:50:09 ] 全部自前のクラスなら 定数だけのインターフェース作って全部のクラスにインプリメントしてる
253 名前:250 mailto:sage [2010/05/08(土) 18:55:46 ] 即レスどうもです >>251 無事出来ました、ありがとうございます >>252 今度からはそういう風に設計してみます、ありがとうございます
254 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 19:11:05 ] >>210 Apache Commons Compressにあるか? と思って探してみたがそれっぽいのはなかった。 GZIPのメソッドでそのまま使えそうな気がするがそうでもないか。
255 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 19:12:18 ] >>252 いまどきそんな設計するなよ…
256 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 19:14:39 ] >>252 おい、定数はenum使えよ っていうかinterfaceつかうと勝手に実装できるし それがint型だと変な使い方できるし Effective Java第2版読めよ
257 名前:デフォルトの名無しさん [2010/05/08(土) 20:04:29 ] >>253 >>255-256
258 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 20:32:16 ] Effective Java第2版を読んだやつっているのかな 職場、関係会社、派遣、下請けを今まで見てきたけど、一人だけ読んでいそうな雰囲気だった。 (そもそもenumって何?って返ってくるぐらいだったからなぁ)
259 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 20:35:50 ] 実際その読んだ人の書いたコードって綺麗だった?
260 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 20:37:07 ] えっ、そういう設計はダメなんですか? 初心者なのでよくわからないです…
261 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 21:57:54 ] だからEffecitive Javaを読めと Java5以降のバージョン(enum)が使えないなら第一版(と、結城浩の『Java言語で学ぶデザインパターン入門』)でもいいから 定数にinterfaceを使うなんぞ論外。 定数はコンストラクタの作成を禁止したfinalクラスかSingletonパターンを使うべき Java5以前の環境では最低でもこの程度のことはすべき。 public final Constant { public static final int CONSTANT_A = 1; public static final int CONSTANT_A = 2; private Constant(){} } これでもまだ不十分だが。 Java5以降はこれで十分 public enum Constant { CONSTANT_A(1). CONSTANT_B(2); }
262 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 02:14:15 ] >137あたりのsuper,this関連(?)の質問なんだけど 内部クラスにもthisとかつけたほうがいいの? ClassAという内部クラスがあったとき this.ClassA a = new this.ClassA(); と記述したほうがいいのかな?
263 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 02:59:58 ] >>261 定数クラスはclass装飾子が抜けてたりCONSTANT_Aが二つあったり、 enumの方は,が.になってたり、コンストラクタやメンバ変数が必要だったりしませんか?
264 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 03:15:30 ] また Effective Java かぶれが暴れてんのか。
265 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 03:32:53 ] カオティックな板だな
266 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 03:50:49 ] 初心者じゃなくなったって実感した時って どんな事を理解・実装できたあたりからですか? 教えてる新人の場合なら〜ってケースでも 教えてもらえると有難いです
267 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 04:22:36 ] 30年もJavaばかりやってると新人って気持ちじゃなくなるな
268 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 04:24:09 ] 30年なんてまだまだ新人だろ
269 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 04:27:58 ] 15年前、これは世界を震撼させる!と思って始めて まったくそんなことは無かった
270 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 04:28:13 ] >>266 interface の使い方を理解したときも、その1つと言えるんじゃないかな。 interface には実装のないメソッド宣言だけがあって、 それを implements したクラスはメソッドの実装を書かなくてはならない、 ということ事態は初心者でも理解できるんだけど、 実際どういうふうに interface を使えばいいかが、初心者には難しい。
271 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 04:30:28 ] 厳密に定義するなら、始めてから一定の期間が経過していれば初心者ではなくなるな Javaの場合どの程度の期間が妥当かは知らんが、自動車なら1年だな
272 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 04:32:59 ] 入門書に書いてあること 一通り、入門書見ずに出来るようになれば 初心者を脱したと。初級者だ 入門書レベルのことじゃ仕事にはならないし 趣味でやってる人間なら十分かもしれないがw
273 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 04:34:47 ] まぁそんなところだな。
274 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 04:43:35 ] 未だに初心者のころと同じようにわからないことばかり。
275 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 04:46:12 ] たいていの新人は、Java初心者ってだけじゃなくプログラミング初心者も兼ねてるから >>261 が紹介してるような本をそういう初心者が最初から読んだってあまり効果は無いと思う 入門書クリアレベルじゃたいしたソース書いたことないだろうし せめて中級者くらいの人が参考に読めばいいと思うよ
276 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 05:59:01 ] 本は勉強開始してから、1、2年くらいの新人が読むものかと。 それを過ぎたら面白そうなOSSのソースでも読んで、知的欲求を満たすもんだと思う。
277 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 12:57:27 ] すみません、実行時に unable to load native library: can't find dependent libraries と でてしまいます。どうすれば実行できるように なるのでしょうか?
278 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 13:00:02 ] >>258 読んだ 読書会みたいなのもあるみたいね >>207 *.Z知らないから的外れかもしれないけど ライブラリ commons.apache.org/compress/ windows用exe www.gzip.org/
279 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 13:02:29 ] >>277 Classpathとjavaのバージョン
280 名前:277 mailto:sage [2010/05/09(日) 13:23:50 ] >>279 レスありがとうございます。 バージョンはjdk1.6.0_20で、 classpathはカレントを指定してます。
281 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 13:33:25 ] >>280 カレントにjarファイルをコピー
282 名前:277 mailto:sage [2010/05/09(日) 13:56:06 ] >>281 カレントに置いても実行できませんでした。
283 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 14:09:53 ] >>282 エラーメッセージは?
284 名前:277 mailto:sage [2010/05/09(日) 14:16:06 ] >>283 同じエラーです。 jdkインストールしてから一度も実行できてないです。 別のパソコンにインストールしたのは普通に使えているのに、 なぜかできないです。
285 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 14:45:02 ] >>284 カレントにコピーしたファイル名は?
286 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 15:53:03 ] 例外処理で整数が入力されるまで、何度も再入力を求める場合はどういう風に書けばいいのでしょうか? まず整数かどうかを判別する式が思い浮かびません。
287 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 15:54:46 ] 小数点以下は丸め込むと注意しておいてintにキャストすればいいじゃん
288 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 16:07:16 ] >>287 おまい、Java 知ってるか?
289 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 16:49:51 ] 288はなんか脊椎反射で煽っている気がするなぁ。 普通に読んで Integer.decode(入力文字列) とかで変換しちまえという話じゃないのか。
290 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 16:53:07 ] と、小数入っていると変換できなかったか。
291 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 16:59:12 ] んーと、Double.valueOf(入力文字列).intValue() とやればいい。
292 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 17:02:30 ] 整数じゃなかったらという判定がいいなら Integer.decode(入力文字列) で例外catch。
293 名前:デフォルトの名無しさん [2010/05/09(日) 17:35:03 ] ようじょクラスを継承するようちえんじクラスがあって、 ようじょ ょぅι゛ょ = new ようちえんじ(); という感じにスーパークラスの型でサブクラスを インスタンス化する場合がありますが、 何の為にわざわざそんな事をするのでしょうか。 ようちえんじ ょぅちぇんじ = new ようちえんじ(); と何が違うのでしょうか。 教えて下さい。
294 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 17:41:38 ] ようじょクラスに対する操作を書いておけば ようじょクラスだろうがようちえんじクラスだろうが適用できる 継承関係がなければ ようじょクラス用とようちえんじクラス用に それぞれ別々に同じような操作を書かないといけなくなる
295 名前:デフォルトの名無しさん [2010/05/09(日) 18:01:12 ] >>294 有難うございます。 その、継承関係でオーバーライドが機能するのは分かるのですが、 ようちえんじ ょぅちぇんじ = new ようちえんじ(); では 継承関係は反故になってしまうのでしょうか。
296 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 18:15:11 ] 別に継承関係があって、 共通処理をようじょクラスで記述できるのなら、 ようちえんじクラスで持っててもいいよ
297 名前:デフォルトの名無しさん [2010/05/09(日) 18:55:48 ] >>296 うーん難しいですね。 よく本とかにのっている List list = new ArrayList(); は ArrayList arraylist = new ArrayList(); とどうちがうのか分かりかねているのです。
298 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 19:13:48 ] どっちでもいいけど、ある日ArrayListの代わりに パフォーマンス上の理由でLinkedListを使わざるをえなくなった場合、 ArrayList arraylist のコードの方は直さなきゃならないね。 同様に、以下のようなメソッドを別に用意していたとしよう、 void method(ArrayList arraylist){ arraylist.add("unko"); } 上記メソッドはaddメソッドにしか用事がないのに ArrayListで型宣言してるばっかりにLinkedListが渡せない。 これは大いに問題。 上記のような問題が起こらないと言える範囲、 もしくはArrayList特有のメソッドが重要な場合とかは ArrayListをそのまんま変数宣言で使っていいよ。
299 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 19:14:47 ] >>263 素で間違い 片方はCONSTSANT_Bに でもあれでもまだ問題あり とにかくEffective Javaでも読む .は,に戻す
300 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 19:17:26 ] List list = new ArrayList(); やっぱり ArrayList じゃなくて LinkedList にしようとか思った時に List list = new LinkedList(); にすれば動く。 ArrayList list = new ArrayList(); だと LinkedList list = new LinkedList(); に修正したとしても、例えば list.ensureCapacity(100); とかいう文があったらエラーになる。 まあ普通はこういうことは起こらないけど、あくまで例として。
301 名前:デフォルトの名無しさん [2010/05/09(日) 19:34:36 ] >>298 >>300 分かりました! 有難うございます!! 余談ながら、実は『=』の左側で型を宣言するのはメモリに 領域を確保する為だという考え方がぬぐえず、だから大抵の 場合スーパークラスよりサブクラスの方がメソッドとかも 増えているので、スーパークラスで確保した領域にサブク ラスを代入すると、オーバーライドや独自メソッドなど 確保領域からはみ出る部分が切り落とされると思えて仕方 なかったのです。
302 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 19:39:19 ] >>262 thisつけるかどうかはどこのスコープかによる。 迷ってるならCheckStyleを使うべき。CheckStyleがthisの付け忘れを指導してくれる。 もしEclipseを使って開発してるならEclipseにもCheckStyleプラグインがあるからそれを使うといい。 > 内部クラスにもthisとかつけたほうがいいの? > ClassAという内部クラスがあったとき > this.ClassA a = new this.ClassA(); そもそもnewのあとにthis.は不要。 型の頭にthis.つけたらコンパイルエラー。 インスタンス生成のことをよくわかってないようなので 基礎から勉強し直した方がいいと思う。実際に自分でそのソースコードを書いて、 コンパイルして自分の目で確かめてみましょう。 内部クラス等の扱いについての詳しい解説は『Java言語仕様』を読むかそこいらのJava入門サイトでも読んだほうが早い。 >>263 CONSTANT_A(1)という書式は無理にする必要ない。 CONSTANT_Aでもいい。toString()が返す値が1になるかわりに"CONSTANT_A"にかわるだけ。 そこいらのサイトを検索して出るJavaのenumの仕様とサンプルを見るべし。
303 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 19:40:58 ] >>267 Javaはそんな老けてない。それってC/C++の間違い。Javaは登場してからまだ15年しか経ってないから。 >>269 10年前にJava始めたときは興奮した。それまではC/C++大学で弄っててついでに大学の鯖でHTMLとかCGIとか弄ってたから。 あの頃の多くのJava本がまえがきでJavaの魅力を熱烈にアピールしてC++とここが違うということを強調しまくっていた。 あの頃にあんなまえがき読んだら興奮する。当時はC/C++が最強と言われていたんだから、身震いを覚えた。「C/C++に慣れきっていたら なんだこの変な言語」と思っていたがまだC++もほとんど十分に把握していなかったこととC言語の煩雑さに不満を覚えていたから あのときのインパクトは衝撃的だった。 >>276 しかし、Java以外の言語にある程度経験がある場合、とくにC/C++経験豊富でJava初心者の場合はEffective Javaはおすすめできる。 enumのところに書いてあるコードはそれほど難しくないから読む価値はある。というかenumだけなら買わなくてもここでほとんどそっくりな解説を読めたりする。 惑星から物体の重量を計算するenum型のサンプルとかもろにEffective Java第2版と同じことがかいてある。 java.sun.com/j2se/1.5.0/ja/docs/ja/guide/language/enums.html あとインタフェースを定数にするのがなぜいけないかは、ここを読むのがおすすめ。 www.ibm.com/developerworks/jp/java/library/j-enums/
304 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 19:52:54 ] >>286-292 文字列の中にドットが含まれていれば小数をみなす というんなら、そんなめんどうくさいことやらずにこうすればいい while(true){ //コンソールから小数を入力するコード if(!input.contains(".")) break; } } 例外のことは考えてない
305 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 20:55:12 ] "one"とかだったらどうするよ?
306 名前:286 mailto:sage [2010/05/09(日) 21:48:41 ] みなさん回答ありがとうございます。 >>305 さんがおっしゃってる通りなのですが、文字が入力された場合などの判別も条件に入れての質問です。 条件があいまいな質問になってしまい申し訳ございません。
307 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 22:04:39 ] >>303 >>267 はジョーダンだろw ジョーダンにマジレスすんなよw
308 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 22:42:27 ] まあ問題はlistでやると使えないメソッドがかなりあると void addFirst(E e) void addLast(E e) void clear() E getFirst() E getLast() boolean offer(E e) boolean offerFirst(E e) boolean offerLast(E e) E peek() E peekFirst() E peekLast() E poll() E pollFirst() E pollLast() E pop() void push(E e) E removeFirst() boolean removeFirstOccurrence(Object o) E removeLast() boolean removeLastOccurrence(Object o)
309 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 22:54:09 ] >>308 それらはListではなくDequeだな
310 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 23:14:49 ] >>305 java.util.regexか Apache Jakarta ProjectのApache OROを使って正規表現で文字列を除外する。
311 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 23:15:44 ] >>308 何の話題? 元の話の流れがわからないのでリンク元を
312 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 23:53:18 ] >>311 linkedlistで使えてlistで使えないメソッド
313 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 00:21:48 ] なるほど。 そやな。 あれはDequeのメソッドも混じってるからな。
314 名前:262 mailto:sage [2010/05/10(月) 00:51:56 ] >>302 ありがとうございました
315 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 01:18:31 ] 内部クラスの内部クラスの内部クラスの内部クラスをオーバーライド
316 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 02:39:19 ] 勢いで作った www51.tok2.com/home/rg550/cgi-bin/hosoku/img0051.java 改良点があれば・・・・
317 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 02:44:17 ] ご苦労さんとしか言いようがないが…
318 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 03:38:57 ] >>316 ('a') ('A') ('3') ('-') 顔文字に見えた
319 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 12:44:29 ] >>318 static importして sysout(MINIS10 +" massage "+ MINIS10) って便利かなと思うけどどう考えてもGRAVE_ACCENT100とか使わないよね・・・
320 名前:デフォルトの名無しさん [2010/05/10(月) 18:00:50 ] どうでもいいことかもしれんけど 式書くとき n=m+12; ←のように詰めて書く? n = m + 12; ←のようにスペース空けて書く? 引数とかでも hoge(n,1,true,a,"abc"); 詰めて書く? hoge( n, 1, true, a, "abc"); 空けて書く?
321 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 18:10:28 ] >>320 Eclipse で Ctrl+Shift+F
322 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 18:10:37 ] >>256 定数にenum使うってswitch文とかで分岐に使うような複数ある定数の場合でしょ? 他の定数と関連付ける必要ない定数はenum使っちゃだめじゃないの?
323 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 18:23:14 ] エフェ厨に構うなよ。2ch 用語覚えた中学生みたいなもんだから。
324 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 18:37:18 ] 俺が昔読んだ入門書には定数だけのインターフェース作る様なこと書いてあった気がした
325 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 18:48:10 ] 昔の入門書といえば、そんなもんかも
326 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 19:10:12 ] 文字列を10文字幅にして、足りない部分は先頭に'0'を付けるにはどうすればいいですか? 例えば "deadbeef"を入力すると"00deadbeef"と返還する処理を書きたいです。 String.format("%010s", "deadbeef"); とやってもダメでした
327 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 20:09:07 ] >>322 あとは多少気持ち悪いけど、 Java上でSingletonやりたい場合かな。
328 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 20:18:59 ] >>322 駄目っていう理由はないと思ってるんだけど。 何でそう思ってるのか知りたい。
329 名前:デフォルトの名無しさん [2010/05/10(月) 20:24:25 ] public class Rect{ package a; public class AA{ int ai; protected int aj; } package b; import a.AA; class BB extends a.AA{ BB(){ AA aa = new AA(); aa.ai = 7;(1) aa.aj = 9;(2) ai = 7;(3) aj = 9;(4) } } (1)-(4)のなかで正しいのはどれですか?
330 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 21:51:29 ] >>329 目の前のPCで動かせばいいだろうが。 何でも聞けると思ってんじゃねえぞ。