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/
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でも動かすかもしれないので、シェルはちょっと不味いです。 ライブラリ探すか、自作してみます。