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 あたりで。
201 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:02:07 ] >new String(CONST_STR)みたいにしとくことが必要 ここがわからない。 >正しいテストデータ ここもわからない。
202 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:04:55 ] >>201 > ここがわからない。 >> 例えば定数をコンソールやテキストから入力するなら、s1 == s2 で true になることは無い。 言語仕様がわからないなら介入しなくていいから。
203 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:05:37 ] equalsつかえよ
204 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:08:27 ] 迷惑だからキミは絡まないで。
205 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:08:54 ] とりあえず>>197 はアホ
206 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:10:20 ] String.equalsの仕様を知らない馬鹿がなんか邪魔してくる・・・
207 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:43:25 ] オブジェクトが一致する場合と一致しない場合で、equals が true になる場合の計算コストが違うことをいってるわけ? トーシロの俺には何がなんだか(´・ω・`)
208 名前:197 mailto:sage [2007/08/04(土) 20:46:30 ] 事故解決しますた
209 名前:208 mailto:sage [2007/08/04(土) 20:48:48 ] 誤爆です><
210 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:57:44 ] /ニYニヽ /( ゚ )( ゚ )ヽ /::::⌒`´⌒::::\ でっていうwwwwwwww | ,-)___(-、| | l |-┬-| l | \ `ー'´ /
211 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 21:55:52 ] 存在個数なら、ListなめてMapにカウント突っ込んでいけばいいんじゃないの?
212 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 22:36:53 ] パフォーマンスの問題は、実際にパフォーマンス上の問題が起きてボトルネックが発見できた場合に対処すればいい。 机上の空論でのパフォーマンス対処ほど無駄なものはない
213 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 22:40:59 ] /i /{/'⌒'} }}Y/ / ,r-、ヽ, / ノ、|、ヾ_,,ノ ノ ノ{ ヾ {^')) }フ/ / _/ \ヽ、 彡'`、、 'ー' ノ //",,゙ """ / ヽ 理 議 そ ヽ-、ミ‐-、、 、,r=‐'¬ー=、、,-‐'_ ヽ、 /ノ / 解 論 の ミ/ ~  ̄ノ /\ /彡 "" |/ で し な / ,' u ∪ ! ヽ | i、゙ー''"彡 /| き て め 、、∪ / ノ / _,,,...-‐‐ニ=,ノ,,/ ヽ、,,_ \ ,イ / | な い 方 ニ、=!, l_. レr=-ニ二、,,,.-'" ー、==-ヽ'"/ / ヽ い る を 、(・,)>ノ⌒ ∠,(・,)_く ゙` ヽ゚ノ`ー=、_ /// ∠ の こ  ̄/""゙ ヽ ̄ ̄ \ヽ  ̄ ̄ // ノ か と u 〈 、 u (ヽ //  ̄ノ ? も ヽ -' lj >、 // /  ̄ヽ、 /ヽー‐ 、 /'"´ 'i // / ∨ヽ/ ^゙"⌒ヾ、 ,i| ,"__} // / / ー- - ヽ_人`'′ // / / / i'゙' /-─‐‐''/_/_ 、 _/-‐ヽ、___,,,, -‐‐  ̄ ー-、、,,__,-‐'//ノゝノ ノ ヽ\
214 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 22:45:30 ] >問題が起きてボトルネックが発見できた場合に対処すればいい どこの腐れ初心者ですか? あ、ここは初心者スレか。悪かった >机上の空論でのパフォーマンス対処ほど無駄なものはない 何千件とデータ回す場合を考えたら目に見えて明らかなんだが頭大丈夫かお前?
215 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:00:33 ] それは凄い動体視力
216 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:20:25 ] >>214 マジレスしとけば、数千件程度でパフォーマンスに影響出るって何時の世代のマシンだよw 数千回DBアクセスでもすんの? 数千回IOでもすんの?
217 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:24:49 ] じゃあ数百万件に変更な。これでいいか?
218 名前:デフォルトの名無しさん [2007/08/04(土) 23:27:47 ] >>217 素直にDB使え
219 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:36:24 ] >>217 そりゃアルゴリズムか設計に問題あるだろ
220 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:42:42 ] >184だが、Listに文字列を突っ込む時にMapにカウントしておく 適当に書いたのでコンパイルは通らないと思うがこんな感じだ class StringList { List<String> list; Map<String, Integer> counter; public int add(String str) { Integer count = counter.get(str); if(count == null) { count = new Integer(0); counter.put(str, count); } count++; list.add(str); return count; } } 最初から数えておけばいいってこと
221 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:57:17 ] 最初からカウントしてたら誰も質問しねぇわなww オナニーコードもほどほどにな
222 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:09:22 ] プッ
223 名前:デフォルトの名無しさん [2007/08/05(日) 00:34:48 ] longやintといったプリミティブ型の数値をbyte配列に変換するにはどうしたらいいでしょうか? longの値をbyte[8]の配列に入れたいのです。 何か方法がありましたらぜひお教えください。
224 名前:デフォルトの名無しさん [2007/08/05(日) 00:38:27 ] くそ天皇 くそ天皇 くそ天皇 くそ天皇 いい加減死ねっつってんだろ屑ニートくそ天皇が 相変わらず病的な粘着っぷりだな屑ニートくそ天皇が 毎日毎日毎日粘着出来て良いでちゅねくそ天皇 くそ天皇さっさと死にやがれゴミが 東京に在住している精神病珍米糞ニートくそ天皇君の末路 さっさと精神病院逝くか首吊って逝くか選べや糞天皇が 早く死ねよ糞ニート天皇が 粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました さっさと死ねやくそ天皇が 早く死ねっつってんだろ屑ニートくそ天皇が お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや とっと死に晒せや糞ニート天皇が
225 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:40:17 ] どういうふうに変換したいのよ。 どういうふうでもいいなら、これでどう↓ long x = 0; byte[] b = new byte[8]; new DataOutputStream(new ByteArrayOutputStream(b)).writeLong(x);
226 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:42:33 ] >>223 long l = 1000; byte b = (byte) l; という形でダウンキャストを行う そうすれば、上位ビットを無視するので、最下位のバイトが格納される。 上位バイトの取得は、ビットシフトを使えばOK
227 名前:デフォルトの名無しさん [2007/08/05(日) 00:42:42 ] くそ天皇 くそ天皇 くそ天皇 くそ天皇 いい加減死ねっつってんだろ屑ニートくそ天皇が 相変わらず病的な粘着っぷりだな屑ニートくそ天皇が 毎日毎日毎日粘着出来て良いでちゅねくそ天皇 くそ天皇さっさと死にやがれゴミが 東京に在住している精神病珍米糞ニートくそ天皇君の末路 さっさと精神病院逝くか首吊って逝くか選べや糞天皇が 早く死ねよ糞ニート天皇が 粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました さっさと死ねやくそ天皇が 早く死ねっつってんだろ屑ニートくそ天皇が お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや とっと死に晒せや糞ニート天皇が
228 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:42:51 ] byte[] binary = new byte[8]; ByteBuffer buff = ByteBuffer.wrap(binary); buff.put(longValue) もっといい方法が在るかもしれん。 あとJava内部のバイト配列はビッグエンディアンのはずだから気をつけること。
229 名前:デフォルトの名無しさん [2007/08/05(日) 01:01:41 ] くそ天皇 くそ天皇 くそ天皇 くそ天皇 いい加減死ねっつってんだろ屑ニートくそ天皇が 相変わらず病的な粘着っぷりだな屑ニートくそ天皇が 毎日毎日毎日粘着出来て良いでちゅねくそ天皇 くそ天皇さっさと死にやがれゴミが 東京に在住している精神病珍米糞ニートくそ天皇君の末路 さっさと精神病院逝くか首吊って逝くか選べや糞天皇が 早く死ねよ糞ニート天皇が 粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました さっさと死ねやくそ天皇が 早く死ねっつってんだろ屑ニートくそ天皇が お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや とっと死に晒せや糞ニート天皇が
230 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:07:06 ] 初心者じゃないんだけど、axisとかlog4jとか使ってるフリーのJavaライブラリを 複数使ってるとjarの中にあるクラスがバージョン違いで実行エラーになるんだけど どうしたらいいんだろう。 実行中にロードされたクラスファイル全部を見直して、モジュールの競合を解決してくれたり 何がいけないのかを判断してくれるツールないかなー?
231 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:12:54 ] >>230 ・競合ライブラリを最新のものに統一する。動かない部分は自前で修正 ・それかクラスローダを分ける
232 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:14:47 ] >>231 クラスローダを分けるとClassクラスとかでインスタンス生成するとき面倒じゃない? 競合ライブラリを最新のものにして、古いメソッドや仕様変更したAPI使ってたら、アウトだし。
233 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:18:44 ] 初心者じゃないって前振りはいったいなんだったのだろうか。
234 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:21:31 ] class A<T> { List<T> list = new ArrayList<T>; public List<T> getList() { return list; } } みたいにクラスにリストを持たせたとき、 A<Hoge> a = new A<Hoge>(); に対して a.getList.add(hoge1); とか a.getList.remove(hoge2); って出来ないの?やってみたところできてないっぽいんだけど
235 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:26:58 ] できるでしょ。 >a.getList.add(hoge1); a.getList().add(hoge1);
236 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:29:07 ] uho-勘違いしていました お恥ずかしい(-_-) >>235 回答ありがとうございました
237 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:33:58 ] 複数のスレッドから操作されるフィールドcountに volatlieを付けるとする。どの程度保障されるもの? while (count < 0) { } public void setCount() { this.count = count; }
238 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:35:06 ] 仮引数書き忘れた。。。
239 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:44:20 ] そんな意味不明なコード片じゃ何が言いたいのかわからん。 count++; みたいなコードは、volatile であってもアトミックにならない。他のスレッドが割り込む可能性がある。 つまり count++; をするスレッドが複数あったらだめ。 書き込むスレッドがひとつだけの場合は複数のスレッドから読んでも大丈夫。 ・・・ていう話? それとも volatile の正確な定義が知りたいのん?
240 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:45:56 ] Java の volatile はいい加減な実装になってる可能性がある、 って話を見たことがあるんだけど、今でもそうなの?
241 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:55:30 ] 可能性の話をされてもなぁ。 1.4 以前と 5.0 以降で volatile の仕様が変わったという話はある。 少なくとも 5.0 以降は仕様どおり実装されてんじゃない? Sun の VM では。 でなきゃ、java.util.concurrent.* あたりが今ごろ異常動作しまくりのはず。 詳しい話はこのへんでもどうぞ↓ www-06.ibm.com/jp/developerworks/java/040416/j_j-jtp02244.html www-06.ibm.com/jp/developerworks/java/040514/j_j-jtp03304.html www-06.ibm.com/jp/developerworks/java/library/j-jtp06197.shtml
242 名前:223 mailto:sage [2007/08/05(日) 03:25:44 ] >>225 ,226,228 回答ありがとうございます。 勉強になりました。 昔ならったコボルでは long l=0x0123456789abcdefL; byte[] b=new byte[8]; b=l; で、lをbに代入すると [01][23][45][67][89][ab][cd][ef] こんな感じにカパッと当てはまったなー、javaではどうやればいいんだろうと思ったしだいです。 ビッグエンディアンには注意します。
243 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 04:02:50 ] Java内部がビッグエンディアンというか、 Data*StreamやデフォルトのByteBufferがそう補正してるってのが正しい?
244 名前:デフォルトの名無しさん [2007/08/05(日) 04:09:43 ] 正しくない。 というか意味がわからん
245 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 04:40:07 ] 意味が分からないなら書くな。てかJavaDocに載ってる。
246 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 05:17:10 ] 最近byteとintの単項数値昇格ネタ増えたな。 俺自身バイト指向でデータ扱うことが減ったのですっかり忘れてた。 "& 0xFF"で下位bitのみとれって話だよね。
247 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 09:05:18 ] Jakarta CommomsのHttpClientについてのいいページない? ググったけど、情報量が足りないページばかり。
248 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 09:22:41 ] >>247 情報量って。。。本家にいくらでもあるだろ
249 名前:デフォルトの名無しさん [2007/08/05(日) 09:27:21 ] ファイルの入出力をしているのですが、 もしプログラムと同じディレクトリに入出力用ファイルあれば、 そのファイルから中身を取り出し・加工して再びそのファイルに書き出す。 もし無ければ、新しいファイルを作成して、そこに書き出す。 という用に行いたいのですがどの様にしたら良いでしょうか? 教えてください。
250 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 09:50:44 ] >>249 どのJAVAの入門書でもサンプルコードが載ってるだろ ググれば山ほどあるだろ
251 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 11:27:43 ] >>242 時代の流れだな Javaでバイトを意識してデータを扱うケースは稀だし、知らない技術者も多い
252 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:02:22 ] String型変数に入っている(2バイト)文字の文字列を 漢字、ひらがな、カタカナ、その他記号などといった種類別に分割するということを 「プログラミング言語Javaに関する質問スレです。」 ↓ 「プログラミング」「言語」「Java」「に」「関」「する」「質問」「スレ」「です」「。」 Javaで(効率よく)やるにはどのようにしたらよいでしょうか? (というか、文字種別をどうやって判断したらよいでしょうか?) 文字コードによる問題などもありますか?
253 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:07:50 ] ひらがなとカタカナは順序どおり並んでるらしいからif thenでやるのが簡単っぽいけど
254 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:10:03 ] 漢字・ひらがななら3バイトだと思うのは置いといて、 自然言語解析するか単純にテキストそう舐めして用意しといた単語リストと照らすか。 日本語はRPNなのでry 言い出したら切りがないな。
255 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:12:39 ] UFT-16なんだから、全部2バイトだろ
256 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:14:09 ] volatlieの件だけど、1.5ならいけそうです。 ありがとう、検証してみます。 1〜400のスレッドから操作を受けてるみたい
257 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:36:33 ] >>256 1.5ならば、AtomicIntegerの使用を検討してみたら? アトミックな操作が簡単に出来る ただ、そもそもスレッド周りの勉強をした上でスレッドに手を出した方がいい
258 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:39:45 ] >>252 効率よくやる方法はかなり難しいのではないか? 英語のように単語間がスペースで区切られているなら楽だろうが・・・ ぱっと思いつくのは、カタカナ・ひらがな・半角英数(といくつかの記号)は正規表現かなにかで定義 漢字で抽出するのは難しすぎるので「その他」で我慢する 後は、頭から崩して連結していくしかないと思う 下手に文字コードを数値で表現した所で、バグは増えても実行性能は大してかわらなそ
259 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:40:16 ] スレッドに手を出さなきゃスレッドの勉強なんぞできないだろ このスレの自称中級者どもはうざいのばっかだな・・・
260 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:51:02 ] お前は新しい技術をコピペでもして使ってから勉強するのか? 動けばいいという低レベルなマの典型だな
261 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:56:40 ] お前のコードはバグだらけなんだろうな。 普通は模範的なコードを見て覚えるもんだ。
262 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:58:18 ] 模範的なコードを意味も含めて理解することが勉強ではないのか?w
263 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:59:59 ] >>262 お前自身が何も理解してなさそうだな。この流れをみるに。
264 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:02:00 ] >260の頭が悪いということは解った
265 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:02:53 ] 初学者がvolatileって単語にたどり着いてる時点でGoサインはでてるだろ いじって覚える絶好のころあいだと思うのだが違うのか?
266 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:27:56 ] 別の人がさわらないプログラムだからと言って、クラス変数を全てpublicにしたら怒られそうですが。 public class Hogegege { private String name__; public String getName() { return new String(name__); } } っていうように、クラス変数を要求されたときに 新たに生成したものを返して絶対に変更できないようにした方がいいんでしょうか? それとも単に return name__; でOK?
267 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:32:10 ] String は元から絶対に変更できないから単に return でOK。 変更できるようなオブジェクト (普通の配列とか) は clone した方がいいこともある。
268 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:40:46 ] StringやIntegerなどは不変クラスと呼ばれる値オブジェクトとして理想的な構造を持ってる。 例えばOSごとの改行コードを返すクラスがあるとして、 それがchar[]で返されるものなら、それは return clCode.clone(); とかすべき。 コレクションならCollections.unmodifiable系メソッドでラップするのもよし。
269 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:50:07 ] 定数にコレクションを使うときに下のようにすることもある。 public static final Set<String> SUPPORTED_LANGUAGE; static { Set<String> set = new LinkedHashSet<String>(); set.add("ja"); set.add("en"); SUPPORTED_LANGUAGE = Collections.unmodifiableSet(set).; }
270 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:52:08 ] 要求された側が何をしたいかにもよる 要求された側も何をさせてOKかを考える その上で生で公開させてもいいし、防御的にコピーを返してもいい 結局は要求次第だが、なるべくは防御的にするのがセオリー Stringに関しては>267,268の説明の通り たが、char[]をコピーするか否かは要件次第なので、一概にコピーするべきとは言えない
271 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 15:41:35 ] 変なのが騒いでるが だれか満を持してネタ投下した>>255 に突っ込んでやれよw UTF系は固定長じゃないぞ。
272 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 16:15:11 ] UTF-32は固定長だが、UTFじゃなかったのか。
273 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 17:10:30 ] UTF-32は21bitになったUnicode3.1の全コードを単一のbit長で表現するために 後から作られたから可変長にする必要がないだけだよ。 アレが特殊。21bit範囲内はUCS-4と互換性を取るって目的もあるし。 可変長より固定長の方が扱いやすいからbitの無駄使いより扱いやすさを優先した符号化方式。 UTFは元来可変長で表すもの。
274 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 17:13:49 ] サロゲートがそもそも後付けだろ
275 名前:132 mailto:sage [2007/08/05(日) 17:31:38 ] 連結って意味だったんですね^^; 謎が解けましたorz ありがとうございました。
276 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 17:48:43 ] サロゲートが後付けって言うかUnicode作り出した段階で すでに16bitじゃ足りないのは分かってたけどそれに対処したのが遅れただけ。 実装側の互換性の問題とかがあったから。
277 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:02:43 ] StringBuffer key = new StringBuffer(); Random random = new Random(タネ); for(int index = 0;index < 20;index ++) { key.append((char)('A' + random.nextInt() % 26)); } ランダムなAからZまでの文字を20個追加したいのですが、 変な文字列が連結されます。何がいけないのでしょうか? おしえてください。
278 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:08:47 ] >>277 nextInt()は32ビット乱数のはずだから負数も取った気がした。 0と自然数だけ欲しければnextInt(26)ってやれば0〜25をとるよ。
279 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:10:52 ] >>277 出来ました!どうもありがとうございます。
280 名前:デフォルトの名無しさん [2007/08/05(日) 18:13:04 ] >>277 random.nextInt() でマイナスも含まれるから。 試しにrandom.nextInt() だけ出力してみるといい random.nextInt() にはオーバーロードメソッドで、0からnまでの乱数を返すrandom.nextInt(n) がある random.nextInt(26) で試せば期待した結果になると思われ
281 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:23:18 ] アンカーミスった >>278 >>280 思い通りの動作が出来ました、どうもありがとうございますm(_ _)m
282 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:52:27 ] >>276 サロゲートペアはUnicode誕生から5年後に導入されたんだが。 適当なこと書かないでおくれよw
283 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 21:45:02 ] 小生、Eclipseを使って開発しているのですが 本日「BufferUnderflowException」なるものが発生しました。 ググってみたところ「相対「get」操作がソースバッファのリミットに達したときスローされる、チェックされない例外です。」 との記述があったのですがよく意味がわかりませんでした。 ここでいうソースバッファのリミットとはコンパイラーのメモリのことを指しているのでしょうか? もしメモリ関連のサイズのことを指しているのでしたらどこで設定できるのかどなたか教えていただけないでしょうか? ちなみにEclipseの設定→Java→インストール済みのJREに指定しているのは最新のJRE1.6.0です。
284 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 21:53:47 ] いや。 java.nio.ByteBufferあたりのクラスのget系メソッドでサイズをオーバーして読み込んでしまった意味。 配列で範囲外のインデックスを使ったっていうのに近い。 単にプログラミングミス。
285 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 22:04:45 ] >>283 相対操作はpositionが読み込んだ値のバイト数分先に進むんだよ。 あと何バイト読み込めるかはremainingで確認できる。 構造体チックに各メンバ変数の並びを仮定して使うなら、0, 4, 8みたく プリミティブごとのバイト数を足して絶対アクセスすればいい。
286 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 22:10:18 ] プログラムミスだなんて・・・・そんな・・・ 実績のある会社が提供してる有料のライブラリーに含まれるメソッドを使ってたんだけど 使い方がわるかったのかなぁ・・・あーもう嫌ぽ
287 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 22:20:12 ] すいません、javaである処理を実行すると コンソールの初めあたりに以下のようなエラーメッセージが出て VM?ごと処理落ちしてしまいます。 しかもこれは必ずは発生するというわけではなくて不定期に出てしまいます。 不定期ですが処理を繰り返しているとすぐ発生する感じです。 JREのランタイムも最新のものを指定いるのですが相変わらず発生します。 どなたかわかる方がいらっしゃいましたら教えてください 「An unexpected error has been detected by Java Runtime Environment」
288 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 22:29:50 ] エラーログ嫁
289 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 22:39:56 ] 申し訳ありません。エラーログ?を読んでもさっぱりわかりませんでした。 通常のログとは違ってこの処理落ちの場合にのみ生成されるログをのことだと思いますが なんか「Thread」「Process」「System」といった感じにわけられて情報を ダンプしているような感じに見受けられましたがエラー原因となるような記述は 書かれているのかいないのかサパーリでした。なにか読み方があるのでしたら教えてください
290 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 23:03:08 ] forum.java.sun.com/thread.jspa?threadID=777177 こういう感じのやつか? 最初のほうの#がついた行をうpしてみ
291 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 23:27:01 ] あぁそれですわ。でもログは職場のマスィーンにあるので今うpできんのです申し訳ないです
292 名前:デフォルトの名無しさん [2007/08/06(月) 00:13:57 ] >>286 ソースコード読んでみろ 実績のある会社ならばソースコードくらい提供できる 出来ないとか抜かすならば金払う必要なし 逆コンパイルしてバグ見つけて訴訟もおk
293 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 00:42:55 ] >>287 それってJavaからネイティブモジュール読み込んでます?*.dllファイルとか? それだともしかしたら、PCの相性が悪いだけかもしれません。 自分もJNIを用いたプログラムでブルースクリーン出した事がある。しかも不定期。。
294 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 01:06:59 ] ネイティブ使用ならVM引数にXcheck:jniをつけてみる しかし>>287 のよーな現象に陥ったことがない為役にたつかはわかんない。
295 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 01:15:05 ] >>286 まぁその会社のサポート窓口に訊いてみれば? 使い方の問題にせよバグにせよ、なんらかの返答はあるでしょ。
296 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 01:16:58 ] JDI でオブジェクト生成を監視するのってどうすれば良いとおもう?
297 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 03:02:37 ] >>282 お前は日本語理解しような。 16bitじゃ足りないのは初期段階から分かってたけど実装側を無視できなかったから"Unicode誕生から5年後に導入された"んだろうが。 だいたいjavaなら普段は拡張面無視してるからUTF-16で16bit単位の可変長だろうが。 固定長なのはUCS-2ですよw
298 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 08:10:39 ] UCS-2 UCS-4 っていうのは文字集合であってエンコーディングじゃないんでは?
299 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 12:16:16 ] >>252 単純にやりたいなら、java.text.BreakIterator#getWordInstance() 本格的にやりたいなら、形態素解析が必要。
300 名前:デフォルトの名無しさん [2007/08/06(月) 18:37:52 ] //Sample1 AAAAA * BBBBB //Sample2 XXXXX YYYYY ZZZZZ という中身のSample1.txtとうファイルを読み込んで *の部分にSample2.txtというファイルの中身を書き加えて Sample3.txtというファイルに書き込むとすればどうやって記述すればよいのか 教えてください。 //Sample3 AAAAA XXXXX YYYYY ZZZZZ BBBBB
301 名前:デフォルトの名無しさん [2007/08/06(月) 18:41:13 ] >>300 1. Sample1.txtを読み込む 2. Sample2.txtを読み込む 3. Sample3.txt に Sample1.txt と Sample2.txt の内容を書き込む
302 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 18:46:53 ] Sample1.txtを少しずつ読む *かどうか調べる *ならSample2.txtの内容をSample3.txtに書く *でないなら今まで読んだSample1.txtの内容をSample3.txtに書く Sample1.txtの終わりまで繰り返す
303 名前:デフォルトの名無しさん [2007/08/06(月) 19:30:00 ] >>301 >>302 ありがとうございます やってみます
304 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 01:38:48 ] あの、関数の引数にfinalは付けるべきでしょうか。 関数内では値を変えることがないし変わって欲しくない場合、 finalを付けた方がいいとは思うんですが、 全てに付けているとパラメータの部分が長くなってしまい見づらいといえば見づらいです。 常識的にはどうするべきなんでしょうか。
305 名前:デフォルトの名無しさん [2007/08/07(火) 01:49:10 ] >>304 限りなく好みかもしれない場所の1つだな finalにした所でオブジェクトの内部は変更される可能性はある 引数に対して再代入する事自体を禁止し、FindBugsアタリでチェックしておけば不要とも言える (逆に言えば、メソッド内で引数への再代入を防止する為にfinalを付ける、だがw) 個人的には不要派
306 名前:デフォルトの名無しさん [2007/08/07(火) 01:50:10 ] final付ける場合と付けない場合もあるし、 つけなくてはエラーになるときがある。 べつに無理につける必要はないと思うのだが....
307 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 01:52:40 ] >>304 プロジェクトで決められてたら、それに従えばいい。そうでなければ好きにすれば良い。 経験的には手作業で final 付けてると、そのうち嫌気がさして止める。
308 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 02:06:45 ] 一番最初にやるHelloWorldなんですけどテキストに書いて それをコンパイルしようとしたんですけど 「javacは内部コマンドまたは外部コマンド、操作可能なプログラム またはバッチファイルとして認識されていません」となってしまいます。 どうしたらコンパイルできるようになりますか?
309 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 02:08:35 ] 環境変数でググれ
310 名前:デフォルトの名無しさん [2007/08/07(火) 02:10:14 ] >>306 final付けなくてはエラーになると本気で思っているならば勉強不足 それは匿名クラスなどに参照を渡しているからだろう
311 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 02:10:26 ] 環境変数PATHを設定する
312 名前:308 mailto:sage [2007/08/07(火) 02:23:25 ] とりあえずみんなが指摘してくれた通り環境変数見てみたんだけど多分あってると思う。 ;C:\Program Files\Java\jdk1,5,0\binをpathに加えればいいんだよね?
313 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 02:23:54 ] JDBCでのデータベース接続ができなくて困っています。以下のように作業を進めました。 postgres@debian$ createdb hellodb ------Connector.java------ package db; import java.sql.Connection; import java.sql.SQLException; import java.sql.DriverManager; public final class Connector { private static Connection conn; static { try { Class.forName("org.postgresql.Driver"); } catch (ClassNotFoundException ex) { throw new InternalError(ex.getMessage()); } } private Connector() { } public static Connection open() throws SQLException { return DriverManager.getConnection("jdbc:postgresql://debian/hellodb", "postgres", ""); } }
314 名前:308 mailto:sage [2007/08/07(火) 02:26:07 ] やっぱり駄目だ・・・誰か助けてくれ
315 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 02:27:05 ] カンマとピリオド再確認
316 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 02:33:38 ] あと、本当に 1.5.0 かどうかも。 実は 1.6.0 をインストールしてましたとか。
317 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 02:34:29 ] ------ConnectorTest.java------ package db; public class ConnectorTest { public static void main(String[] args) { System.out.println(Connector.open()); } } postgres@debian$ java -cp .:/usr/share/java/postgresql.jar db.ConnectorTest ------エラーメッセージ------ org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. db名、ユーザ名、パスワード名は大丈夫だと思うんですが・・・。
318 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 02:50:20 ] >>312 > ;C:\Program Files\Java\jdk1,5,0\binをpathに加えればいいんだよね? を加えちゃいかん ;"C:\Program Files\Java\jdk1,5,0\bin" 空白文字の扱いを知らんのか
319 名前:318 mailto:sage [2007/08/07(火) 02:52:26 ] しかもピリオドでなくてカンマやんw ;"C:\Program Files\Java\jdk1.5.0\bin"
320 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 02:53:01 ] >>312 pathに加えた手順を説明してみて
321 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:01:01 ] java的にはfinalな引数を導入したのは内部クラスから参照するためって事を知ってる前提で話してるんだよね? 人に聞くくらいなら内部クラスない場合は好み程度、と考えておけば良いんじゃない? 自分からfinal付ける明白な理由もなさそうだし。
322 名前:308 mailto:sage [2007/08/07(火) 03:04:37 ] 駄目だ・・・何でできないんだ?とりあえず315さんにいわれたようにカンマとピリオドはおk そして318さんに言われたとおりに;"C:\Program Files\Java\jdk1.5.0\binってPathのあとに つけて今にいたりました>>320
323 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:08:53 ] PATHをマイコンピュータのプロパティから変更してるなら、 プロパティをOK押して閉じてからコマンドプロンプトをいったん閉じて開きなおす。
324 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:10:35 ] そもそもC:\Program Files\Java\jdk1.5.0\binってフォルダの中にjavac.exeがあるのかね?
325 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:13:11 ] >>322 ちなみにうちの環境だと C:\Program Files (x86)\Java\jdk1.5.0_01\bin にjavac.exeはある
326 名前:308 mailto:sage [2007/08/07(火) 03:24:33 ] なんか頭がもうパニックだ・・・とりあえず本に書いてある通りに書くと class Examplel { public static void main(String args[]) { System.out.println("This is the output from Examplel"); } } をかいてそれをファイル名はExamplel.javaにして保存。実行するためにコマンド開いてjavac Examplel.java入力するらしい。 もう俺にはお手上げです。
327 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:28:25 ] >>326 それは関係無い コマンドプロンプトから "C:\Program Files\Java\jdk1.5.0\bin\javac.exe" -version って入れて Enter 押して結果を教えなさい
328 名前:308 mailto:sage [2007/08/07(火) 03:31:03 ] 指定されたパスが見つかりませんたって出ました
329 名前:デフォルトの名無しさん [2007/08/07(火) 03:31:06 ] ClassPath通してる?
330 名前:308 mailto:sage [2007/08/07(火) 03:33:52 ] よくわからない
331 名前:デフォルトの名無しさん [2007/08/07(火) 03:33:54 ] C:\Program Files\Java\jdk1.5.0\libの中の jarファイルにクラスパス通してないんじゃないの?
332 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:34:39 ] >>328 マイコンピュータ開いてCドライブ開いて・・・って辿っていってjavac.exeのあるフォルダ確認して。 Windowsの種類やJDKのバージョンによってこのフォルダのパスは変わるから。
333 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:35:11 ] よく釣りに付き合ってますねー 肝心なとこスルーして答えてないしメチャクチャ釣り臭いんですけど
334 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:36:37 ] >>333 は教えることもスルーすることもできないゴミ
335 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:36:45 ] >>328 ってことは、原因は 『C:\Program Files\Java\jdk1.5.0 に Java SDK をインストールしていない』 ってことになるんだけど、 [1] ダウンロードした SDK の確認(JDK と JRE と間違えてないか) [2] インストール場所の確認 をお願い
336 名前:デフォルトの名無しさん [2007/08/07(火) 03:36:45 ] 釣りだべ
337 名前:308 mailto:sage [2007/08/07(火) 03:45:11 ] ごめん釣りじゃなくて本当にわかんないんだよ・・・喧嘩しないでくれ >>332 よくわからない調べ方が。>>335 も調べ方がわからない。本当にすまん。初心者なんだ。
338 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:45:46 ] >>337 次の各問いに○か×で答えよ 1.C:\はあるか 2.C:\Program Filesはあるか 3.C:\Program Files\Javaはあるか 4.C:\Program Files\Java\jdk1.5.0はあるか 5.C:\Program Files\Java\jdk1.5.0\binはあるか 6.C:\Program Files\Java\jdk1.5.0\bin\javac.exeはあるか
339 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:51:11 ] もうjavac.exeをハードディスクの中で検索したら?
340 名前:308 mailto:sage [2007/08/07(火) 03:55:34 ] 1○ 2○ すまんもうこれ以上わからん・・・
341 名前:308 mailto:sage [2007/08/07(火) 03:56:15 ] >>339 ごめん。どうすればいいですか?
342 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:56:28 ] 実はJDKをインストールしていませんでしたというオチ?
343 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:57:58 ] >>340 じゃあJDKをインストールしてないんじゃないの? これはPCに元から入ってるものじゃないよ どこからダウンロードした? そもそもダウンロードすらしてない?
344 名前:308 mailto:sage [2007/08/07(火) 03:58:09 ] いや本についてる奴インストールしたと思う。
345 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:58:13 ] >>341 たぶんね、まじめな話パソコンに慣れてからのほうが良いと思うんだ。 門前払いする気は無いんだけど、PC の知識はどうしても必要になるから、今のままだと今後さらに悩むことになる。 とりあえず寝れ。寝て起きてまた考えろ。
346 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:59:20 ] >>341 HDD内のファイル検索すらしたことが無いのか? プログラミングはかなり時期尚早だよ。
347 名前:308 mailto:sage [2007/08/07(火) 04:01:15 ] >>345 なんかみんなの話聞いてたら確かに自分は早すぎるなと思ったわ・・・_| ̄|○ とりあえず今日はもう一回インストールしてみて寝ます。ありがとうございました。
348 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 04:03:34 ] >>347 インストールの途中で出てくる説明はよく読んでね 特にインストール先のフォルダを指定するところがあるだろうからそこはメモしておくといい
349 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 04:03:45 ] >>347 今みたいに、Java を勉強する過程で PC についての知識を深めるという荒業もある じっくりやれば良いと思うぜー
350 名前:308 mailto:sage [2007/08/07(火) 04:16:29 ] >>349 >>348 ありがとうございます。まだ基本的な知識が抜けているので自分で勉強しながらROMしようと思います。 質問できるレベルに達したらまた顔をだそうと思います。
351 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 04:23:37 ] >>304 引数につけた final はメソッドを使う側からは見えないので、 完全にメソッドの実装側の都合となるためそれほど重要でない。 >全てに付けているとパラメータの部分が長くなってしまい見づらいといえば見づらいです。 ここ重要。使い捨てでない限り、ソースコードは人が読む文書。しかも、唯一完全な文書。 意図せず誤ってパラメータへの代入を防ぐメリットとのトレードオフだが、 それが一目で分からないような複雑なメソッドはむしろリファクタリングの対象と思われ。 不要派が多いんじゃないかな。自分も不要派
352 名前:351 mailto:sage [2007/08/07(火) 04:42:09 ] 補足。 引数に final をつけることにより、 ソースコードの読み手にその意図を伝える役割があるが、 そもそも、引数に代入を行うこと自体が混乱を招くことなので 通常やらない(むしろ、そのようなコードはリファクタリング対象)。 したがって、この意味でも、引数に final をつける意義は薄れている というのが、不要派のおいらの個人的意見
353 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 07:35:11 ] C++でもconstを引数に使うのはconst char *のようなケースだけだものね。
354 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 07:44:14 ] いやC++のconst参照渡しは中身を書き換えないところまで保障するから別だとおもうが……
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