1 名前:デフォルトの名無しさん [2007/07/27(金) 08:46:32 ] プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作板をご利用ください。pc10.2ch.net/hp/ 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 www.wikiroom.com/java/ これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、 wikiからのリンクをおたどりください。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド 【初心者】Java質問・相談スレッド103【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1182896607/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。 質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */ また、当スレで質問をするかたは、回答をもらえたときに、 wikiの更新をして頂ければ、忝なく存じます。 次スレは>>980 あたりで。
355 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 08:09:04 ] char * const s といった使い方はまずしないということだろ。 javaでfinalにした場合はこの意味だから。
356 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 09:32:08 ] >>352 引数に代入行うと混乱するぐらい長いメソッド自体の方をリファクタリング対象にした方が良いような。 短いメソッドなら引数に代入されても大して混乱しないし。
357 名前:デフォルトの名無しさん [2007/08/07(火) 09:52:57 ] >>356 長いメソッド云々の前に引数に代入すんな、って話だと思う どっちも糞コードなのは間違いないが、長いメソッドは可読性が低いだけ、引数に再代入するってのはバグと言ってもいいだろう
358 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 10:04:10 ] Javaにもいい加減constとfriendクラスが欲しいです
359 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 10:16:01 ] >>357 なんで引数に代入しただけでバグになるんだ…… 変更前の引数の値を期待してるところが残ってるのに、引数変更しちゃうと バグの元になるってんならわからなくもないけど、短いメソッドなら修正容易だし。
360 名前:デフォルトの名無しさん [2007/08/07(火) 10:17:14 ] www.vipper.net/vip299169.jpg この中で削除して良い物は在りますか?
361 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 10:25:39 ] >>360 JRE が一つでもあればいいのなら、赤線の枠内は全部削除して良い。 J2RE5 が一つはあった方が良いなら、赤線の枠内は J2SE Runtime Environment 5.0 update11 残して全部削除。
362 名前:デフォルトの名無しさん [2007/08/07(火) 10:37:28 ] >>359 限りなくバグに近いだろう、例外の握りつぶしとかと同じレベル 極端な話、引数は自然にfinalでもいいだろうと思う
363 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 10:39:32 ] ついでに、6 の Update 2 があるんだから、 6 の Update 1 も削除していいんじゃない?
364 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 10:40:02 ] 理由も無しに「バグに近い」とか言われても。夏だなぁ、としか。
365 名前:デフォルトの名無しさん [2007/08/07(火) 10:50:36 ] 理由も解らないなんて夏だな
366 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 10:50:39 ] >>362 にとってはバグなんだろ そっとしといてやれ
367 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 10:59:07 ] どっちでもいいんだけど、そもそもバグの定義ってなんだ?
368 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 12:25:51 ] 質問よろしいでしょうか。 ある文字列をキーに検索を行うプログラムを作っています。 その文字列のキーをワイルドカード(一文字マッチは"?"で行います)でも使用できるようにしたいと思い、文字列を末尾から"?"に置換するメソッドを作りました。 String value = "AAAAA"; int len = value.length(); for (int i = 0; i < len; i++) { String s = exec(value, len, i); // 検索処理 } public String exec(String _s, int _len, int _i) throws Exception { StringBuffer sb = null; try { sb = new StringBuffer(_s.substring(0, _len - _i)); while (sb.length() < _len) { sb.append("?"); } return sb.toString(); } catch(Exception e) { throw e; } }
369 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 12:26:05 ] 自分の思った通りにならなくて駄々をこねる状態にさせるもの
370 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 12:27:55 ] これでAAAAA, AAAA?, AAA??, AA???, A????という文字列から検索を行えますが、 このメソッドを以下のような文字列を返すメソッドにしたいと思います。 パラメータが"ABC"なら、(2 ** 文字列長)回のループで以下の文字列を順番に返す。 1回目:ABC 2回目:AB? 3回目:A?C 4回目:A?? 5回目:?BC 6回目:?B? 7回目:??C 8回目:??? どなたかご教示頂けないでしょうか。
371 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 12:35:51 ] >>370 32文字以下に限るけど、 2^n 回ループで、iが媒介変数だとして、 「iのmビット目が立っていたらm文字目を?に置き換える」という処理を n回やればいいんでは。
372 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 13:12:42 ] buildSearchKey とかが良いと思うんだ
373 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 13:23:56 ] >>370 import java.math.BigInteger; import java.util.*; public class A implements Iterable<String> { private String s; public A(String s) { this.s = s; } public Iterator<String> iterator() { return new B(); } private class B implements Iterator<String> { private BigInteger i = BigInteger.ZERO; private final BigInteger m = BigInteger.valueOf(2).pow(s.length()); private final int len = s.length(); public boolean hasNext() { return i.compareTo(m) < 0; } public String next() { if (i.compareTo(m) >= 0) throw new NoSuchElementException(); StringBuilder sb = new StringBuilder(s); for (int j = 0; j < len; j++) if (i.testBit(j)) sb.setCharAt(len - j - 1, '?'); i = i.add(BigInteger.ONE); return sb.toString(); } public void remove() { throw new UnsupportedOperationException(); } } }
374 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 13:24:37 ] 使い方はこんな感じで import java.util.*; public class C { public static void main(String[] args) { Iterator<String> iterator = new A("ABCD").iterator(); while (iterator.hasNext()) { String s = iterator.next(); System.out.println(s);//本当はsを使って検索処理 } } }
375 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 13:28:05 ] 簡単に書くならこうでもいい for (String s : new A("ABCD")) System.out.println(s);
376 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 14:18:24 ] 引数への再代入は否定せんが仮引数名から (変数の役割が)意味が変わる再代入は反対だな。アレは書いた奴にしか読めん。 friend欲しいのは設計が悪い。 constはjavaでは無意味。
377 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 14:34:18 ] constっぽいものはJSR-308のサンプルにある @Readonlyが追加されたら近い事が出来るようになるかも?
378 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 14:44:21 ] >@Readonlyが追加されたら近い事が出来るようになるかも? generics組み合わせたりすると型名がやたら長くなるのはいただけないけど、 コーディングミスを考えるとやむを得ないか……
379 名前:368, 370 mailto:sage [2007/08/07(火) 18:02:05 ] >ご回答下さった各位様 ありがとうございます。 少々違った形での実装となりそうですが、無事に進められそうです。 // 検索キーの桁数を考慮しないと酷い性能に……orz
380 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 18:09:40 ] なんかよくわからんが、元の検索キーから正規表現を構築してそれで検索した方が簡単じゃない?
381 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 19:42:29 ] 集計やイテレータを担う変数など、変化することが前提であるもの以外は、 引数を含むローカル変数は基本的に再代入禁止にした方がよいし、そうすることが可能。 外科手術に例えると、高度な手術は可能な限り無菌状態を保つことで初めて可能になる と、どこかのお偉いさんが言ってたヨ また、このリファクタリングは、他のリファクタリングを行う際の前処理にもなる場合もある。 例えば、ローカル変数の内容をメソッドから取り出すようにリファクタリングする際、 内容がメソッドの場所によって変わってたら困る。
382 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 20:34:27 ] 明示的にコンストラクターを起動している間、インスタンス・フィールド name は参照できません このエラーはどういうことでしょうか? 調べてもわからなかったです。すみません。
383 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 20:49:06 ] スーパークラスのコンストラクタが終わるまでのあいだ this は使えない。 例えば class A { A(int x){} } class B extends A { int x = 10; B() { super( this.x ); // ← これ } }
384 名前:デフォルトの名無しさん [2007/08/07(火) 21:34:25 ] 「世界でいちばん簡単」なe本なのに… 50ページ目のコンパイルで躓いてます。 javacがなんかおかしいみたい。何故だろう?
385 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 21:35:20 ] そんな本もってないからわからない。 くわしく
386 名前:デフォルトの名無しさん [2007/08/07(火) 21:40:22 ] 最初の「プログラミングしてみる」 という項目で //MyJava class MyJava{ public static void main(String args[]) { System.out.println("My Java Program"); } } と、テキストで打ちました。 で、コンパイルするんですが
387 名前:デフォルトの名無しさん [2007/08/07(火) 21:45:49 ] コマンドプロンプトで 「cd c:\MyJava」 「dir」 「javac MyJava.java」 と打つと 「'javac'は、内部コマンドまたは外部コマンド、操作可能な プログラムまたはバッチファイルとして認識されていません」 と出てしまうのです。
388 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 21:52:13 ] JDK をインストールしているかどうか、 インストールしているならそのインストール先を確認して、 そのインストール先の bin フォルダを環境変数 PATH に追加する。 ・・・その手の設定方法って本に載ってない?
389 名前:デフォルトの名無しさん [2007/08/07(火) 21:54:41 ] >>388 様、ありがとうございます。 最初に、JDKのインストールと、PATHの設定が載ってました。 それは本の通りに進んでいたのですが…
390 名前:デフォルトの名無しさん [2007/08/07(火) 21:56:13 ] 質問させて下さい。 int型のデータ「0xC01A」からString型のデータ"\uC01A"に 変換したいのですが、どのようなやり方がありますでしょうか?
391 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 21:59:19 ] >>389 コマンドプロンプトで PATH って打って、 JDK の bin フォルダがちゃんと追加されているかどうか確認する。 エクスプローラーでマイコンピュータから C: → Program Files → ... ってたどっていって、 本当にそのフォルダが存在していて中に javac があるかどうか確認する。
392 名前:デフォルトの名無しさん [2007/08/07(火) 22:00:02 ] >>391 様、ありがとうございます。 早速やってみます。
393 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:03:02 ] >>390 int x = 0xc01a; String s = "" + (char)x; ""+ ってのがなんかイヤだったら、面倒いけど String s = new String(new char[]{ (char)x });
394 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:04:27 ] >>389 ttp://www.shuwasystem.co.jp/books/7980/0533-9/0533-9.html 正誤表出ているが、パスの設定を1.4のデフォルトでやったんだろう
395 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:21:49 ] >>390 String str = Integer.toString(0xC01A);
396 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:24:52 ] すまん、間違えた String str = Character.toString((char)0xC01A); だな
397 名前:デフォルトの名無しさん [2007/08/07(火) 22:27:56 ] >>391 様 C:\MyJava>path PATH=C:WINDOWS\system32;C:WINDOWS;C:\WINDOWS\system32\Wbem;C: \Program Files\pcbNavi\bin;C:\Program Files\Fujitsu\sa\dll; c:\j2sdk_1.4.1_01\bin と表示されました。 C: → Program Files →Java→の中にはjavacは無く、 C: → j2sdk1.4.1 01 →bin→javacとありました。 何か間違ったのでしょうか? >>394 様、ありがとうございます。 1.4.1 01を選んでダウンロードしたのですが…自信ないです。
398 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:31:06 ] アンダーバーの有無をよく確認してみて。 PATH の中の j2sdk_1.4.1_01 実は j2sdk1.4.1_01 が正しいんじゃない?
399 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:32:41 ] >>397 c:\j2sdk_1.4.1_01\bin\javac -version ってコマンドプロンプトで打ち込んでみて
400 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:35:39 ] どうでもいいが、pathに設定してもろくな事ないと思うが・・・
401 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:39:51 ] >>390 new String(new int[] { 0xC01A }, 0, 1)
402 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:40:39 ] >>390 String s = "\\u"+ String.format("%x", 0xC01A).toUpperCase();
403 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:43:43 ] それなんか違うような・・・ ところで toUpperCase するなら %X でいいんじゃない?
404 名前:デフォルトの名無しさん [2007/08/07(火) 22:52:02 ] >>398 様、ありがとうございます。 j2sdk1.4.1_01 では通りませんでした。 >>399 様、やってみます。
405 名前:デフォルトの名無しさん [2007/08/07(火) 22:53:54 ] >>399 様、「指定されたパスが見つかりません」となりました。
406 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:57:53 ] >>397 には javac のあるフォルダ名が j2sdk1.4.1 01 って書いてあるけど、1.4.1 と 01 の間は空白? そうだったら PATH もそのように 一字一句同じ名前を入れてください
407 名前:デフォルトの名無しさん [2007/08/07(火) 23:01:41 ] >>406 様、すみません。_ありました。ここでの打ち間違いでした。
408 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:07:13 ] じゃあ、 >>397 の PATH には ...fujitsu\sa\dll; と c:\j2sdk... の間に改行が入ってるように見えるけど、 本当に改行やら無駄な空白が入っているのなら、取り除いてみてください。
409 名前:デフォルトの名無しさん [2007/08/07(火) 23:18:09 ] >>408 様、ありがとうございます。 もう一度やってみます。
410 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:25:49 ] >>405 エスパーしてみる DドライブにJDK入っているとかじゃない? エクスプローラーからjavac.exeを選んで、コマンドプロンプトにドラック&ドロップしてみてくれ そこで表示されたパスをここにココにコピる
411 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:27:34 ] >>397 c:\j2sdk_1.4.1_01\bin 志村、sdkの後ろに_入ってるぞ キーボードで入力するんじゃなくて、パスはコピー&ペースト汁
412 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:53:39 ] >>409 エクスプローラでアドレスバーを表示するようにしてないの?
413 名前:デフォルトの名無しさん [2007/08/08(水) 01:05:36 ] 皆様、ありがとうございました。 アンインストールしてもう一回始めからやり直してました。 そのおかげか、ソースコードを書き直したお陰か(本の文書の方では 『//MyJava』となってましたが、実際の画面を写した写真では『//MyJava.java』と) PATHの方も、本を見るのではなく、>>411 様の通りにコピペをしました。 何とか前進できました。
414 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 01:09:45 ] まずはWindowsの使い方から始めるべきだな
415 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 01:16:57 ] >>413 そんな違いよく見つけたね でもコメントの違いはプログラムの動作に影響しない
416 名前:デフォルトの名無しさん [2007/08/08(水) 01:17:41 ] >>414 様、ありがとうございます。 頑張ります。 PC自体初心者なのに、訓練学校に入ってしまい今、毎日が勉強です。 今年中にブロンズとSJC-Aを取得するように言われていて… 努力しかないですね。
417 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 01:17:42 ] 最近はコマンドプロンプトもbatもいらないからな
418 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 01:54:40 ] >>384 かわいそうだが、その本は地雷だから。 きみはもうしばらくしたら 本の通りにやったのですがエラーが出てしまいます。 精度が落ちている可能性 検出値: double 期待値: float a = 2.0; エラー 1個 という質問をするであろう。 pc11.2ch.net/test/read.cgi/tech/1180419689/354-364
419 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 07:12:47 ] 独習が良いと聞き買ったが分厚いので持ち運びに不便であまり読まないwwwwwww