【初心者】Java質問・相談スレッド127【歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/06/09(火) 19:17:03JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理 http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
http://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
前スレッド
【初心者】Java質問・相談スレッド126【歓迎】
http://pc12.2ch.net/test/read.cgi/tech/1242152793/
次スレは>>990あたりで。
過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
0153デフォルトの名無しさん
2009/06/12(金) 14:40:55一番最初のFileOutputStreamの参照変数に対してcloseしています。
繋げて書いた場合はPrintStreamのメソッドのcloseを使ってOKと
いうことは、closeは、どの段階のものでもいいのでしょうか。
それとも最初か最後のどれとか決まっているのでしょうか。
0154デフォルトの名無しさん
2009/06/12(金) 14:53:42どのcloseを呼び出すのかは、使用するライブラリの実装次第。
java.io.Closeable#close() では、
> このストリームを閉じ、関連付けられているすべてのシステムリソースを解放します。
とあり、一番外側を close すれば、ラップされていても全て解放する仕様、と読み取れる。
0155デフォルトの名無しさん
2009/06/12(金) 15:02:370156デフォルトの名無しさん
2009/06/12(金) 15:29:240158デフォルトの名無しさん
2009/06/12(金) 18:03:36ニート死ね
0159デフォルトの名無しさん
2009/06/12(金) 20:06:55・・・
static class MyFilter implements FilenameFilter {
public boolean accept(File dir, String name) {
return name.endsWith(".TXT") || name.endsWith(".txt");} }
見たこともない仕組みが登場しました。
acceptメソッドとか記述もしてないのに、これでちゃんと動くのですけど
これは特殊な仕組みなのでしょうか。
0160デフォルトの名無しさん
2009/06/12(金) 20:19:49俺にはacceptメソッドを記述しているように見える罠。
0161デフォルトの名無しさん
2009/06/12(金) 20:23:06使う側の、String filelist[] = cdirectory.list( new MyFilter() ); で
呼ばれてないんですよね。読んでいるところが見当たらないんです。
0162デフォルトの名無しさん
2009/06/12(金) 20:26:16cdirectory.list()メソッドの中で呼ばれてると思うが
0163デフォルトの名無しさん
2009/06/12(金) 20:36:36{
public static void main(String args[])
{
try{
int test[];
test = new int[5];
System.out.println("test[10]に値を代入します。");
test[5]=【?】;
System.out.println("test[10]に80を代入します。");
}
catch(ArrayIndexOutOfBoundsException e){
System.out.println("配列の要素を超えています。");
System.out.println( e +"という例外が発生しました。");
}
finally{
System.out.println("終わりました。");
}
System.out.println("無事終了しました。");
}
}
例外が出ないような値を【?】に入れたいんだけど5以上にしても5以下にしても例外に当てはまってしまう。
いったい何を入れればいいのかな?それともどこか変えなければいけないのかな?
0164デフォルトの名無しさん
2009/06/12(金) 20:46:33acceptメソッドは、いつ呼ばれるんでしょうか
0165デフォルトの名無しさん
2009/06/12(金) 20:51:050166デフォルトの名無しさん
2009/06/12(金) 20:55:49書いてることがよく分からんが、というか配列を勘違いしてるっぽいが
test = new int[5]; でtest[0]〜test[4] までを確保しているので
test[5] は存在しない。
よって、【?】にどんな値を入れようとしてもエラーになる。
>>164
内部で自動的に呼ばれる
0167デフォルトの名無しさん
2009/06/12(金) 21:01:12そうなりますと、listメソッドの中で記述されているということですね。
こういうのが沢山あると、使うほうはわかりにくいですねえ。
出てくるたびに考え込まないといけないですね。
ありがとうございました。
0168デフォルトの名無しさん
2009/06/12(金) 21:03:56基本的なことを忘れてました。
ありがとう
0169デフォルトの名無しさん
2009/06/12(金) 21:27:38考え込みません。
使い方は APIdoc に書いてある。
それが何を意味するのか、を考え込むかもしれないが。
0170デフォルトの名無しさん
2009/06/12(金) 21:55:180171デフォルトの名無しさん
2009/06/12(金) 22:08:11知識だけじゃなくそれなりの「教養」も必要かもな
0172デフォルトの名無しさん
2009/06/12(金) 22:11:010173デフォルトの名無しさん
2009/06/12(金) 22:22:30RegexpとかOROとか諸々の正規表現ルーチンを開発する楽しみを残すためです。
0174デフォルトの名無しさん
2009/06/12(金) 22:26:170175デフォルトの名無しさん
2009/06/12(金) 22:43:48acceptメソッドに対するレスだろう。
0176デフォルトの名無しさん
2009/06/12(金) 23:15:030177デフォルトの名無しさん
2009/06/13(土) 00:28:54むー、純粋な関数オブジェクトと誤解されるか。そこまで意識してなかった。
Javaで関数オブジェクトって厳密には実現できなくて、同様の手段としてストラテジ
パターン使ってる別物か。
import java.io.*;
public class Main {
public static void main(String[] args) {
File cdirectory = new File("c:\\usr");
String filelist[] = cdirectory.list(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".TXT") || name.endsWith(".txt");
}
});
for (String name : filelist) {
System.out.println(name);
}
}
}
0178デフォルトの名無しさん
2009/06/13(土) 00:47:35最近さ、ブログでもデザインパターンの用語ばかり散りばめて自分によってる奴多いんだよね・・・
0179デフォルトの名無しさん
2009/06/13(土) 10:21:120180デフォルトの名無しさん
2009/06/13(土) 10:47:040181デフォルトの名無しさん
2009/06/13(土) 11:32:04実装次第。toLowercase()して比較。前スレの914あたりからの話を参照。
0182デフォルトの名無しさん
2009/06/13(土) 17:54:58なんか設計というかファイルとデレクトリで使うには適してないと思うですけどどうですか?
ファイルの方は抽象クラスで宣言されてるメソッドを使わないから、例外発生とかですよね。せんせ!
0183デフォルトの名無しさん
2009/06/13(土) 18:00:36引数のチェックなんですけど、"/?" とは何を入力したときなんでしょうか。
0184デフォルトの名無しさん
2009/06/13(土) 18:05:370185デフォルトの名無しさん
2009/06/13(土) 18:05:42dir /?
みたいな
0186デフォルトの名無しさん
2009/06/13(土) 18:07:510187デフォルトの名無しさん
2009/06/13(土) 18:08:570188デフォルトの名無しさん
2009/06/13(土) 18:11:12↑じゃ↓が偽になって弾かれるからだろ
args.length != 1
0189デフォルトの名無しさん
2009/06/13(土) 18:14:20つーか、またStringで==とかの論争が始まるのか、勘弁してくれ
0190デフォルトの名無しさん
2009/06/13(土) 18:16:350191デフォルトの名無しさん
2009/06/13(土) 18:19:120192デフォルトの名無しさん
2009/06/13(土) 18:21:080193デフォルトの名無しさん
2009/06/13(土) 18:28:070194デフォルトの名無しさん
2009/06/13(土) 18:33:380195デフォルトの名無しさん
2009/06/13(土) 18:37:04190に変更したら、引数に/?を指定してチェックに引っ掛かりました。
よく考えたらStringは==駄目でしたね。本の通り打ったんですけど、
本が間違えているんですね。それから、/?を引数に入れることに
どんな意味があるんでしょうか。
0196デフォルトの名無しさん
2009/06/13(土) 18:37:38>本の通り打ったんですけど
出版社とタイトル、ページ数を教えて欲しい
0197デフォルトの名無しさん
2009/06/13(土) 18:43:41あと版数な
0198デフォルトの名無しさん
2009/06/13(土) 18:46:46System.out.print(convHex((n & 0xf0) >> 4)); //ココ1
System.out.print(convHex(n & 0x0f)); } //ココ2
それから、これはヘキサダンプ作成のコードなんですけど、
文字を4ビットずつ表示してると思うんですけど、
ココ1ではn & 0xf0をしなくても左4ビットに0が埋まるのではないかと
思うんですけど。どうなんでしょうか。
それから本のタイトル等は差し控えたいと思います。
0199デフォルトの名無しさん
2009/06/13(土) 18:49:420200デフォルトの名無しさん
2009/06/13(土) 18:51:38情報出さない連中がまともな回答を期待するのが間違い
0201デフォルトの名無しさん
2009/06/13(土) 18:52:50それを突っつかれたくないから「本の通りに書きました><」とか言ってんだろ
0202デフォルトの名無しさん
2009/06/13(土) 19:22:57本当のjava初心者が質問しづらい空気だから、他スレでやって欲しいわ
0203デフォルトの名無しさん
2009/06/13(土) 19:25:050204デフォルトの名無しさん
2009/06/13(土) 19:35:29【初心者】【歓迎】と書いてあり、初心者が来ること自体は何の問題も無いが、
別に初心者用のスレというわけでもない
初心者専用ならこっちに行ったらどうだろう
Javaやらないか(超初心者向け)
ttp://pc12.2ch.net/test/read.cgi/tech/1228452306/
0205デフォルトの名無しさん
2009/06/13(土) 19:36:200206デフォルトの名無しさん
2009/06/13(土) 20:20:50エスパーしなければならない点
1. bistreamの型
2. nの型
3. ENDの値
4. convHex()の引数の型
・・・情報出してると言えないよね、その聞き方じゃ?
1. BufferdInputStreamとエスパー
2. 1からint
3. 1から-1
4. キャストしていないから、nの型からint
とエスパーすると、BufferdInputStream#read() が返すのはバイト値か-1だけ
だから必要は無いね。
でもSystem.out.print(convHex(n & 0x0f));の行と並べた時に意図が明白になる
から意味はある。個人的シュミだと
System.out.print(convHex((n>>>4) & 0x0f));
System.out.print(convHex((n>>>0) & 0x0f));
とするかな。そんなことまで聞いてない?スマンな、エスパーだからな。
>>202
人のレスに一々ケチつけてるヒマがあるなら、キミが答えてやればいいじゃないか。
それで解決。
0207デフォルトの名無しさん
2009/06/13(土) 20:29:38設計(例題)がおかしいんですよ!?
0208デフォルトの名無しさん
2009/06/13(土) 20:34:050209デフォルトの名無しさん
2009/06/13(土) 20:35:130210デフォルトの名無しさん
2009/06/13(土) 20:39:190211デフォルトの名無しさん
2009/06/13(土) 20:40:10>でもSystem.out.print(convHex(n & 0x0f));の行と並べた時に
>意図が明白になるから意味はある。
すごくよく分かりました。質問ももっと情報を書かないといけないことも
分かりました。ありがとうございました。
0212デフォルトの名無しさん
2009/06/13(土) 20:40:400213デフォルトの名無しさん
2009/06/13(土) 22:10:37See JLS 5.6.1
0214デフォルトの名無しさん
2009/06/13(土) 22:17:28一番簡単な方法はなんでしょうか?
こんな感じです。
0.16 → "0.2" (四捨五入)
1 → "1.0"(小数にならない数も.0をつける)
0215デフォルトの名無しさん
2009/06/13(土) 22:25:500216214
2009/06/13(土) 22:34:09ググったらDecimalFormatというのがありました。
DecimalFormat pattern = new DecimalFormat("0.0");
String str = pattern.format(0.51);
0217デフォルトの名無しさん
2009/06/13(土) 23:42:030218デフォルトの名無しさん
2009/06/14(日) 04:16:57インスタンスを作るにはどうすればいいですか?
例えば、Stringに追加メソッドが欲しいと思い、
class StringEx extends java.lang.String {
public void addABC() {
this += "ABC";
}
}
こういうクラスを作った場合、
StringExのインスタンスはどうやって作ればいいのでしょうか。
0219デフォルトの名無しさん
2009/06/14(日) 06:27:39String は final宣言されてるから継承できないよ
0220デフォルトの名無しさん
2009/06/14(日) 09:33:21過去問を見ていると分からない記述があったので質問させて下さい。
下記mainクラス内の宣言部に記載されている、
「int a = 0x0f , b = 0x0f」の初期値"0x0f"が何を指しているのか分かりません。
�@と�Aでは15が出力され、�Bでは31が出力されました。
インクリメントされたaをxに代入しているにも関わらず、
なぜ�Aでも15が出力されるのですか?
どなたか教えて下さい。
class Increment{
public static void main(String args[]){
int a = 0x0f, b = 0x0f ,x = 10, y = 10;
System.out.println(a); //�@
x = a++;
System.out.println(x); //�A
y = x + ++b;
System.out.println(y); //�B
}
}
0221デフォルトの名無しさん
2009/06/14(日) 09:43:47ヒント
インクリメントにはa++と++aがある
0222デフォルトの名無しさん
2009/06/14(日) 10:24:28ヒント 式の評価順序
0223デフォルトの名無しさん
2009/06/14(日) 10:43:46++に関しては15.14.2ならびに15.15.1。
評価順序に関しては15.7全般。
http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html
0224デフォルトの名無しさん
2009/06/14(日) 11:01:310225デフォルトの名無しさん
2009/06/14(日) 11:28:27どうすればいいの?
0226デフォルトの名無しさん
2009/06/14(日) 11:37:24public synchronized void buy() { 〜}
public synchronized void seisan() { 〜}
class Ko1 extends Thread {
void buy() //ココ
void seisan()
class Ko2 extends Thread {
void buy() //コレ
このような感じの場合に、synchronizedを指定すれば
同期が取れるとあるのですけど、synchronizedなメソッドを
呼び出して終わればロックは自動解除されるとあるので、
ココが終わった瞬間に、コレが先に動いて同期が
取れなくなる場合があるように思うんですけど、
どうなのでしょうか。
0227デフォルトの名無しさん
2009/06/14(日) 11:37:59Matcherのgroupでいい
0228デフォルトの名無しさん
2009/06/14(日) 11:44:37何を守って同期したいのか不明。
Kyoutuu は可哀想な子
0229デフォルトの名無しさん
2009/06/14(日) 11:45:490x0fは0xが16進ですよを表して、一文字(8バイト)を表して、
ofは4ビットずつを、前半4ビットが0000、後半4ビットが1111で、
15になります。x = a++; は、x = a; a = a + 1 と同じ意味です。
0230デフォルトの名無しさん
2009/06/14(日) 11:47:51buy()は金額加算です。同期とれませんよね?
0231デフォルトの名無しさん
2009/06/14(日) 11:52:13synchronized void buy() { /* hoge */ } は
void buy() { synchronized(this) { /* hoge */ } } と同じ。
第二版 8.4.3.6 synchronizedメソッド
ttp://www.y-adagio.com/public/standards/tr_javalang2/classes.doc.html#260369
0232デフォルトの名無しさん
2009/06/14(日) 11:55:22特に同期を取る必要の無いものだろうから、別に問題ないだろ。
0233デフォルトの名無しさん
2009/06/14(日) 12:23:49Pattern pat = Pattern.compile("a.*?b");
Matcher mat = pat.matcher("abaabbcbacb");
while (mat.find()) {
System.out.print(mat.start());
System.out.print(", ");
System.out.println(mat.end());
System.out.println(mat.group());
}
0234デフォルトの名無しさん
2009/06/14(日) 13:09:00ありがとうございました。
0236220
2009/06/14(日) 16:44:44>>222
返信ありがとうございます。
a++は処理が行われた後にインクリメントする、
++aは処理前にインクリメントするという認識でした。
この認識が既に誤っているのでしょうか?
なぜ、�Aで出力結果が16にならないのかが分からないのです。
>>223
返信ありがとうございます。
リンクを貼っていただいたサイトを拝見しました。
16進数については勉強していたのですが、
お恥かしいことに0x0から始まる形式を見たことが無く、16進数と分かりませんでした。
大変勉強になりました。
>>224
上記の通り、私の勉強が足りませんでした。
試験まであと2週間しかないのですが、精一杯勉強して頑張ってみます。
返信ありがとうございました。
0237デフォルトの名無しさん
2009/06/14(日) 16:45:350238220
2009/06/14(日) 16:55:28解説ありがとうございます。
0xという表記が16進数を意味しているんですね。
返信を下さった皆様、ありがとうございました。
私のバカな勘違いで、�Aでaの中身を出力しているつもりで結果を見ていました。
本当に申し訳ありません。0x…の記述については大変勉強になりました。
お世話になりました。
0239デフォルトの名無しさん
2009/06/14(日) 16:58:03否。
java-APIソースでjava.lang.reflectをgrepしてみるといい。
かなり積極的に利用されてる。
0240デフォルトの名無しさん
2009/06/14(日) 17:27:21>�Aで出力結果が16にならないのかが分からないのです。
int a = 0x0f // ここでaには15が格納されます
x = a++; // ここでxにaの値(15)が格納されて aに1が+されます。
System.out.println(x); //�A つまりここの段階でa=16 x=15となります。
0241デフォルトの名無しさん
2009/06/14(日) 17:32:36ありがとうございます
0243デフォルトの名無しさん
2009/06/14(日) 17:53:16パフォーマンスに激しく影響するし、
バグを実行時まで遅延させることになるから
積極的には使わない方がいいよ。
0244デフォルトの名無しさん
2009/06/14(日) 18:03:23リスクを判ってるなら無理して使わない理由は特に無い。
0245デフォルトの名無しさん
2009/06/14(日) 18:34:40かといって、うかつに除外しちゃうと、動いている途中に大コケ。
これってもう、諦めて全部配備するしかない?
0246デフォルトの名無しさん
2009/06/15(月) 02:03:330247デフォルトの名無しさん
2009/06/15(月) 08:18:32依存関係も最近はマシになっている
で数十MBを節約しなきゃいけないってどんな過酷な環境なんだw
0248デフォルトの名無しさん
2009/06/15(月) 08:27:57普通に考えて要らないものを入れるような設定書くかな。
というわけで基本は全部入れる。
もちろん例外も有るけど、そこを考えて判断するのは基盤部分に携わる専門技術者の仕事だね。
自分が一般的な開発者の役割なら用意されたものを全部入れるべき。
0249デフォルトの名無しさん
2009/06/15(月) 13:20:31というのがあるんですけど全然意味がわかりません。o1,o2には何が
渡っているんでしょうか。
String animal[] = {"lion","sai","buta","hyo","kirin","chiita"};
Arrays.sort(animal, new Mysort());
class Mysort implements Comparator<Object> {
public int compare(Object o1, Object o2) {
return -((String)o1).compareTo((String)o2);
}
}
これで降順になるらしいのですが、何と何を比較しているのでしょうか。
解説していただけないでしょうか。
0250デフォルトの名無しさん
2009/06/15(月) 14:15:34System.out.println("o1 : "+(string)o1)
System.out.println("o2 : "+(string)o2)
0251デフォルトの名無しさん
2009/06/15(月) 14:48:02JFrameのようにsetVisibleというメソッドはなかったし
setOpaqueだと背景色を透明にするだけで駄目でした
0252デフォルトの名無しさん
2009/06/15(月) 14:55:00sortメソッドの中でオブジェクトを参照して比較してるんですね。
returnがマイナスならそのまま、プラスなら左右入れ替えているんですね。
よくわかりました。ありがとうございました。5時間くらい悩んでました。
■ このスレッドは過去ログ倉庫に格納されています