【初心者】Java質問・相談スレッド99【大歓迎】
過去ログ、関連スレッド、よくある質問とその回答、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/ これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
http://www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
前スレッド
【初心者】Java質問・相談スレッド98【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1171787388/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。
http://pc10.2ch.net/hp/ 次スレは
>>980あたりで。
ずるしてらくしてかれいに2げっとかしらかしら〜
3 :
3get:2007/03/05(月) 11:59:08
∧_∧
ピュ.ー ( ^3^) <エェー これからも僕を応援して下さいNE(^3^)。
=〔~∪java~〕
= ◎――◎ java&サン
Javaからウェブカメラの映像を取得するには
JNIとか使わなきゃむりぽ?
5 :
デフォルトの名無しさん:2007/03/05(月) 12:16:58
>>4 ローカルのカメラならドライバ次第では?
ネット上の映像ならソケットで取れないか?
7 :
4:2007/03/05(月) 12:32:02
>>5 ローカルなんだ。
いろんなカメラに対応させたいんだが。
>>6 調べてみる。
トンクス
8 :
デフォルトの名無しさん:2007/03/05(月) 13:25:35
9 :
デフォルトの名無しさん:2007/03/05(月) 13:47:11
アプレットに表示されている線や複数の画像を、
一つの大きな画像と見て拡大縮小等の処理を行いたいのですがどんな感じで作れば良いでしょうか?
>>9 Graphics2DとImage使ったらできないかな?
>>10 ご回答ありがとうございました。
恥ずかしながら、その単語は初めて聞きました。調べて勉強してみます。
ラストスレおめでと。
残り少ないけどよろ。
(:D)| ̄|_
JAVAにおける文字コードについて質問なのですが、こちらでよろしいでしょうか?
OutputStreamWriterなどで文字コードを指定のうえ
ファイルを読み込み、読み込んだファイルをそのまま出力する処理を
作成していますが機種依存文字(丸1や(株))が文字化けしてしまいます。
「MS932」を指定するだけでは足りないのでしょうか?
動作環境はREDHUTでTOMCATのバージョンは5.5です。
なおWindows環境での動作確認ではうまく処理できました。
14 :
13:2007/03/05(月) 18:39:22
// ファイル読込準備
InputStream istream = null;
BufferedReader br = null;
istream =formFile.getInputStream();
br = new BufferedReader(new InputStreamReader(istream,"MS932"),65535);
// ファイル出力準備
File uploadFile = new File("ディレクトリ名", "ファイル名");
OutputStreamWriter bos = null;
bos = new OutputStreamWriter(new FileOutputStream(uploadFile.getAbsolutePath()), "MS932");
boolean flg = true;
String fileText = new String();
StringBuffer sb = new StringBuffer();
while (flg) {
fileText = br.readLine();
if(fileText==null){
flg=false;
}else{
if(!fileText.equals("")){
sb.append(fileText + "\r");
}
}
}
bos.write(sb.toString());
bos.close();
istream.close();
>>1のWikiroomが403なんだけどたまたま?
それともつぶれた?
>>13 まずはTomcat関係無しに、Redh a tのjavaで文字化けせずに
Windows-31Jの文章が読み書きできるか確認。
それと、MS932ではなく、Windows-31Jにしておいた方がいいですよ。
Windows-31Jは、IANA登録名ですから。
すみません、eclipseなんですが、中括弧の付く位置が初期設定では
メソッド() { こんな感じになってるんですが、
メソッド()
{
こんな感じにする事はできないのでしょうか?見難くってやってられません。
もし設定を変える方法を知っていたら教えてください。お願いします。
>>17 Window>Preference
Java>Code Style>Formatter
19 :
デフォルトの名無しさん:2007/03/05(月) 19:28:05
質問1)
テキストファイルに書かれた数字を配列にいれるにはどうすればいいの?
hoge.txtは以下のとおり
12
34
56
78
ってかいてあって、java hoge.txtと実行すると
配列aa[0]〜aa[3]に上から順に数字が入るようにしたい。教えて
質問2)
配列に入った数値a[0]=12, a[1]=34, a[2]=56, a[3]=78を
nag.txtに順番に
12
34
56
78
と書き込みをしたい。どうすればできるの。一つでもいいから誰か教えて
>>13 System.out.println(java.nio.charset.Charset.foName("MS932").getClass());
とかやって、実装してるクラスを確認してみるとか。
21 :
17:2007/03/05(月) 19:30:52
一応設定は上手く行きました。教えてくれてありがとうございます。
23 :
13:2007/03/05(月) 19:40:14
>>16 Windows-31J指定の件了解です。
またJAVAにて読み書きできるかについてですが可能でした。
以下コードをREDHAT上にて実行。
(input.txtはSJISにて丸1と全角ハイフンを記述、output.txtに正しく出力)
FileInputStream fis = new FileInputStream("input.txt");
InputStreamReader ir = new InputStreamReader(fis , "MS932");
BufferedReader br = new BufferedReader(ir);
String msg = br.readLine();
FileOutputStream fos = new FileOutputStream("output.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos , "MS932");
BufferedWriter bw = new BufferedWriter(osw);
bw.write(msg);
>>23 何だろうねぇ?
Tomcatの起動オプションに強制指定入れてみる?
-Dfile.encoding=MS932
これ。
25 :
デフォルトの名無しさん:2007/03/05(月) 20:00:11
>19やさすぃいJavaにそのまま書いてあるお
(:D)| ̄|_
>>19 package hoge;
public class txt {
private static final String aaa = "hoge.txt";
private final String aaaa = "nag.txt";
private static int[] aa = new int[4];
private int[] a = new int[4];
public static void main(String[] a) throws Exception {
java.io.BufferedReader b = null;
try {
b = new java.io.BufferedReader(new java.io.FileReader(aaa));
for (int i = 0; i < 4; i++) aa[i] = Integer.parseInt(b.readLine());
new txt().a();
} finally {
if (b != null) b.close();
}
}
private void a() throws Exception {
for (int i = 0; i < 4; i++) a[i] = aa[i];
java.io.BufferedWriter b = null;
try {
b = new java.io.BufferedWriter(new java.io.FileWriter(aaaa));
for (int i = 0; i < 4; i++) { for (char c : String.valueOf(a[i]).toCharArray()) b.write(c - '0' + '0'); b.newLine(); }
} finally {
if (b != null) b.close();
}
}
}
前スレ
>>987 Linuxの設定、Java version関係なく
sendする直前に、recv処理をすることで対応できました。
回答どもです。
28 :
19 :2007/03/05(月) 21:20:03
>26
29 :
19 :2007/03/05(月) 21:21:25
>26 ありがとう、ところでこれコンパイルは通るけど、実行すると以下のようなエラーがでる
Exception in thread "main" java.lang.NoClassDefFoundError: txt (wrong name: hoge
/txt)
at java.lang.ClassLoader.defineClass1(Native Method)
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$100(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)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
もう涙が出ちゃう。・゚・(ノД`)・゚・。
31 :
デフォルトの名無しさん:2007/03/05(月) 21:37:30
なるほど、スレタイ通りだ。wwwww
32 :
デフォルトの名無しさん:2007/03/05(月) 21:38:21
33 :
19 :2007/03/05(月) 21:42:49
javac txt.java
java txt
で実行しているわよ
>>33 hoge ってディレクトリ掘って、そん中に txt.class をつっこめ。
そのあと java hoge.txt ね。
>>19 の
> ってかいてあって、java hoge.txtと実行すると
ってのが原因。
36 :
19 :2007/03/05(月) 21:50:11
パッケージ宣言とっちゃえば?
>>36 そこに書いてあるのはパッケージ使わない場合だけだから、
今回は参考にならんよ?
> パッケージ宣言とっちゃえば?
>>19 の仕様に反するんだけど。
40 :
13:2007/03/05(月) 22:00:31
ちょっと確認したのですが、この方法でサーバに生成されたファイルの
文字コードを確認したらEUCになっていました。これってサーバ依存の
文字コードがデフォルトで選択されているってことですよね。
ただ「OutputStreamWriter」でエンコーディングの指定をしているにも
関わらずそのようになってしまったのはなんでだろう…。
42 :
19 :2007/03/05(月) 22:12:09
synchronized修飾子を指定したメソッドなんですが、
スレッド名.wait()を使用するとjava.lang.IllegalMonitorStateException: current thread not ownerが出ます。
この場合どんなことが原因だと考えられるのでしょうか?
wait() を用いたこと
>>43 エラーメッセージの通り。
もしくは、モニターの所有権について
>>43 が理解できてない事。
>>43 Objectのwaitメソッドを使っているわけだからその辺のドキュメント漁れば答えが見えてくるはずなんだけど…
> このメソッドを呼び出すのは、このオブジェクトのモニターを所有するスレッドだけでなければ
> なりません。スレッドがオブジェクトのモニターのオーナになる方法については、notify メソッド
> を参照してください。
直接的ではないにせよ最低限のヒント位は出ているから、普段からAPIドキュメントみるクセをつけた方が良いかと。
え?ここJNIあり?
幅広いね
50 :
デフォルトの名無しさん:2007/03/06(火) 06:49:35
>>50 addActionListenerかaddItemListenerを使う。
簡単なのはActionListenerのほうかな。
編集可能か否かでちょっと違うかもしれないが。
JComboBoxのAPIを見ること。
なんでそんなことが分からないレベルで2chに質問しようと思いつくのか。
それとも釣りか。
53 :
13:2007/03/06(火) 09:04:58
>>41 14の方です。23の方はうまくいってます。EUCに丸文字ないので
ばけていたのだと思います…。が、14の方法で何故EUCファイルが
できてしまったのでしょう…。現在それを調べています。
//クラスのインポート
import java.util.*;
public class Hiduke {
public static void main(String[] args){
//インスタンス化
Calendar now = Calendar.getInstance();
int y = now.get(now.YEAR); //年を取得
int m = now.get(now.MONTH) + 1; //月を取得
int d = now.get(now.DATE); //日を取得
//日付を表示
System.out.println(y+"年"+m+"月"+d+"日");
}
}
この場合、引数ってのはどれにあたるのでしょうか?
String[] args
now.YEAR
now.MONTH
now.DATE
y+"年"+m+"月"+d+"日"
メソッドに渡してるものは全部引数
何の引数?
コマンドライン引数ならmainメソッドのargsだが、プログラム中では利用
されていないね。
getの引数はnow.YEARとかだな。
printlnの引数はy + ... + "日"という式。
本筋とは関係ないけど、Calendarは日時を表すオブジェクトではないので
nowという誤解させるような名前を付けるのは好ましくない。
>>55-56 迅速な対応ありがとうございます。また質問なのですが
上の日付の書式を書くとなるとどう書けばいいのでしょうか?
SimpleDateFormat
何も知らない俺がiアプリで計算機程度のソフト作れるようになるには
どのくらいの時間かかりますか?
そんなことを2chに聞きに来るような人には一生無理だと思います。
61 :
デフォルトの名無しさん:2007/03/06(火) 14:54:04
>>59 「作る時間」じゃなくて「作れるようになるまでの時間」って事?
今からでも作れるよ。君に足りないのは技術力じゃなく決断力だ。
>>13 native2asciiとか使ったことある?
>>29 でたー、これわざとやってるとしか(ry
ファイル名.java.txtになってたってやつかー
>>40 コンパイルオプションで指定した文字コードは?
だめならとりあえずnative2ascii
Stringオブジェクトを使うとき、文字コード指定していないとかでは?
JISAutoDetectとか昔、懐かしいことしていた記憶がある・・・・
質問に答えればいいのにプログラマってごちゃごちゃうるさいね。
>>59 適当だけど40時間(8h/日なら5日間、4h/日なら10日間)ぐらいじゃない?
計算機ロジック自体は簡単だけど、
開発ビルド環境、iアプリの作り方、サーバへのアップとダウソでハマると思う。
思うんだが、丸文字丸文字いうてるやつは
丸文字の意味を間違えてないか? と突っ込んでみる。
>>67 つうか、お前がプログラマなんだろ。
俺はプログラマじゃないから答えてやらないよ。
>>67 おまえは、場合によっては、質問者に
余計なお世話だと思われることだろう。
そもそも
>>67の発言はあくまで推測だし。
単なる丼勘定
>>67 相手は「何も知らない」って言ってるんだぜ?
あの質問から読み取れる情報は「日本語は理解できている」程度なんだぜ?
75 :
デフォルトの名無しさん:2007/03/06(火) 15:19:03
>>67 お前の解答って「作る時間」じゃねーの?w
質問は「作れるようになる時間」だぞ。
『質問に答えればいいのに』答えられてないじゃんwwwww
77 :
デフォルトの名無しさん:2007/03/06(火) 15:23:37
何この自作自演連レス
>>67 あれてるけどさんくす。
環境は整いました。
アップダウンは昔HP作ってたからたぶん問題なし。
が、プログラム自体に戸惑って止まってます。
BASICはやったことあったけど、javaとは全然違うね。難しい。
1.4対応の本は虎対応本に買い換えたほうがいいの?
使えなくなるわけではないが、別途Tiger(つーかいまはその次のMustangが最新)
の知識を得る必要はある。
82 :
デフォルトの名無しさん:2007/03/06(火) 16:13:11
コンパイルはでける。
実行すると、下記の表示される↓
[Fatal Error]:1:5: Invalid byte 1 of 1-byte UTF-8 sequece.
実行ソースは、やさしげなJava活用編、XML文書をDOMによって読み書きする(p291)です。
JOptionPane.showInputDialogのダイアログに出てくるテキストフィールドに、
初期状態から文字を表示させておくことはできないのでしょうか?
>>82 いきなりなんの話だ?
XML中に表明しているエンコーディングと実際のエンコーディングが
食い違ってるんじゃないの?
>>83 初期値を指定できるshowInputDialogを使う。
1.4以降なら3つあるはず。
86 :
デフォルトの名無しさん:2007/03/06(火) 16:40:28
>85
〜Dialog("Your Name?","65")
88 :
デフォルトの名無しさん:2007/03/06(火) 17:06:44
>82は解決しませんでした。
諦めました、スルーして下さい。
>>76 質問者本人か?
質問する前に日本語を勉強しようや。
さもなければ、半島に帰りな
>>79 また自演だ。コテハンぴゅあとかいうドトネト厨の荒らしだろお前w
>>88 諦めるもなにも読んだまんまだが?
まずはxmlの仕様を勉強しろ
>>84 正確には文字コードが指定されてなかったんでパーサがサポートするデフォルトの文字コードで読みに行ったらテキストのエンコードがUTF-8じゃなかったから仕様に従って致命的なエラー扱いにしたんだな。
何も考えてない奴が一番初めにコケるテンプレ嫁以前の問題だな。ググれば幾らでも出てくる。
>>82 バイナリエディタで開いて1byte目にBOMついてないか確認しろ。
93 :
デフォルトの名無しさん:2007/03/06(火) 21:14:39
javaファイル、xmlファイル、どっちがBOM付きでどっちがUTF-8?
mustangからBOM付きUTF-8扱えるようになってたような。
javaファイル
→BOM付きshift_jis
xmlファイル
→BOM無しshift_jis
ですよね?よね?
BOMってのはUTF-16の話だ。
98 :
デフォルトの名無しさん:2007/03/06(火) 23:01:15
原因がわかりまちた。
xmlファイルの文頭にこれ→<!--注釈-->をつけたことが原因でしたぁ〜ん
(:D)| ̄|_ ごめんなご
99 :
デフォルトの名無しさん:2007/03/06(火) 23:45:51
ソケットのストリームにおいて、コネクションを維持しながら
文字ストリームで通信した後にオブジェクトストリームで通信をしたいのですが、
文字ストリームのcloseメソッドの呼び出しって行う必要はあるのでしょうか?
100 :
デフォルトの名無しさん:2007/03/06(火) 23:50:43
らくしてかれいにスレッド99コメント99げっとかしらかしら〜
(:D)| ̄|_
101 :
99:2007/03/07(水) 00:16:57
それは気がつかなんだ。
(:D)| ̄|_ ごめんなご
102 :
48:2007/03/07(水) 01:50:52
すれ違いだったんだろうか…
ここまで見事にスルーされるとは思ってなかったぜ。
104 :
デフォルトの名無しさん:2007/03/07(水) 03:42:07
StreamTokenizerで
自然対数表示で書かれたdouble値を読み込むことってできないでしょうか?
例えば、2.52224e-005という文字列を読み込んだときに
0.00025224 と認識させたいのですが、
double a = st.nval;
とすると、a=2.52224となってしまいます。
107 :
104:2007/03/07(水) 04:00:20
>自然対数表示で書かれたdouble値を読み込むことってできないでしょうか?
自然対数表示じゃなくて、指数表示の間違いでした
(:D)| ̄|_
メインOSとデータをフォーマットしてしまったぜ!
イェィ( ̄ー ̄)b
>>105 ??GUIだから誘導されてるんじゃ・・・
112 :
104:2007/03/07(水) 05:25:00
なんだよ1日たってみたら自演扱いかよ。
しかもわけわからんコテ扱い。
初めてこの板来てこれだしな。
プログラマってのはこんなにレベル低いのか?
それともアホがここにすみついてんのか?
自分が馬鹿なのを認識できないクズが一匹いますね
116 :
デフォルトの名無しさん:2007/03/07(水) 12:25:35
入力ファイルから値を受け取りそれぞれのクラスで処理してその結果を
出力ファイルにだすっていうプログラムを作りたいんですけど
入力ファイルはどういうふううに作成すればいいのでしょうか?
メモ帳からではないですよね?
>>113 ん、母体が大きくなるとアホも居ますわ。すまんこやけどスルーしたってください。
>>117 > 入力ファイルから値を受け取りそれぞれのクラスで処理して
の部分が曖昧なのでなんともいえない。
メモ帳でも作れるかもしんないし、作れないかもしれない。
>>117 入力ファイルがテキストファイルならメモ帳で作っても問題ないんじゃない?
というか、やりたいことに対して、その意味が自分で分かってないってことは
・・・・宿題?
宿題が分からない場合は
1.友人に相談
2.教師に相談
3.宿題スレで相談
こんな感じでリアルをもう少し活用してみましょう。
レス、ありがとうございます。
すみません言葉たらずでした…
レコード形式?みたいにデータを入力していってその
値を受け取るって形にしたいのですがこういうのは
メモ帳で作れます?
レコード形式って?
>>121 作れるかどうかメモ帳起動してみればいいんじゃないのかな?
Javaを用いて、既存のファイルやフォルダのコピー、移動を行いたいのですが、
どのような方法がありますか?
Fileクラスにロードしたファイルを、renameTo()メソッドで移動をしてみたのですが、
ディレクトリをまたいだり、ルートフォルダが異なったりするとうまくいきません。
API仕様書には、環境に大きく依存すると書いてあり、確かにそのような気配がします。
(ちなみに、環境はWindowsXPです。)
Runtime.exec()や、ProcessBuilderを用いてバッチ処理のような形で実現させるしかないのでしょうか?
あるいは、java.ioパッケージを駆使するしかないのでしょうか?
その場合は、どのクラスを使うと便利か、示唆していただけないでしょうか。
Jakarta Commons IOあたりにあるかとも思ったが、ないね。
127 :
デフォルトの名無しさん:2007/03/07(水) 17:53:12
Swing関係のAPIに書かれてる
「警告: このクラスの直列化されたオブジェクトは、今後のSwing リリースと・・・略・・・XMLEncoderを参照してください。 」
の意味がよく分かっていないのですが
「XMLで書け」って意味でしょうか?
>>XMLEncoderを参照してください
とりあえず嫁。なぜ読まん?
129 :
デフォルトの名無しさん:2007/03/07(水) 18:14:28
>>128 既に何度も読んだ。マジで意味が分からん・・・。
シリアライズしてもいいけど、Serializableを使うとバイナリ互換問題が
ついて回るので、RMIみたいな短期の場合にのみ使ってくれ。保存して
おいて別バージョンのSwingで読めなくてもしらないよ。そういう用途に
はXMLEncoder/Decoderを使ってくれ。
131 :
デフォルトの名無しさん:2007/03/07(水) 18:26:48
各環境に合わせてコンパイルし直せ
さもなくばXMLEncoder使え
って事であってます?
ちゃうちゃう
シリアライズしたものをファイルとかに保存して、それ読み込んで使ったりすると
JREのバージョンが変わったときに読めなくなる/使えなくなるよってこと。
>>131 うーん、そうじゃなくて、他のバージョンのJVM上にオブジェクトの
シリアライズイメージを送ったとき、問題出るかもしれんよ、ということ。
コンパイルし直ししても、
JDK6の javax.swing.Hogehoge
をJDK8 のJVM上に送ったとき、そこでインスタンスが復元出来ないかもしれないってこと。
具体的には、そのクラスの serialVersionUID が将来変えられる可能性があるということかな。
134 :
デフォルトの名無しさん:2007/03/07(水) 18:34:56
>>132 お手数掛けました。
ありがとうございました。
>>126 あるだろう。コピーくらいなら。
Runtimeなんていらない。
java.ioだけでどうにかできるはず。
根性いるかも知れないけど。
まずFileクラスでフォルダを指定して、
フォルダの中をdir()で再帰的に調べて記憶しておく。
つぎに移動やコピー。
ここでは、移動(コピー)先フォルダを指定したら。
移動(コピー)先フォルダ名のパス文字列をつかってFileクラスでディレクトリ作成。
あとは同じディレクトリにファイルやサブディレクトリなどを再帰的にコピー。
>>129 SerializableがXMLEncoderに変わっただけ。
つうかググれ。
>>135 ファイルの中身だけコピーするならなんとかなると思うけど。
属性とか所有者とか、シンボリックリンクではコピー先にシンボリックリンクを作るとか、
そーゆー事まで考え出すと java.io だけじゃ無理のような。
>>140 /System/Library/Frameworks/JavaVM.framework/Versions/バージョン/
Home/docs/
>>141 /System/Library/Frameworks/JavaVM.framework/Versions/バージョン/
Home/
まではあるんですが、docsフォルダがないです。。。
ああ、ADCからダウンロードしないとないかも。
ActionListener等ってFrameとかにimplementsして使うのが普通ですか?
この方法だと自分のやりたい事がどうもスッキリとできないんです
オセロや将棋のプログラムを作りたいのですが、どのプログラム言語が適しているのか教えてください。
プログラムの知識は、どの言語でも使うif文とかfor文とかを最近覚えた程度の全くの初心者です。
数学は独学だけど大学程度の数学なら分かるつもりです。論文や専門書もかなり読みました。
アルゴリズムとか超興味あります。
しかし何から手をつければ良いのか検討が付かないのアドバイスをください。
ちなみに学生なのでPCを買うお金が無いので学校の5〜10年ぐらい昔の古いPCが開発環境です。
オセロや将棋程度ならなんでもOK。
強いて言えば、VBがユーザインタフェースを作りやすいけど、開発環境にお金がかかる。
Javaなら無料だけど古いPCでは厳しいか。
lisp
>>145 - 複数箇所で使い回すならクラス(場合によってはメンバークラス)。
- その場限りなら匿名クラス。
にしている。
150 :
145:2007/03/08(木) 00:22:34
>>149 具体的に言えば、
Aボタンを押したらBテキストフィールドから値を受け取り
Cテキストフィールドを更新するといった処理を複数作る
という事をしたいんですが、この場合はメンバクラスとして作るのがスマートですかね?
おそらく匿名クラスや普通のクラスではややこしい書き方をしないと出来ないと思うので
>>150 フレームのメンバーになっているボタンやテキストへのアクセスが出来た
ほうが便利だろうから、メンバークラスがよいように見える。
152 :
145:2007/03/08(木) 00:40:31
>>149,151
レスありがとうございます
その辺りのスコープの問題はメンバクラスにする事で何とかするのが普通なんですね
ボタンやラベルを一つのパネルに纏めてしまって、そのパネルもメンバクラスに・・・
なんてすればさらにコードが読みやすくできるのかなぁ
>>138 パーミッションだけならJavaでもできる。
他は・・・
Runtimeとかかねえ
Jakarta Commons VFSでにたようなことできなかったかな・・・
>>111 よく読め。
GUIの話題なんて一言も振ってない。
その通り
キーイベントやウィンドウのリサイズが利かないって話題なんだからCUI関係だよ
GUIと間違えちゃいかん
APIリファレンスって印刷して使うものなの?
ものすごい量になる悪寒
>>157 お前の想定している状況がイマイチ分からん。
シリアライズの話だけどそもそもアプリケーションプログラマがSwingコンポーネントをシリアライズするってどういう場合?
元々シリアライズってファイルシステムなんかに永続的にオブジェクトの状態を保存する目的のものじゃないでしょ?
ネットワーク超えてたれ流すためでしょ?
シリアライズを永続的な保存目的に使いだしたからXMLEncoder/XMLDecoderが出てきたの?
永続的な目的云々もそうだが、ことさらSwingのAPIにだけシリアライズに
よるバージョン問題のことが書いてある理由も謎だ。
160 :
125:2007/03/08(木) 08:04:27
>>126 >>135 >>153 返答ありがとうございます。
手間が掛かりそうなので、簡単に実現できそうなRubyに乗り換えることにしました。
Swingが使えないのが残念ですが。
ちなみに作ろうとしていたのはエロ画像の自動整理プログラムでした。
161 :
デフォルトの名無しさん:2007/03/08(木) 10:01:01
ひとつのつながったテキストを区切って別々のページに保存したいときって
どうすればいいですか?
>>153 6.0 のパーミッション操作も全部じゃないよ。
外部ライブラリ使うなら、JConfig 使うとかした方が楽かも。
>>161 「別々のページに保存」ってのが具体的に何したいのかわからん。
164 :
デフォルトの名無しさん:2007/03/08(木) 10:10:33
えと、100行のテキストがあったとして、10行ずつ区切って
別のファイルに保存ってことです。
言ってる事をそのままコードにするだけだからどこがどう出来てないのか情報がないと教えようがない
167 :
デフォルトの名無しさん:2007/03/08(木) 10:55:36
今クローラーってのを作る課題なんですけど、リンク先をページから
拾ってきて、ページごとに保存しなくちゃいけないんです。
で、リンク先抜き出してソース落とすとこまではできたんですけど、
全部つながってひとつのファイルに保存されちゃうんで、それを
区切って保存したいってことです。
>>167 > 全部つながってひとつのファイルに保存されちゃうんで
……。つなげなければ良いんじゃね?
何でつながるのかわかってないんじゃね?
171 :
145:2007/03/08(木) 12:33:17
商品番号、日付、単価、数量
0001,20070308,1200,50
とテキストファイルに記入。
日付の値は日付の処理を行うメソッドに渡し、単価と数量の値は
計算する処理を行うメソッドに渡す。
ということをしたいのですが可能でしょうか?
可能ならばやり方を教えていただきたいです。
>>167 そもそもなんで繋がってんのか分からんがクローラー作るならWWW Wanderer(Wandex),
Aliweb, WebCrawlerを調べてみな?
まあ、見つけられたらの話だが・・・国内鯖で見つからんなら
ttp://en.wikipedia.org/wiki/ で調べりゃあるから、ちゃんと探せば技術文書も論文も化石が埋まってるから。(但し殆どがwwwの歴史の論文だけど)
AliwebとWebCrawlerは存命の筈だけど
#あと鯖に迷惑だから素人にそんなもん作らせるなと糞講師に言っとけ!(-Α-")
>>172 屑仕様な宿題は出しても不可能な仕様の宿題を出す訳ないでしょ?
宿題スレのテンプレ持ってお引っ越ししましょうね?
2chに宿題訊きにくるような奴と将来一緒に仕事したくないなあ
>>168 そして再帰的にやって
相互リンクで永久ループにハマってあぼーん
>>176 たんと礼儀とルールと一般常識をわきまえて聞くなら良いけど
質問に答えてくれないと逆ギレするようなやつとは一緒に仕事したくないよな〜
>>177 基底条件ってもんくらい分かってるだろ?
でなきゃループ内で再帰やったとき止まらんw
1つのjavaファイルに、複数の public class を記述すると、
コンパイルしたときに、$付きの class ファイルが生成されます。
こんな書き方ありなんでしょうか?
>>180 あり。
> 1つのjavaファイルに、複数の public class を記述すると、
入れ子になったクラスなら $ とかがつくし、
トップレベルに public なクラスが複数あったら
コンパイルエラーにしないと言語仕様に反する。
>複数の public class
コンパイラ通るのか!?
185 :
デフォルトの名無しさん:2007/03/08(木) 21:10:26
javax.servlet.http.HttpServletRequest#getPathInfo()
javaで英単語教材を作ってます。
今は、ボタンを押すごとに
//空所補充問題文
The rocket launch had to be ( ) because of unexpected bad weather.
//空所に入る選択肢
・aborted
・allotted
・ascribed
・accumulated
といった感じで、50個ぐらいある問題文と選択肢のセットをテキストファイルから画面に
readLine()で表示させているのですが、今の方法だとテキストファイルに並んでいる
順番でしか表示されません。やりたいことは次のとおりです。
1.この問題文と選択肢のセットをランダムな順番で表示させたい。
2.選択肢も、常に同じ4つの単語ではなくランダムな組み合わせで表示させたい。
ちなみに今は問題文と選択肢のテキストを別々のファイルに保存しているのですが
これも問題ありでしょうか?よろしくお願いします。
import java.io.*;
import java.util.*;
public class EnglishTest1 {
public static void main(String[] args) throws IOException {
String dataBody = "The rocket launch had to be ( ) because of unexpected bad weather.;aborted;allotted;ascribed;accumulated;other word1;other word2\n"
+ "The missile launch had to be ( ) because of unexpected bad weather.;aborted;allotted;ascribed;accumulated;other word1;other word2\n"
+ "The Vista launch had to be ( ) because of unexpected bad weather.;aborted;allotted;ascribed;accumulated;other word1;other word2\n";
ArrayList<Question> questions = new ArrayList<Question>();
BufferedReader r = new BufferedReader(new StringReader(dataBody));
try {
for (String line; (line = r.readLine()) != null;) {
ArrayList<String> data = new ArrayList<String>(Arrays.asList(line.split(";")));
Question q = new Question();
q.questionText = data.remove(0);
q.choices = data;
q.correctAnswerNumber = 0;
questions.add(q);
}
} finally {
r.close();
}
Random random = new Random();
while (questions.size() > 0) {
Question q = questions.remove(random.nextInt(questions.size()));
System.out.println(q.questionText);
}
}
}
class Question { String questionText; ArrayList<String> choices; int correctAnswerNumber; }
あとは自分で。
すまん Collections.shuffle(List) の方がいいな
import java.io.*;
import java.util.*;
public class EnglishTest2 {
public static void main(String[] args) throws IOException {
String dataBody = "The rocket launch had to be ( ) because of unexpected bad weather.;aborted;allotted;ascribed;accumulated;other word1;other word2\n"
+ "The missile launch had to be ( ) because of unexpected bad weather.;aborted;allotted;ascribed;accumulated;other word1;other word2\n"
+ "The Vista launch had to be ( ) because of unexpected bad weather.;aborted;allotted;ascribed;accumulated;other word1;other word2\n";
ArrayList<Question> questions = new ArrayList<Question>();
BufferedReader r = new BufferedReader(new StringReader(dataBody));
try {
for (String line; (line = r.readLine()) != null;) {
ArrayList<String> data = new ArrayList<String>(Arrays.asList(line.split(";")));
Question q = new Question(data.remove(0), data, 0);
questions.add(q);
}
} finally {
r.close();
}
Collections.shuffle(questions);
for (Question q : questions) {
System.out.println(q.questionText);
for (String choice : q.choices) System.out.println(" - " + choice);
}
}
}
class Question {
final String questionText; final List<String> choices; final int correctAnswerNumber;
public Question (String questionText, List<String> choices, int correctAnswerNumber) {
this.questionText = questionText; this.choices = Collections.unmodifiableList(choices); this.correctAnswerNumber = correctAnswerNumber;
}
}
Generics関係でArrays.sortの質問です。
やじるしのところで警告が出てしまいます。
抑えるにはどうすればいいでしょうかよろしくお願いします。<(_ _)>
ArrayList<Sensyu> al = new ArrayList<Sensyu>();
al.add(new Sensyu("tako", 20 ));// ArrayListにデータを追加
al.add(new Sensyu("yuura", 30 ));
al.add(new Sensyu("ponko", 53 ));
Object[] oa = al.toArray();// 配列に変換
DataComparator dcom = new DataComparator();
Arrays.sort( oa, dcom); //←‥ここで警告:[unchecked] 無検査変換が出てしまいます。
---- ---- ---- -----
public Sensyu(String namaeMoji, int ten ){
namae = namaeMoji;
tokuten = ten ;
}
---- ---- ---- -----
public class DataComparator implements java.util.Comparator{
public int compare(Object o1, Object o2){
return ((Sensyu)o2).tokuten - ((Sensyu)o1).tokuten;
}
}
>>191 public class DataComparator implements java.util.Comparator<Sensyu> {
>>192さんありがとうございます。
でもまだうまくいきません‥
public class DataComparator implements java.util.Comparator<Sensyu> {
になおして中身を
public int compare(HairetuArraysTest.Sensyu o1, HairetuArraysTest.Sensyu o2) {
return o2.tokuten - o1.tokuten;
}
---- ---- ---- -----
Arrays.sort( oa, dcom);
の部分を ↓
Arrays.sort( (Sensyu[]) oa, dcom); //この行番号でエラーメッセージが出てしまう。
するとコンパイル時に何の警告も出ません。しかし、
実行すると
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LHairetuArraysTest$Sensyu;
というメッセージが出てしまうのですが、どうしましょ?(o・・o)/~
toArray で Object[] に変換してるから。
Sensy[] に変換するよう引数をとる toArray の方を使いましょう。
195 :
193:2007/03/09(金) 03:05:33
>>194さんありがとう
toArray
public <T> T[] toArray(T[] a)
のことですね、
Sensyu[] oa = al.toArray( ここがわかりませんどうしましょドジですいません );
>>195 new Sensyu[0]でも何でもいいからSensyu[]型を放り込んでおけば、
もしサイズが足りなければ新たに確保してくれる。
APIリファレンスのtoArrayの項目をきちんと読むんだ。
197 :
193:2007/03/09(金) 04:29:14
>>196さんありがとうございます。
でっ、できました。ヽ(^o^)丿
難解だけどAPIリファレンス出来るだけ読むようにします。
つきあってくれてありがとう‥
198 :
デフォルトの名無しさん:2007/03/09(金) 04:48:13
199 :
デフォルトの名無しさん:2007/03/09(金) 10:26:18
どなたかご存知でしたら教えてください。
JavaでPDFを作成するiTEXTにて
テーブルを作成するときに途中でページからはみ出そうなときは
次ページに改ページしてくれる方法ってないでしょうか?
よろしくおねがいします。
>>198 アプレットは単音鳴らすか鳴らせ続けるかだからループさせつつ任意のタイミング止めて再開とかしたいなら適当なサウンドエンジン使った方が良いよ。
>>199 どっかで制御方法見た気がするが・・・javadocくらい叩き込んだ?
201 :
デフォルトの名無しさん:2007/03/09(金) 11:30:17
202 :
デフォルトの名無しさん:2007/03/09(金) 11:36:18
>200
ありがとうございます。
iTEXTのJAVAdoc見つかりました。
理解できるか分かりませんがちょっと読んでみようと思います。
203 :
デフォルトの名無しさん:2007/03/09(金) 11:39:01
table.tableFitsPage
きっとコレジャン!
200サンクス!
>>191 いろいろ解決方法はあるみたいだが、
al = Collections.checkedList(al, Sensyu.class);
を使いたくなってくるなあ。これならObjectなど他の型に渡しても
警告が出なくなる。
@SupressWarning("unchecked")でもいいけどさ
205 :
デフォルトの名無しさん:2007/03/09(金) 14:54:12
>>205 Accept License Agreement してから
Java(TM) SE Development Kit Documentation 6, Japanese 選べば?
英語版欲しいなら、English の方選んで。
英語読めない奴が英語版欲しいと思えんが、jdk6のl10n終わって良かったな。
相変わらず変な訳だが
そういやなんでJavaって日本語版あるんだろ?
むしろ英語マニュアルのが読みやすい俺ガイル
>>208 i10n って、日本語訳終わっただけで中国語訳とかまだじゃない?
>>209 1. 市場が大きい。
2. 訳の需要が大きい。
日本語は造語力が大きいので高等教育で用いられる用語も訳すことが出来、
結果として日本語しかできなくても高等教育が受けられる。
アジアの準先進国の言語などでそれほど造語力が高くない場合、そこまで
できないので、英語で高等教育を行わざるを得なくなり、結果として高等
教育を受けた人はみな英語が出来るので、英語で困らなくなってしまう。
という意見を聞いたことがある。
日本だろうと曲がりなりにも高等教育を受けたら普通英語ぐらいできると思うのだが
もし高等教育の意味が文字通り高卒の事だったのなら謝る
ただ単にi18nの一環でかつ日本人は母国語版を欲しがる人種ってだけじゃね?
技術文書の翻訳版を欲しがるのは日本人くらいだし
216 :
125:2007/03/09(金) 22:32:27
Rubyでは簡単に実現できたので、再びJavaに戻ってきて作成しています。
ファイルのコピー、移動はFileクラスとFileInputStream,FileOutputStreamあたりを使うことで、簡単に実現できました。
ところでお聞きしたいのですが、InputStreamのread( byte[] buffer )、OutputStreamのwrite( byte[] buffer )で使用する
配列サイズというのは、どれくらいが適しているのでしょうか?
バッファーが大きければ処理が早く済むがメモリの消費量が大きくなる、ということはなんとなくわかるのですが、
適量のバッファーサイズの見当がつきません。
現在主流となっているマシンスペックだと、適量のバッファーサイズとはどれくらいなのでしょうか?
217 :
187:2007/03/09(金) 22:37:51
>>190 返事が遅くなってしまってすみません。
提示していただいたコードを参考にやってみます。
ありがとうございました。
>>213 英語で小説読もうとして三日であきらめたことを思い出した
資料としてなら読み進めるのは大して苦じゃないが大量になるとかなりウザい
メインで英語使うなんて信じられん
>>216 セオリーは無いと思う。
俺はなんとなく 4kB 〜 16kB あたり取ってるが。
>>218 小説と技術文書は全然違うでしょ。
語彙空間がまるで違うよ。
俺自分の専攻の論文ならすらすら読めるけど、
一般向けの小説(ハリウッド映画の原作)は
3ページで挫折しかけてるw
jarファイルをダブルクリックしても反応してくれません。
(Test.classファイル)
class Test{
public static void main(String[] args){
System.out.println("aaa");
}
}
これを
jar cf Test.jar Test.class でjarファイル生成
jar xf Test.jar でjarを解凍
マニフェストファイルにMain-Class: Testを追加して保存
jar cfm Test.jar META-INF\MANIFEST.MF Test.class で再びjarに圧縮
こいつをダブルクリックしてもコマンドプロンプトが出てきてくれないです。
エラーメッセージも出ず無反応です。
ただし、コマンドプロンプトから
java -jar Test.jar と打ち込むと
aaa と表示されます。
どなたかお助けください。
関連付けの問題か、あるいはコマンドプロンプトが一瞬出ているのに気付かないかのどっちか
3つの整数をキーボード入力させてそこから計算させるプログラムを作っているのですが、
入力させた文字列の中に英字または小数がある場合、「○個目には整数を入力してください」という
メッセージを表示させたいのですが、Integer.parseIntでの例外をNumberFormatException
で拾うという手段を取ってみたのですが、この場合何個目の入力が整数でないのかを個別に
表示することが出来ません。どの入力が間違っていても同一のメッセージ表示しか出来ません。
この方法以外に入力された文字列の中で整数以外の入力を判別して、どの入力がエラーなのかを知らせる方法はありますか?
ちとその部分のコード書いてみ?
>>221 Windowsだとjavaじゃなくjavawに関連づけられてるかもしれない。
>>222 >>225 ありがとうございます。今見てみましたが、javawなってました。
javaにかえて再びwクリックしてみると一瞬だけコマンドプロンプトが表示されましたが、すぐに消えてしまいました。
これはこういうものなのでしょうか?コマンドプロンプトの画面をずっと表示させておくことは出来ますか?
BufferReaderか何か使ってキーボード入力待ちにするのが一番お手軽w
なるほど。勉強になりました。ありがとうございました。
空の文字列 "" と、null の違いがよくわからない。。。
>>230 空の文字列は、長さは0だけど文字列。つまり、Stringのオブジェクトが存在する。
nullは、何もないということ、オブジェクトがないという状態を表す。
>>221 パッケージ作っといて修飾名でクラス指定してないって訳じゃなさそうだね。
winの関連づけはjavawだからそれはいじらないでコマンドプロンプトから打て。
CUIプログラムをクリックしても動きません!って発想が既におかしい。プロンプト立ち上げてからならjavaが終了してもプロンプトが残ってて消えないはず。
OSのしくみとかそこら辺を分かってないだけだからまずそこら辺を勉強した方が良い。
てか独学?専門生?
>>230 MS VMだと同義w
nullはObject派生型なんだけど値は何にも関連付けられてない。
空文字列は"\u000000"になるんだっけ?
他言語やってて言語によって定義が違うから掴めないの?
ただ単にjavaのnullが分かってない?
後者ならjavaの本見ればいい。
>>232 > MS VMだと同義w
そんな話は聞いた事がない。
> nullはObject派生型なんだけど値は何にも関連付けられてない。
Java では null は null型だよ。空型とか訳される事もあるけど。
Object からは派生してない特別な型。
> 空文字列は"\u000000"になるんだっけ?
は?
薀蓄語りたいなら、ちゃんと言語仕様ぐらい見てからやれ。
>>232 >nullはObject派生型なんだけど値は何にも関連付けられてない。
null は null 型のただ一つの値。
Object 派生型でもないし値が関連付けられていないわけでもない。
>>232 何か自分の知識を語りたいのは分かるんだが
その表現をする言語力が伴っていないようで少し哀れ
相手の理解力を超えた表現しか出来てないよ・・・・
236 :
223:2007/03/10(土) 06:45:41
>>224 遅いレスで申し訳ありません。
try{
timeAtBat = Integer.parseInt(str1);
sacrifice = Integer.parseInt(str2);
hit = Integer.parseInt(str3);
average = (double)hit / (timeAtBat - sacrifice);
NumberFormat formatter = NumberFormat.getNumberInstance();
formatter.setMaximumFractionDigits(3);
System.out.println("打率は" + formatter.format(average) + "です。");
}
catch (NumberFormatException e) {
System.out.println("数は0〜1000の整数で入力ください");
}
str1,2,3はBufferedReaderを使って読み込んでいます。
System.out.println("数は0〜1000の整数で入力ください");の部分を
打席数、安打数、犠打数のどの入力が整数でないのかを"〜数は0〜1000の整数で入力ください"
でそれぞれメッセージを表示させたいのです。
助言をいただけたら幸いです。
>>236 parseInt を3つまとめてtry-catchするんじゃなくて、
ひとつづつtry-catchすればわかるじゃん。
あとはカウンタ変数でも作って、今何番目のparseIntやってるかわかるようにするとか。
238 :
223:2007/03/10(土) 09:06:27
>>237 ひとつずつキャッチする手はもうやってみたのですが、やっぱりそれが一番早いですかね?
カウンタ変数のほうをチャレンジしてみたいと思います。
ありがとうございました!
239 :
223:2007/03/10(土) 09:17:34
>>237 忘れてました。ひとつずつtryのすぐあとでcatchしていくと例外は拾えるんですけど、
処理をそこで終われないですよね?その後にある計算式は例外でも実行されてしまって
エラーになってしまいました。
もし、ひとつずつtry-catchしていくのであれば、どこに計算式などを入れるべきですか?
>処理をそこで終われないですよね?
return;
>>239 try-catchだと記述が長ったらしくなるから、parseをラップするメソッドを作る手もある。
引数は文字列、戻り値はInteger但しparse失敗時はnull。
そのメソッドの中でtry-catchを使う。
.NETにあるTryPaseの亜流みたいなもん。
HashMapを使って文字列と数字を扱いたいのですが
HashMap<String, int>はintがObjectじゃないからできないんでしょうか?
この場合HashMap<String, Integer>とするべきですか?
244 :
221:2007/03/10(土) 10:59:49
>>232 スクールに通ってましたが素人同然です('A`)
関連付けはjavawを変更できないとすると、
結局
>>221のプログラムはwクリックでは実行出来ないということでしょうか?
誰かにこのプログラムを使ってもらう時に
「コマンドプロンプトからjava -jar Test.jarって入力してね」
と言うのはちと苦しいです。
>>243 プリミティブ型は入れられないのでそうする必要がある。
使うときはautoboxing/unboxingが効くので直接プリミティブを使う
コードを書いてもOK。コンパイラがこっそりIntegerに入れたり出したり
してくれる。
@echo OFF
java -jar Test.jar
なバッチを一緒に置いておいてもダメだっけか?
最近WindowsでJava使ってないから忘れたわ。
>>245 ありがとうございます
色々調べたり実験したりでちょっと遅れてしましました
宣言だけIntegerにすれば、他ではintとして扱っても問題ないんですね
>>244 ダブルクリックみたいなGUIど真ん中なことやりたかったら、普通はswingとか使う。
コマンドプロンプトがどうしても必要な場合は
>>246の言うとおりバッチでラップすればおk。
>>219 ありがとうございます。
調べてみたら、Javaの上位IOクラスは内部バッファとして8192byteつかっていることがわかりました。
その値に統一して使いたいと思います。
バッチファイル使うんなら、pause で入力待ちすればOKか。
251 :
221:2007/03/10(土) 15:47:13
バッチファイルというのは初耳でした。
>>246をTest.jarのあるフォルダにa.batとして保存してこれをwクリックで無事実行できました!
皆さんに感謝します。
252 :
230:2007/03/10(土) 17:44:56
なるほど、ヌル文字列とヌルポインタの関係みたいなもんですね(`・ω・´)
遅レスですが、ありがとうございました。
Cのようなポインタを使用するプログラムだと常識として覚えてるものだが、
JAVAのようなオブジェクト指向だとポインタ意識しなくていいから知らない人が増えてきたな。
便利になると共に起こる、知識不足の弊害だな。
>>253 >JAVAのようなオブジェクト指向だとポインタ意識しなくていいから
んなアホな
>>254 ポインタ操作って普通に使わないでしょう。
ポインタ演算とか冗長な書き方を許容してないだけでポインタを使ってることを意識しないわけじゃないだろ
意識しなくていいというと語弊があるが、
実際に意識していない初心者が増えてきたってことだと思う。
private int id;
public int getId(){return id;}
public void showId(){
System.out.println("idは" + ● + "です。");
}
この場合、●に入れるのはidかgetId()のどっちがいいんかな。
好みの問題でおk?
>>216 つうか、他のIOクラスでデコレートすれば
サイズなんて気にしなくても良いはずだが。
>>246 つうか、マニフェストとJava Web Start使えよ
>>261 おなじ暮らすないならidでもいいとは思うけど。
>>261 うーん、悩ましい問題だなぁ…好みというか、目的による?
けど、まぁ、getId()のほうが良いと思う。
例えばそのクラスのサブクラスでgetId()をオーバーライドして
getId() { return "00" + id; }
とかしたときに・・・
>>264を風呂入る前に訂正
まず、アンカーは
>>258に。
あと、
×getId() { return "00" + id; }
○getId() { return "00" + super.getId(); }
>>265 …駄目だ俺(笑
getId()は int なのな。
まぁ意図は汲み取ってください(汗
抽象化はその部分における汎用性・再利用性を増すが
同時に複雑さが増し、保守が難しくなる。
また、よく考えられていない抽象化は、
結局それを使う場合に1から考え直す必要があり、
無駄な労力になる。むしろ、誤解を生む弊害すらある。
そして、「よく考える」とは言っても難しく、的外れになることが多く、
無駄な抽象化がプログラム中に散乱することになりやすい。
そこで、アジャイル的には、まず単純に作って、
例えば顧客に叩いてもらって、抽象化が必要なところを早期に発見する。
(テスト駆動なら、まずテストに叩かれるだろう)
その観点から見ると、
必要と分かるときが来るまで getId() よりも id を使うのがいい。
外から見ることを基準に考えちゃ駄目なのかな。
getId で取得した値と showId で表示した値は、大抵の場合で一致しなければおかしいから、
直感的に考えた場合は id より getId のほうが適切だろうと思う。たとえ getId が final だったとしてもね。
追記:「外から見る」ってのは、id が private であって外から見れないことも含めてる。
外から見た場合、id を使うと 『何かよく分からないけど ID の内部表現を showId が表示している』 ってなって分かり難いんじゃないかと。
>>268-269 同意
使う側の視点で考えるのがいいと思う
idという情報をを操作したい人のためのものなのだからその人のことを
考えなければ、悪く言えば独りよがりな実装になってしまうと思う
俺の経験から言うと、極力生のフィールドは使うべきではない。
ボトルネックになる可能性、どうしても生フィールドでなければできない処理などは
例外的に使用を許可する、くらいの縛りを加えるようにする方が良い。
トラブル対応、仕様変更対応には絶対にこの方針が必要。無いと死ぬ。大規模だとね。
使う場所によってフィールドを直接参照したりgetter経由だったり
まちまちなのは良くない。
モジュール結合度の観点から考える結合度は低い方が独立性が高いため、
データ結合で単一のデータを引数として渡すべき。
iを打てば補完できるのでid。
getterはgetIまで打たないと補完が面倒。
276 :
デフォルトの名無しさん:2007/03/11(日) 12:32:01
30個近くのclassファイルをjarにコンパイルするにはどうすればいいんですか?
>>274 getまで打てば、そのクラスのアクセッサが一覧出来るのでむしろ便利。
フィールド名だとごちゃごちゃしてる。
>>271 んだんだ。
それに、遅延初期化の為にも入れているかな。
private Hogehoge hogehoge;
public Hogehoge getHogehoge(){
if( hogehoge==null ){
hogehoge = new Hogehoge();
}
return hogehoge;
}
(synchronized はどうしたとかややこしい話は取りあえず抜きな、初心者スレだと荒れそうだから)
>>278 フィールドが20個あればgetまで打っても20個出てきてそこから選ばないといけない。
変数名なら頭文字打つだけで絞り込める。
まあ俺はthis.をつけるのでそこまで打つだけでOKのときもあるが。
>>277 j2re1.4.2_13 をDL、インストールしてみたのですがこの後がわかりません
コマンドプロンプトに打ち込んでも
'jar' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
とでてきてしまいます;;
>>280 j2re だと jar 入ってないような。 j2dk か jdk 使え。
>>280 コマンドプロンプトに
java -version
って打ってみ?
フィールドが20個あったらthis打っても20個候補が出るだろうによw
JAVAでもプロパティ導入すればいいのに・・・
わざわざ毎回アクセッサメソッドつくるとフィールド参照からメソッド記述にするのめんどくさい。
>>284 getと3文字打つのが怠いんだろうね。
って、どんだけwwww
まぁ、publicアクセス不要なフィールドにはgetter付けないから
20個フィールドがあってもホントはもっと絞れるんだけどね。
>>285 リファクタリング機能がある開発環境使えば良いじゃん。
>>265 同じクラスないであればthis.idで良いジャマイカ
スーパーなときだけgetId()
>>278 Factory MethodパターンやFlyweightパターンで
改造したくなってくるなあ。
>>284 どういうクラスなんだか。委譲も集約を
ちゃんと使っていれば極力減らすこともできよう
>>292 たとえば携帯電話のスペックをオブジェクトで表現しようとしたら
20なんて軽く超えると思うけど。どうやって削るの?
高さ
幅
厚さ
質量
連続待受時間静止時
連続待受時間移動時
連続通話時間音声通話時
連続通話時間テレビ電話時
液晶サイズメインディスプレイ
液晶サイズサブディスプレイ
液晶最大同時発色数メインディスプレイ
液晶最大同時発色数サブディスプレイ
液晶解像度(ドット数)メインディスプレイ
液晶解像度(ドット数)サブディスプレイ
名前最大登録件数
電話番号最大登録件数
メールアドレス最大登録件数
メール保存容量送信メール
メール保存容量受信メール
iアプリ保存件数
ミュージックプレーヤー
バックグラウンド再生
連続再生
iメロディ・着信メロディ
バーコードリーダー
赤外線通信対応
Bluetooth通信
FOMAプラスエリア対応
携帯電話という込み入ったものをひとつのクラスで完結させようとするという発想が恐ろしい気がする
液晶が別のメーカーのだったら一気に変えないといけないんだよな、そのクラス……
>>294 なんで無理して一つのクラスでやるんだよw
いやいや、例ですよ。車でも住宅でもなんでもいいけど変数が20なんて珍しくない。
>>295の言葉を借りるが、
車でも住宅でもなんでもいいけど込み入ったものをひとつのクラスで完結させようとするという発想が恐ろしい気がする
オブジェクト指向なんだから、きちんと設計してから作らないとね。
まず、デザインパターンを覚えるといいかな。
だー、論点そこじゃねえええ。
1つのクラスですべてを完結させるなんて一度も書いてねえ。
親クラス、子クラスのように抽象化していったって
20以上の変数を持つクラスはありえるってことです。
あったらあったで仕方ないだろ。
おれならまず分けることを考えるが。
そりゃjava.awt.Componentとか持ち出してきたら50個くらい持ってるようなのもあるわ
しかし普通はそんなのはないぞ
よくこんなどーでもいい話題にがんがんレスが付けられるな
あったら、あきらめる。
以上。
どっちみち「エディタで候補を絞るのがメンドイから」なんて理由でクラス設計したらあかん罠w
private int hogehoge;
って書いたら、内部で使うために
private int getHogehoge() {
return hogehoge;
}
て書かなきゃいけないん?
内部なら直にアクセスしろよ
自己カプセルフィールドって考えもある
さすがにそういうあたりは必要なときにリファクタリングすればいいようにおもうなあ
privateなら変更することになっても影響範囲は閉じてるし、
必要になってからメソッドにするでいいよ。
>>294 配列
or
ハイスペック携帯電話のみサポートに切り替えて解決
>>300 『分割し、統治せよ』
『アジャイルソフトウェア開発奥義』にはそう乗っている。
だが、
どうしてもクラスを分割できなければ、
やれることはまだまだある。
ディスプレイのサイズなんぞstaticでやれ。
そんなに苦しいなら配列でやれ。
>>311 そういう機能
とはいわん気がするが。
そういうAPIはありますか、だろ。
機能というとまるで言語仕様のことみたいだ。
その手のAPIは言語仕様とは別だしな
クラスの設計についての本読み始めたところだから結構興味がある。
VCのMFCなんか数十個の関数や変数を含んでいるクラスが普通だから
そこまで分割する必要があるのかどうか、
分割するといいことがあるのか知りたいところ。
ソースファイルの数が増えてリッチな気分が味わえます。
保守性に強くなるとかそんなんだろ
コピペが減るとか
MFCはDocumentViewアーテクチャだからあまり参考にするべきでないけど。
変数や関数の数自体は気にするべきではない。
気にするべきはモジュール結合度と強度、クラス設計で委譲・継承などのデザインパターンといったところを気にするべき。
質問よろしくです。
tiffファイルを操作する簡易エディタを作りたいと思っています。
やりたいこと
・複数のtiffファイルを結合して保存する。
・複数頁のtiffファイルを1ページ毎に分けて保存する。
・画像の上にテキストを挿入する
Java Advanced Imaging(JAI)を使えば簡単に作れますか?
他に便利なAPIがあれば教えてください?
質問です。
Javaのメソッドで、C++でいうところのconstなクラス関数を作りたいのですが、可能なのでしょうか?
つまり、そのメソッドはメンバー変数の書き換えを行なわないということを保証させたいのです。
色々調べてみたところ、Javaにconstはないとのこと。
似たような機能か?と思ってfinalについても調べてみましたが、期待した内容ではありませんでした。
>>322 >finalについても調べてみましたが、期待した内容ではありませんでした。
kwsk
>>323 ・finalとついたメソッドは、オーバーライドされなくなる
・finalとついた変数は、書き換えられることがなくなる(配列の中身などは書き換えられるので注意)
・finalとついたクラスは、継承されなくなる
といった効果のようでした。
322の内容が理解できない人が多くてワロタw
>>325 ああ、なるほど。確かに。
でも、ちょっと別の制限が強くなりすぎますね。
やりたいことは
abstract class IScene
{
abstract void Task();
abstract void Draw();
}
として、これをオーバーライドさせてゲームのシーンを作らせたいのです。
その際、Drawではメンバー変数の書き換えを禁止させたいのです。
staticだと、インスタンス内の変数書き換えは不可能になるが、読み込みも不可能になっちまうか・・・
メンバー変数を、参照は出来るが変更は不可にしたいということなら、
変数はprivateで宣言しておいて、publicもしくはprotectedなアクセサメソッドを
公開しておけばいいんじゃない?
>>330 それ全然『メンバー変数の書き換えが行なわれないこと』が保証できてねーじゃん
継承する側がいくらでも間違いを犯せる
C++でもconst_castしちまえばメンバー変数いじれるけどなw
public interface Const{
public static final 〜
}
じゃダメなの?
>>322 基本的に無理。
標準APIのメソッド呼び出した時に、そのメソッドがインスタンスの状態を変更しない事まで考えるなら。
JSR-308 のサンプルにある @ReadOnly が それっぽいけど、早くてもJDK7にならないと入らない。
自分のクラスのメンバ変数の書き換え禁止だけなら、@Const みたいなアノテーション自作して、
@Const処理するようなAPTまで自作すれば出来なくはないけど……
>>331 なんで?
abstract class IScene
{
private var1;
abstract void Task();
abstract void Draw();
public getVAr1(){
return var1;
}
}
ということだけど。
「Drawではメンバー変数の書き換えを禁止させたいのです」
という要求には答えてると思うけど。
もっとも、Task()メソッドからも書き換えは出来ないけど。
>>332 すいません、
>>328がinterfaceで書くべきものだということは分かるのですが、
それでメンバー変数が書き換えされないことが保証される理由がわかりません。
>>332のfinalは何に対してついているものなのでしょうか?(変数?メソッド?)
>>334 質問者じゃねーけど、やりたいことくらいは推測できる。お前も少しは推測して書いてやれよw
継承元の変数をいじらせたくないって要望じゃねーだろ。
継承先の変数であってもいじらせたくねーんだろ。
337 :
332:2007/03/12(月) 00:33:37
>>335 constというか不変変数って意味で回答したんだけど
どっからでもアクセスできるしあなたが求めてるものとは違うと思う。
俺には難しくてついていけてないw
一応意図したものは↓みたいなもの。
public interface Const{
/** 1ページの表示件数 */
public static final int COUNT_PER_PAGE = 10
/** 全ページに共通のタイトルプレフィックス */
public static final String TITLE_PREFIX = "[HOGEHOGESERVICE]";
}
>>336 そういう意味か?
自分で定義した変数を読み取り専用にするなんて、
C++でもできないだろ。
スーパークラスで管理する状態などを、サブクラスで勝手に
書き換えられるのが嫌なんじゃないのかな。
だから
>>334でいいかと思うのだが。
えっとすいません。情報が交錯しているようなので再度説明します。
public interface IScene
{
void Task();
void Draw();
};
ゲームにおいて、全てのシーンは上を継承することを複数人プロジェクトにおいて義務づけます。
そして、このシーンを適切に毎フレーム呼び出す機構は私が作ります。
TaskとDrawは基本的に交互に呼ばれるのですが、フレームスキップが発生した時Drawの呼び出しが飛ばされる可能性もあるのです。
その際、Drawの中でメンバー変数の書き換えをするようなプログラムをされると、わかりにくいバグに繋がります。
C++の時は
class IScene
{
void Task() = 0;
void Draw()const = 0;
};
で大丈夫だったのですが…。
という相談です。
>>333については今ぐぐりながら理解しようとしているところです…。
>>338 >自分で定義した変数を読み取り専用にするなんて、
>C++でもできないだろ。
できるよハゲw
const関数は何のためにあんだ。
C++のconstメンバ関数が何なのか知らない奴がレスしてるな。
342 :
338:2007/03/12(月) 00:43:38
悪い、別に断言したつもりはなかったんだが。
「C++でもできないだろ」
じゃなくて
「C++で出来たっけ?」だな。
C++はずいぶんやってないんで忘れた。
てか、なんでJavaにはconstがないのか不思議でならない。
キーワードだけは定義されてるって書いてあるけど、なんで削られたん?
C# には const あるけど const 関数は無いな。
>>343 お馬鹿なJavaプログラマにはまともに使いこなすことができないだろうという判断から。
むしろその逆で過剰な安全装置と見なされて削られたって話じゃないの?
C++をメインで使ってる身からすると全然過剰だとは思わないけど。
const関数で呼び出されたら、その中から変数にアクセスする際に
やはり const として宣言されていない関数は呼び出すことができないのかな
コンパイル時に「変数が変更される可能性があります」とエラーが出る
呼び出せたらconstの意味がない
JavaってC#におけるXmlSerializerのようなものは無いんでしょうか?
オブジェクトを丸ごと渡してやればXMLファイルに書き出してくれて、
XMLファイルを丸ごと渡してやればもとのオブジェクトを生成してくれるという
>>349 近いのは java.beans.XMLEncoder と java.beans.XMLDecoder かな?
保存できるのは beans のプロパティだけになっちゃうけど。
351 :
デフォルトの名無しさん:2007/03/12(月) 16:33:01
String s;
if(s = "")
{
}
間違えて上のコードを入力したとき s = "" の部分に「型の不一致: String から boolean には変換できません。」
というエラーメッセージが出てきました。
自分にはどう見ても右辺左辺ともにString型としか思えないのですが、なぜこのようなメッセージが出たのですか?
まず、javaでは比較する場合は==を使う
=だと代入になってしまい、ifの中にはbooleanを入れなきゃいけないのにStringになってしまう
次に、==にしてもお前の期待する動作はしない
java String 比較 でググれ
353 :
デフォルトの名無しさん:2007/03/12(月) 17:03:10
>>352 Stringの比較はequals()メソッドで行うということですね
簡潔でわかりやすいレスありがとうございます
>>353 そっちはどちらかというとこの質問においてはオマケ。
=を比較のつもりで使っているほうが本質的な間違い。
355 :
デフォルトの名無しさん:2007/03/12(月) 17:26:02
>>354 すみません。はじめの時点で言葉足らずでした
比較に = を使ってはいけないのは知っていたのですが、
VBの癖でついやってしまい、エラーが出て、
>>351の疑問が出たので質問させていただきました。
356 :
デフォルトの名無しさん:2007/03/12(月) 17:30:11
Javaでアプリケーションを作成しています。
二重起動を防止する案を考えているのですが
File.createTempFile(String prefix, String suffix)でファイルを生成して
File.deleteOnExit()で削除指定
ファイルの有無で起動中かどうかを判断するという処理にしようかと思ってます。
『もっと良い案があるよ』
『そのやり方だとこういう問題が発生する』
等御意見頂けますでしょうか。
>>356 createTempFile だと、
prefix + "java.io.Fileが勝手に付加する文字列" + suffix って
名前のファイルを作っちゃわない? 二重起動防止にならんと思うけど。
あと、deleteOnExit だと、正常に終了できなかった場合はファイル残ったままになるよ。
もっとも、正常に終了できなかった場合にファイルを削除する方法は
今のところ提供されてないので二重起動の場合はダイアログだして
ユーザが選択できるようにした方が良いかも。v2c がやってるみたいに。
>>355 Java では、 if(式) の式の部分は boolean じゃないとエラーになる。
if(s = "") の 「s = ""」って代入式の型は String なので、
コンパイラに boolean じゃないと怒られただけ。
あらかじめ決めておいたポート番号のソケットをオープンできたら起動、
というのを見かけた。レースコンディションにはならないような気がする。
・異常終了したときの後始末はうまくできるんだろうか。
・ユーザー単位でのみ複数起動を禁止して別ユーザーなら起動を許す、
みたいなのは工夫が必要になるな。
RMI Registry(Activation)やJMXでなんかやれそうな気がしないでもない。
>>357 ありがとうございます。
Preferences+ユーザー選択って感じにしようかな・・・。
>>359 なるほど・・・ソケットは思いつかなかった。
362 :
デフォルトの名無しさん:2007/03/12(月) 20:30:57
synchronizedのブロックの適用が及ばない範囲、及ぶ範囲、そしてその理由について
わかりやすく教えてもらえませんか('A`)
同時に動くスレッド2個ぐらいで、、
HP5箇所ぐらい見たんですがいまいち理解できません
>>357 俺は nio のファイルロックで判定した。
356あてだった・・
HashMapでClass<T>とList<T>を関連付けたいのですがいい方法はありませんか?
>>365 HashMap<Class<T>, List<T>>
>>366 あの……それだとHashMapをnewするときにTになにか入れないといけないけどそういう使い方を意図しているのではなくて。
T.classをキーにしてgetしたらList<T>型のオブジェクトが返ってくるようにしたいんです。
もしくはList型オブジェクトをなんかしてList<T>型にキャストするとか。
>>367 「関連づけたい」という曖昧な言葉を使ったことへの反省はしないのね。
>>368 反省しました
……ってなんて答えりゃいいかわからんそのあてつけみたいなのやめてくれよ……
一回で伝わらなかったら何度か説明する機会くらい与えてくれよ……
人格攻撃して話題そらしたいのか?
無理なら無理でいいよ別の方法考えるから……
>>367 HashMapを継承した新しいクラスを作ればいい。
>>370 Class<T>とTのときはそれでできたんだけど、(内部でHashMap<Class<?>,Object>に委譲して出口でclazz.cast(map.get(clazz))を返すようにした)
List<T>のときはどうやって実装すればいいかわからないんです。
Reflection周りでいろいろ探してはいるんですが……
>>371 public <T> List<T> get(Class<T> c) {
return (List<T>)get(c);
}
間違えた。
return (List<T>)super.get(c);
>>372 いけました。
ここで出る未チェックのキャストはアノテーションで強制的に黙らせる他ないんですよね?
375 :
デフォルトの名無しさん:2007/03/12(月) 23:52:35
switchの条件にlong型が使えないのはなぜなんでしょうか
char,short,int,enumは使えるのに
何か歴史的な理由があったりしますか?
効率?
long は int に暗黙的にキャストできないから。
377 :
365:2007/03/13(火) 00:31:52
ありがとうございました。
何とかうまくいきそうです!
378 :
デフォルトの名無しさん:2007/03/13(火) 03:06:04
//入力データ読み込みオブジェクトの
作成
BufferedReader myReader=new BufferedReader(
new InputStreamReader(System.in),1);
//敵出現メッセージ
System.out.println("敵が現れた。");
//味方、敵初期値
int mikata=5;
int teki=5;
while(teki>0){
//数値入力
System.out.println("どうする?1:攻撃、2:回復");
System.out.println("行動:");
//数値を読み取り、変数に代入
Int mystring =myReader.readLine();
Int koudou = Integer.parseInt(mystring);
と思われる部分で;が足りませんというエラーが出ました、どう修正すればいいのですか?
・エラーメッセージはそのまま書く。改変されると推測が困難。
・ソースは必要な箇所を可能な限り原文に忠実に記述する。
Int とか、「作成」から始まる行とか、何が正しいのか分からない。
interface と abstract class の違いが良くわかりません。
interface でなければならない(もしくはその方がよい)場合、
また逆にabstract class でなければならない場合とは、
どんな場合なのでしょうか??
Javaでは多重継承できないから属性を表すような実装はInterface
一方、デフォルト実装を与えたい場合などはabstract class
このクラスは○○というメソッドを持っているよ→interface
このクラスをベースに○○というメソッドを使って機能拡張してね→abstract class
型の継承 → interface
実装の継承 → abstract
>>380 ・ある性質に特有の処理が存在する。部分的に実装を共有できる。
もしくはどうしてもある種の実装が必要だ。
(interface は実装をもてない。abstract class はもてる。)
・その性質の出現する場面が予想できる。もしくは限定した局面でしか使用しない。
(あとから再利用を試みる場合、interface の方が制約が少ない。
abstract class だと、別のクラスの継承が必要な時にはもう使えない。)
上記を満たすなら abstract class。
制限をかけることによって(考えることを減らすことで)実装を容易にしたい場合も。
それ以外は interface。
interface の方がより純粋。制限が少なくて柔軟性が高い。
反面、実装の手間が多くなる。
最近は「とりあえずinterfaceにしとけ」な気がする。
実装に関してはヘルパークラスやテンプレートクラスを内包して、
そっちに処理を転送する方法で、継承と大差ない手間で済む。
その上で拡張性を保てる。
GUIフレームワークの基本部品なんかは abstract class ベースのものが多い。
画面表示に関する基本実装がどうしても必要とかそんなんだろうか。
非オブジェクト指向言語だからといって
オブジェクト指向的にプログラムがかけないことはないように、
abstract class を interface代わりに使ってプログラムは書けるだろうけど、
そんな悲しいことは普通はしない。
386 :
デフォルトの名無しさん:2007/03/13(火) 23:27:22
x64で動作するeclipseってあったっけ?
もしくはjava用のIDE
>>380 interfaceを作って、abstract で骨格実装(デフォルトの実装)を作って、
多くの実装クラスを骨格実装を継承するようにすると
柔軟な構造になるよ。ひと手間掛かるけど
388 :
380:2007/03/14(水) 00:14:01
なるほど…
デフォルト実装の必要性と、プログラムの柔軟性との兼ね合いってことでつね。
みんなありがd
>>333 不変クラスつくればいいだけだろう。
あれでconstなクラスは作れる。
無理って事は無い。
>>324 配列の中身が書き換えられないように、
Collections.unmodifiableList()を使うとか、
clone()を使うとか、考えようぜ。
IBMのdwで、不変クラスで検索してみ。
constに相当するものを作る方法がのってる。
Wikipediaの「イミュータブル」でも検索してみると良い。
>>332 それは、Effective Javaでは禁じ手とされているものだぞ。
攻めて、enum型にせよ。enumが駄目ならfinalでコンストラクタがprivateなクラスを。
>>337 定数インタフェースは、勝手に実装されることがあるからやめとけ。
public class Hello
{
public static void main(String args[])
{
System.out.println("Hello!");
}
}
>>343 代替手段があるからいらないんだよ。
constは余計なゴミなんだよ。ゴミ。
全てを不変にしたくないときはfinalのほうが柔軟性が効くんだよ柔軟性が。
部分的に可変にしたほうがよいこともあろう。
>>345みたいな浅はかでお馬鹿なC言語厨には理解できないが。
>>351 FindBugsを使え。そういう問題が起きても
困惑することは無くなるだろう
>>395 防御的コピーって知ってる?
代替手段がないからこんなことしないといけないんだけど。
399 :
デフォルトの名無しさん:2007/03/14(水) 01:06:51
質問なんですが、下記のようにジェネリクスを使ったインタフェースを使って
実装クラスを書くと意図したように実行まで行えるのですが、
アノテーションを入れるとメソッドのオーバライドをしていないと怒られてしまいます。
これはアノテーションが間違っているのでしょうか?
それともアノテーションを使っていない方はたまたま実行まで出来てしまっただけで、
本来ならコンパイルが出来ないはずなのでしょうか。
public interface Base<T>{
public void print(T data) ;
}
public Derived implements Base<Integer> {
public void print(Integer data ) {
System.out.println(data.toString() ) ;
}
}
>>399 Derived のメソッド定義に @override をつけたものとして話を進めるけど
それはオーバライドじゃないから怒られる。ジェネリクス関係ない。
>>398 不変じゃなかったら、constつけてても防御コピーしなきゃだめだろ
>>401 残念ながらC++のconstは防御的コピーする必要はない。
勝手にコピーされるから?
不変でないオブジェクトは、明示的にせよ暗黙的にせよコピーしないと、
中にしまいこんだはずのオブジェクトを勝手に編集される可能性がある。
不変バージョンと可変バージョンが1つのクラスで定義でき、
const つけると不変クラスとして使えるってことか?
たしかに、両方のバージョンをそれぞれ作るのは面倒
超初心者です。。midiを内部で生成して再生するプログラムを作ろうと、ググっていて
http://java-house.jp/ml/archive/j-h-b/039552.html の話を見つけました。確かに
static byte test [] = new byte [] {0x7f, 0x80};
とやってみると、0x80以上を代入しようとすると「精度が落ちている可能性 期待値int」
とか言われてしまいます。
リンクにあるようにjpgBuff[j] = (byte)jpgBuff_i[j];で変換すると正しく扱えるようなのが不思議です。
>しかし int に入れておいて byte にするというのは、意味がないように
>思います。というか、int でできるなら byte でソースに埋めこんでも
>できなきゃおかしいですよね。ただ代入しているだけなんだし。何か
>その辺もおかしいのでは?
とあるように0xffまではbyteで扱えるはずですよね?
0x80以上をbyteな配列に代入するにはどうすればいいんですか?
何か勘違いをしているようでしたらご指摘をお願いします。。
byte は 0 〜 255 じゃない
-128 〜 127 なんだよ……
>>405 > とあるように0xffまではbyteで扱えるはずですよね?
違う。byteは -128〜127まで。
キャストを使って符号を無視するように明示しないかぎり byte では 255(0xFF) は扱えない。
> 0x80以上をbyteな配列に代入するにはどうすればいいんですか?
直接的にはキャストを使う。
間接的には String から byte配列に変換するようなユーティリティメソッド作るとか
"\u007F\u0080".getBytes("ISO8859-1"); みたいに文字列リテラル使ってみるとか。
static byte[] test = new byte [] { (byte)0x7f, (byte)0x80 };
なるほど、確かにうまく代入されています。
ただ毎度面倒くさいし、見掛けも悪いのであらかじめ
-128 〜 127 の数値で扱うようにしておいたほうが
良いかも、と思いました。。。
ありがとうございました。
UByte 型作っちゃいなYO
ejbってもう誰も使ってないの?
みんなjspで力つきたのか? phpレベルの底辺が好きなんだね。
誰かこれを解説してください。
>3個の数字の並び替えの場合、その並び替えは 3! = 3 * 2 * 1 = 6通り、
>ですが、1回だけ shuffleを行う際に使っている j、k の選び方は 36 通りです。
>つまり、これが6通りの並び替えのどれかに対応します。
>しかしながら、 (36 ) ÷ ( 3 ! )は割り切れないのでどれかの並び方に偏ってしまうということがわかります。
http://blogs.sun.com/javaev/
>>414 実際に並べかえてみりゃわかるよ。小学生並の解き方だけど。
例えば、
> for (int i = 0; i < a.length; i++)
を削った場合、j,k は 9通り(3^2)で、実際に並べ替えてみると
j=1::k=1:A、B、C, k=2:B、A、C, k=3:C、B、A
j=2::k=1:B、A、C, k=2:A、B、C, k=3:A、C、B
j=3::k=1:C、B、A, k=2:A、C、B, k=3:A、B、C
出現確率はこんな感じに偏る。
A、B、C::3/9,
A、C、B::2/9,
B、A、C::2/9,
B、C、A::0/9,
C、A、B::0/9,
C、B、A::2/9
続きは自力で。
416 :
414:2007/03/14(水) 09:37:37
作成したjarファイルを、JREが必要無い状態で、exe形式で実行したいと考えています。
検索してみたところ「JET」なるコンパイラが見つかり、
「パーソナルエディション」なら個人に限り無料で使用できると聞いたのですが、
公式サイト内を探してみてもパーソナルエディションが見つかりません。
ひょっとして配布終了してしまったのでしょうか?
>>402 constするとその内部にあるものまですべてfinalになるなら
部分的にconstにできるfinalのほうが柔軟性が良いんだけどね。
>>417 ないっぽいね。exe化はあきらめて、JSmoothかexewrapあたりにしておくのが吉。
double型からint型に変えるやり方はあるのですが
逆にint型らdouble型にかえるやり方があるのでしょうか?
一応double型からint型に変えるやり方を参考にして
やってみたのですがどうもエラーがでるようで・・・」
何をやった。
意図していた結果 / 実際の結果
を具体的に書くといいぞ。
double doubleValue = (double)100; と書いたらコンパイル時に〜という
メッセージが出ました、とか。
public class Henkan{
public static void main(String[] args) {
double s = 5.0;
int i = (int)s;
System.out.println(i);
}
}
これを参考にしてdoubleをint、intをdoubleにすれば変換できると
思いやってみたのですが結果
Henkan.java:3: 精度が落ちている可能性
検出値 : double
期待値 : int
int s = 5.0;
^
エラー 1 個
になってしまいまして、どうすればいいのがわからないです。
intとdoubleを入れ替えたということは
int s = 5.0; // A
double i = (double)s;
としたわけだな?
今回の目的はintをdoubleに変換することなんだよな?
Aの行で確かに精度が落ちている。
intなんだからただの5でないといけない。
>>423 > int s = 5.0;
5.0 は浮動小数点リテラルで、型は double だから、
int に代入するにはキャストしないとダメ。
int s = (double)5.0;
もしくは、整数リテラルを使って
int s = 5;
× int s = (double)5.0;
○ int s = (int)5.0;
解決できました!みなさま即レスで返していただきありがとうございました!
doubleにintを代入するときはそのまま入っちゃうのは、
情報欠落がないから。
プリミティブの
ワイドニング変換(widening primitive conversion)
ナローイング変換(narrowing primitive conversion)
というのを調べるといいかも。
> doubleにintを代入するときはそのまま入っちゃうのは、
逆?
433 :
417:2007/03/14(水) 19:24:05
>>420 >>431 ありがとうございます。
>>431さんがおっしゃっているgcjを試してみたいと思います。
プログラム自体はSwingなんですが、gcjはSwingはダメなんですね。
この機会にSWTも勉強してみようかと思います。
ご親切にありがとうございました。
>>433 JRE無しでないと駄目な理由は?
たぶん他の代替手段も、各種DLLが必要になってくると思うけど・・・
>>429 doubleにlongを代入するとき、そのまま入っちゃうのは何故?
情報欠落があるのに。
>>435 int→floatでも情報損失があるけど言語規定上問題なく拡大変換される。
プリミティブ型の拡大変換は情報損失の有無に関わりなくコンパイル時も実行時もエラーを発生させない。
だから、変換の可否は情報損失とは関係なく、言語仕様でそうなっていると言うべき。
double d = Double.valueOf(args[i]);とdouble d = Double.valueOf(args[i]);の違いって何かあるんですか?
なにもない
他スレで質問したのですが、
スレの進行が滞っているのでこちらに書きます。
class C1{
}
class C2 extends C1{
void f(){
System.out.println("f() is executed.");
}
}
class Example{
public static void main(String args[]){
C1 obj = new C2();
obj.f();
}
}
上記のプログラムをコンパイルすると、
「メソッド f() はclass C1 で見つかりません。」
というメッセージが出てコンパイルエラーとなりました。
あるクラスの変数によってサブクラスのオブジェクトを参照する場合、
そのオブジェクトが呼び出すメソッドは、スーパークラスでも宣言されている
オーバーライドメソッドでなければならないということですか?
>>440 > C1 obj = ほげほげ
> obj.f();
2行目は、C1 の f() を探す。
442 :
440:2007/03/15(木) 04:33:07
>>441 なるほど、あくまでその変数のデータ型に基づいてメソッドを選択するってことですね。
どうもありがとうございました!
見つかって呼ばれるメソッドは変数のほうではなく、
オブジェクトに定義されているもの。
444 :
デフォルトの名無しさん:2007/03/15(木) 12:12:22
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(name)));
try {
...
} finally { reader.close(); }
とかって、素直で読みやすいコードだと思うんですが、
InputStreamReader や BufferedReader のコンストラクタで例外が発生したら
name のファイルが開きっぱなしになってしまいますよね?
(実際はもっと複雑なフィルタがかぶさってます。)
↓みたいに FileInputStream だけ別の変数にしとかないといけないんでしょうか?
FileInputStream file = new FileInputStream(name);
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(file));
try {
...
} finally { reader.close(); }
} finally { file.close(); }
close() がダブってるんでキモイのと、これだともしかしてさらに
InputStreamReader でもう一段 try しないといけないのかも・・・と、
なんだか釈然としないです。
以下のようなソースがあった場合、
readerでIOExceptionを発生させるには読み取り権限がないファイルを渡すことでテスト
FileNotFoundExceptionを発生させるには存在しないファイルを渡すことでテストしようと思いますが
writerでIOExceptionやclose()メソッドでIOExceptionが発生した場合、
JUnitでどんなコードを書いたらよいのかがわかりません
よろしくお願いします
public String read(String name) {
Reader reader = null; StringWriter writer = null;
File file = new File(name);
try {
reader = new InputStreamReader((new FileInputStream(file)));
writer = new StringWriter();
int c;
while ((c = reader.read()) != -1)
writer.write(c);
return new String(writer.toString());
} catch (FileNotFoundException e) { System.out.println(e.getMessage());
} catch (IOException e) { System.out.println(e.getMessage());
} finally {
try {
if (writer != null)
writer.close();
} catch (IOException e) { System.out.println(e.getMessage()); }
try {
if (reader != null)
reader.close();
} catch (IOException e) { System.out.println(e.getMessage()); }
}
return null;
}
>>444 tryブロックの外で、closeすべき変数を null を初期値とし、まとめて宣言する。
finally で、null チェックして逆順に close を呼び出す。というのはどうでしょう
ラップしてる変数の close 処理がうまくいくことを前提にするなら、
if文をネストして、null ではない一番外側の変数だけでcloseを呼び出す。
と言うのもありかも?
>>444 1.5 以降なら、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=36027&forum=12&start=15 の、かつのり氏の StreamUtils#close みたいなユーティリティメソッド作って、
FileInputStream file = null;
BufferedReader reader = null;
IOException e = null;
try {
file = new FileInputStream(name);
reader = new BufferedReader(new InputStreamReader(file));
//....
}catch(IOException ex){
e = ex;
}finally{
StreamUtils.close(e, reader, file);
}
みたいにするとか。
1.4までだと java.io.Closeable がないから この方法は使えないんだけどね。
>>445 InputStream を渡すメソッドだったら簡単だけど。
djUnit の Virtual Mock Objects 使ってみるとか?
449 :
デフォルトの名無しさん:2007/03/15(木) 14:13:34
質問です
画面に文字列を出力させるときに、その表示を一文字ずつ
順番に表示させるのって可能ですか?
例:ありがとう
と出力させるとしたら、「あ」が表示されて、少し待って「い」
みたいな感じです
可能不可能でいえば可能。
画面てのがコマンドプロンプトなどのキャラクタ表示装置なのか
ウィンドウなのか、ウィンドウの中のテキストフィールドなのか
などによってやり方は違う。
451 :
デフォルトの名無しさん:2007/03/15(木) 14:43:08
アプレット上にパネルを置いて、そのパネルでmouseWheelMovedイベントを拾うプログラムを作っているのですが
アプレットの外の部分(HTMLで文字などを表示してるところ)をマウスクリックすると
パネル上でマウスホイールを回してもmouseWheelMovedイベントが来ません。
何が問題なのでしょうか?
Java 1.6.0のソースのStringの部分を眺めていたら、public String toUpperCase(Locale locale)の部分(2556行)に
/* Now check if there are any characters that need to be changed. */
scan: {
for (firstLower = 0 ; firstLower < count; ) {
(ry
}
という部分があったのですが、このscan: {}はどういう意味ですか?
>>451 自分のウインドウの外の出来事を、しかもアプレットが知ることが出来たらやばくね?
>>452 ラベル:
ループの中でbreakやcontinueしてたりしない?
>>453 そうでなくて
パネル上にカーソル移動→マウスホイール動かす→イベント上がる
のに
パネルの外をクリック→パネル上にカーソル移動→マウスホイール動かす→イベント上がらず
ってことです。
マウスホイールって入力フォーカスのあるコントロールに通知されるんじゃなかったっけ?
なんかそれを変更するツールがあったよーな。
456 :
デフォルトの名無しさん:2007/03/15(木) 19:29:56
すみません、質問なのですが。自分、去年末あたりからプログラミング(java)
を学び始めたのですが、DBをjavaのプログラミングで弄る技術は必須でしょうか?
457 :
デフォルトの名無しさん:2007/03/15(木) 19:37:35
何故こんな質問が出るか想像してみた。
1.誰かからできないといけないと言われた
2.その手の本を読んで、「javaでDBを使ってみよう」という所で詰まっている
3.ネットでDBを使う例をよく見かけるので必要かと思った
4.面接で「javaはひととおりできます」と言ってしまったので入社前に「ひととおり」というのはどの程度か知りたい
で、
>>456が聞きたいのは「javaでDBを弄る技術がないと役立たずなのか」って事ではないだろうか。
>>456 ヒント:いまどきRDB使わない業務アプリはほとんどない。
>>456 その質問はこんな感じ。
「すみません、質問なのですが。自分、駅前商店街のあたりで料理屋を探していて、さて
これから適当な店に入ろうというところなのですが、食前にワインを注文すべきでしょうか」
吉野家でワインを注文するひとは少ないと思われ。
461 :
デフォルトの名無しさん:2007/03/15(木) 20:04:50
>>458ええ、最近とうとうeclipseを導入したのですがHSQLDBを起動するためのソースが
eclipse上で上手く動かないのです。んで考えた末に出た結論がHSQLDBplugin
テキストエディタの時は上手く動いたのに何でだろorz クラスパス等の考慮は
完璧なんですが・・・
462 :
デフォルトの名無しさん:2007/03/15(木) 20:12:45
やっぱり、eclipse破棄してテキストエディタでソース組むようにします。
eclipse使ってると技術が退化する。
463 :
デフォルトの名無しさん:2007/03/15(木) 20:18:42
>>462 作業効率が落ちると消化できる量も当然減るわけで一概に技術が退化するとは思えない。
要するに
「コアな部分を解釈するか」
「作業効率を上げて色々な技術に触れるか」
方向性の違いじゃない?
eclipseもプログラム言語もプログラマーにとっては道具
どのような道具を使えば望んだ結果が得られやすいのかが一番重要
465 :
デフォルトの名無しさん:2007/03/15(木) 20:30:16
そうですね。eclipseは構文エラーなどをした時、その場で教えてくれるので
とても便利ですよね。じゃあ、どういった種類のソースを組むのかによって
使い分けることにします。
経験の浅いプログラマは、たまにはテキストエディタで書いて
いろいろ振り返ってみるのも良いと思う。
「退化する」ってのは、本当は退化じゃなくて基礎があやふやになるということ。
ある程度の経験があって基礎がしっかり固まっている人はIDEを使ったところで
「退化」なんてしないし作業効率が上がるので、どんどん使えばいい。
そういう人は仮にIDEが使えない環境下で作業しなければいけない場面でも
問題なく普通に対応できる。
要するに何が言いたいかっていうと
>>462は半年ROMってろってことですね
IDE使うと楽にコーディングできるからテキストエディタには戻れなくなる。
覚えていなくてもいいことは人は忘れるものだ。
469 :
461:2007/03/15(木) 21:06:35
すみません、続報ですが、テキストエディタで組んだ奴は上手くDBに接続できたので、
そのソースをeclipseにコピーして実行したら上手く接続できました。
どうやら原因は私がeclipseに甘えていたことのようです。orz
>>466 文法をしっかり覚えている=プログラマとしての経験が豊富
みたいな口ぶりだな。
471 :
461:2007/03/15(木) 21:16:25
下らない審問ばかりで申し訳ないのですが、私まだjavaしか使えないので
これからc,c++学ぶ予定なのですが、もしそれらの言語でGUIプログラムを組むとき
流れは( ContentPaneを拾得したり、JButtonなどを宣言する流れは同じなのでしょうか?
472 :
461:2007/03/15(木) 21:33:22
c,c++学ぶときのお楽しみって事で。Σ(´∀`;)
さっきの原因が分かりました。hsqldb/libにあるjarファイルを2つとも
importしてたのが原因だったようです。盲点でした・・・
>>470 いや、
>>466の言いたいことは文法だけじゃなく開発全般にわたっての事ではないかと。
IDEでやっていることをIDEなしでもちゃんとできるようになろうよ、と。
それができれば自ずとプログラマとしての力もつくんでないの?
IDEなしで開発していると思いがけずいろんなものが見えてくることもあるし…
C++でGUIプログラム組む時は基本的にMFCまたはWTL/ATLを使う。
詳細はググるように。
.NETの場合はFormsとWPFがあります。
FormsはVBの流れをくんだ開発手法でWPFはJSPやASPの流れを組んだ開発手法と思えば良いと思う。
俺C++がメインでJavaは素人だからトンチンカンなこと言ってるかもしれないけど……
例えばある変数がintだったかlongだったかで手が止まるとか、
20文字の変数名を手入力して間違えてコンパイルエラーとか、
ある関数の内容を確認するときにいちいち検索が必要になるとか、
もうナンセンス極まりない話だと思う。
それじゃ自分が常に全体を把握できる程度の規模のプログラムしか書けないよ。
断言できる、統合環境と技術力とは一切関係がない。
476 :
461:2007/03/15(木) 22:38:01
さっきのHSQLDBのことですが、pc再起動してもう一度実行してみたら
IllegalStateExceptionと出てまた失敗しました。
成功してたのに・・・バグ?(´・ω・`)
>>476 APIでは、
public class IllegalStateException
extends RuntimeException
不正または不適切なときにメソッドが呼び出されたことを示します。
すなわち、Java 環境または Java アプリケーションは、要求されたオペレーションに適した状態ではありません。
設定ファイルやOSセキュリティなどで
サーバ・データベースの連携がうまくいってないのでは?
全自動洗濯機があるんだから洗濯板の使い方なんてどうでもいいよ
そういう奴は全自動洗濯機の性能評価・製品評価もできず、
自分が何をやっているのかも理解できない
いわれるがままに作業する全自動ロボットでしかないわけだが。
480 :
475:2007/03/15(木) 23:11:34
>>479 比喩を比喩で返すのは別にいいんだけどさ、
それは一体何を言わんとした比喩なの?
ある変数にカーソルを合わせたら「int」と出た、
じゃあこれはintなんだなと理解し、それに応じたコードを書き進めることが、
あるいはある関数で右クリックしてメニュー出して左クリックして
その関数の宣言されている場所に一気にジャンプして編集することが、
果たして「言われるまま作業する全自動ロボット」とまで
蔑まれるほど程度の低い行為だとはどうしても思えないんだけど。
君の言う「本当の」プログラミングって何よ?
>>444 >InputStreamReader や BufferedReader のコンストラクタで例外が発生したら
ドキュメントには何も書いてないけど、
チェックされない例外やエラーが発生するかもしれないん?
closeは一番外側を閉じると、元まで伝播するんじゃなかったけ。
>>480はコードアシストやジャンプ機能だけがIDEの機能だと思っているバカ。
そんな基本的な機能まで放棄してテキストエディタかよって話だろ
484 :
475:2007/03/15(木) 23:28:41
>>482 VS様は(少なくとも個人で買える範囲では)最高の統合環境だと思います
それで何の話でしたっけ
まあ、NetBeansあたりを使ってWebアプリ開発やっていると
・Servletコンテナのインストール方法を知らなくて良い
・それどころか、Servletコンテナの存在すら意識しなくて良い
・Servletをweb.xmlへ設定する方法を知らなくて良い
・それどころか、web.xmlの存在すら意識しなくて良い
・webアプリケーションのデプロイ場所・ディレクトリ構成を知らなくて良い。意識しなくて良い
・実行時クラスパス・ビルド時クラスパスを意識しなくて良い
・ソースディレクトリとデプロイ先ディレクトリが違うことを意識しなくて良い
等々のメリットだかデメリットだかが得られるわけだが、
どうなっているのか知らずに作業できる全自動ロボットという見方も出来るかもね。
自分の目的に合ったものを探せばいいと思うよ
>君の言う「本当の」プログラミングって何よ?
誰か「本当の」プログラミング なんて話してるのか?
俺、真のスーパープログラマーになるんだ!!!11
本当のプログラミング(笑)ってなんだよ
自動的にエンコード・デコードしてくれるテキストエディタなんて使ってると、
技術が退化するぞ。
バイナリエディタを使うんだ。
高級言語なんて使ってると、
技術が退化するぞ。
機械言語を使うんだ。
>>447 外側が閉じれないのに、内側を閉じちゃっていいん?
ソフトウェアなんて組んでいると、
技術が退化するぞ。
チップセットを自作するんだ。
それが
>>480の言うところの「本当の」プログラミングかwww
いま洗濯物を干したところ。
そうなんだ。乾燥機がないんだよ。。。
PCのスペックにうるさいやつがいるのはわかるけど
全自動洗濯機の性能評価とかいちいちするやついるんだな
JBuilderほどひどくなければ何でもいいだろ
全自動洗濯機しか使えない奴は、洗濯物の干し方を知らないからな。
壊れたときに途方に暮れる。
ちゃんとシワ伸ばしたか?
色物は裏返したか?
型くずれする物をハンガーに掛けたりしてないか?
JBuilderのどこがひどい?
eclipseとかNetBeansよりよっぽど使いやすいけど。
ああ、eclipseベースにした新しいやつのこと?
>>497 価格.com あたりに行ってみ。
家電マニアという人種は意外と多い。
>>498 それはない。自動でやってくれない部分については人はおぼえるよ。
IDEがお客さんとメールのやりとりまで勝手にやってくれるようになったら
メールも打てなくなるかもねw
洗濯の初心者は、たまには洗濯板で洗ってみるのがいい。
kakaku.comのリンクを貼るのはロングテールを利用してるだけ。
実際は性能評価なんてしてるやつはゼロに近いだろ。
まわりの人間からトシちゃんのファンをみつけるのはほぼ不可能だけど
トシちゃんのディナーショーにいけばトシちゃんのファンばっかだぞ。
>>503 うおっ。洗濯板か。さすが2chだ。何でもありだな。
できれば板アド教えてプリーズ。
>>493 閉じていいかどうかは、内側による。
FileInputStream の場合は開きっぱなしだと、
他のファイル開く時に OS で開けるファイルの上限にひっかかったりとか、
後で FileOutputStream で同じファイルを開けなかったりする可能性もあるので放置しない方が良いかも。
今回のは InputStream だったけど、
例えば OutputStream とかで close() 呼んだら DB に commit する、
とか、そーゆー実装になってる場合は閉じたら拙いだろうし。
本当のプログラミングはこれからだ!
まわりの人間から家電マニアを見つけるのは
トシちゃんファンを見つけるよりもたやすい。
「ロングテール」言いたいだけちゃうかと
javaでjcomboboxで選択したものを表示させるにはどうしたらいいですか?
511 :
デフォルトの名無しさん:2007/03/16(金) 01:13:51
つ【やさしいJava本】
↓マブチとタミヤの争い
>>513 模型オタの俺がマジレスするとタミヤはモーターは作ってないよ。あくまでも模型の会社だから。
タミヤの強みは金型とかでしょ。逆に、マブチは小型モーターに強み。
家電のことは詳しくないけど、マブチやタミヤって家電に絡んでるのか?
クソスレであってもこーゆー
>>514みたいなレスがあるのが2chの醍醐味だと思う。
クソなのはこのスレじゃなくてこの流れなんだが、
その点を除けば同意
517 :
デフォルトの名無しさん:2007/03/16(金) 06:36:34
つ【同意】(:D)| ̄|_ =3=3
519 :
デフォルトの名無しさん:2007/03/16(金) 16:32:25
昨日の>461ですが皆様のお陰で解決しました。
どうもありがとうございました。
エラー:パッケージ javax.servlet.http は存在しません。
どうしたらいいですか?
Tomcat 6.0
java1.6.0
ググれ
>>520 コンパイル時なのか実行時なのかくらい書け。
環境もなるべく詳しく書け。
>>524 コンパイル時です
>>523 通ってませんでした
servlet.jarが入ってなかったので名前が似ているservlet-api.jarをJAVA_HOME/jre/lib/extに入れたのが原因でしょうか?
>>525 よほどのことが無い限り ext とかはいじらん方が良かれ。
開発環境は何使ってます?
Eclipse や NetBeans なら
ターゲットの実行環境(tomcat6)から適切な jar を参照するんで
その辺りの煩わしさは皆無ですよ。
(tomcat6 に対応してたかはちと自信なし。)
テキストエディタだけでガリガリやってるなら
javac する時のクラスパスに、
実行環境のライブラリをまとめて指定したら
コンパイルは通ると思う。
>>526 jcpad231を使ってプログラムを書いています
528 :
デフォルトの名無しさん:2007/03/16(金) 22:10:22
>>522 結局原因はHSQLDB側のコマンドライン?を2つ起動してなかった事が原因
です。Σ(´∀`;)ちんけな原因orz
529 :
デフォルトの名無しさん:2007/03/16(金) 22:13:37
>>526 ベータ版だけど最新のtomcatpluginならtomcat6使えますよ。
個人的にはtomcat5.5の方が良いです。
CSVファイルって空白のデータもありえますよね?
最終列が空白の場合、splitでできるString配列のlengthが
異なってしまい処理が煩雑になります。みなさんどうしてますか?
自分は下記のようなデータがあったとき、
1,音原田九郎,
2,渋井丸拓男,事故死
3,LIND L TAILOR,
//いったん最終列に空白を追加して最終列を認識させる
text = text+" ";
String[] splitArray = text.split( "," );
処理1( splitArray[0] );
処理2( splitArray[1] );
//追加した空白はtrimで消去してから処理する
処理3( splitArray[2].trim() );
こうしているのですが、もうちょっとスマートなやり方ないですか?
","つけるといいよ
532 :
じゅん:2007/03/17(土) 02:22:13
ネットを開いてお気に入りを開くとフォルダがあるのですが、隠しファイルにしてしまい消えてしまいました。もう一度表示させるにはどうすればよいのでしょうか(>_<)
コントロールパネル→ツール→フォルダオプション
で隠しファイルを表示する設定にできます。
その状態でお気に入りを開けば半透明のフォルダが
出てくるはずなんで、右クリックしてプロパティから
隠しファイルを解除してください。
それJavaなん?
>こうしているのですが、もうちょっとスマートなやり方ないですか?
末尾データが無いからとカンマを削る事がそもそもスマートじゃない
何の説明も無いまま空白を半角空白と空文字列の二つの意味で使ってることに驚く。
>>530 予め最大の列数が決まってるなら
String[] splitRecord(String record){
String[] splitted = record.split(",");
String[] result = new String[3];
System.arraycopy(splitted, 0, result, 0, splitted.length);
return result;
}
みたいな処理を通せば配列のサイズは統一される。
けれども、普通はクラスを定義して
CSVレコード1行からインスタンス1コを生成するファクトリメソッドを用意する。
そんなにも文字列で処理したい理由って何?
import java.io.*;
public class File {
public static void main(String[] args) {
try{
FileReader f = new FileReader("test.txt");
BufferedReader b = new BufferedReader(f);
String s;
while((s = b.readLine())!=null){
System.out.println(s);
}
}catch(Exception e){
System.out.println("ファイル読み込み失敗");
}
}
}
ここのソースのwhileの部分がすこし理解ができないので
教えてください。
s = b.readLine() は一行読んで代入
で、それが !=null の間だけ実行ってことは読み込めなくなったら終了ってこと
>>538 大雑把に言うと、b.readLineメソッドの戻り値がnullになるまで繰り返すんだけど、
その読み出した値を処理で使いたいからsに代入してる
理解できました!ありがとうございます。
また質問があります
Syouhizei syouhizei1 = new Syouhizei();
syouhizei1.a = 9600;
syouhizei1.b = 1.05;
syouhizei1.kakezan();
↓
class Syouhizei {
double a;
double b;
double c = a*b;
void kakezan()
{
System.out.println(c);
}
}
とやるとどうしても結果が0,0になってしまいます。
理由ががわからないので教えてもたらいたいです。
処理の順番を考えろ
>>541 cが計算されるのはSyouhizeiがインスタンス化されたときの一回だけ
syouhizei1.keisan()を呼び出す時点でa,bになにが設定されていても既にcは
初期値で計算済だから0.0が表示される、と。
それ以前にaやbを外部から直にいじるのはちょっといやだな
パラメータで渡そうよ。
順番が違っていたんですね、わかりやすく説明していただいて
ありがとうございました!
パラメータで渡したほうが見栄えがいいってことでしょうか?
>>544 見栄えっつーか安全性の問題
デバッグもしやすいしね
コンストラクタとか勉強汁
import java.io.*;
public class Kingaku {
public static void main(String[] args) {
try {
FileReader f = new FileReader("test01.txt");
BufferedReader b = new BufferedReader(f);
String s;
while((s = b.readLine())!=null){
String st[] = new String[4];
st[0] = s.substring(0,8);
st[1] = s.substring(9,13);
st[2] = s.substring(14,22);
st[3] = s.substring(23,31);
String t = st[2];
String t2 = st[3];
int nu = Integer.parseInt(t);
int nu2 = Integer.parseInt(t2);
int nu3 = (nu*nu2);
double nu4 = (nu3*1.05);
FileWriter fw = new FileWriter("test02.txt");
fw.write(st[0]+","+st[1]+","+nu4);
fw.close();
}
}catch(Exception e){
System.out.println("ファイル読み込み失敗");
}
}
}
入力ファイルに3行文字列がはいってるのですが
出力ファイルには3行目の文字列しか出力してくれません。
これを3行まるまる出力させるにはどうすればいいいのでしょうか?
buffer は怠惰だから flush しないと仕事を全うしない。
アホか。ループ内で毎回ファイルを開きなおしてるからだ。
>>546 斜め読みの脊髄反射で申し訳ないが fw.close()の前にfw.flush()
違ってたらすまん
ところで、try〜catchをException一つで受けるのって乱暴じゃね?
せめてファイル入出力系、数値変換系、その他で分けないと問題起こったとき原因の
切り分けができんぞ
テストのために書くコードならよくやるなあ、めんどくさいし
>>549 Exception e の内容を表示すれば問題ないと思われ。
553 :
デフォルトの名無しさん:2007/03/17(土) 14:18:47
対処法がわからないです…教えていただけないでしょうか?
めんどいから、これでいいじゃん
FileWriter fw = new FileWriter("test02.txt", true);
>>553 BufferedReader b = null ;
FileWriter fw = null;
try {
b = new BufferedReader(new FileReader("test01.txt"));
fw = new FileWriter("test02.txt");
String s;
while((s = b.readLine())!=null){
// 略
fw.write(st[0]+","+st[1]+","+nu4);
}
b.close();
b = null;
fw.close();
fw = null ;
}catch(Exception e){
System.out.println("ファイル読み込み失敗");
}finally{
try{if(b!=null)b.close()}catch(Exception e){}
try{if(fw!=null)fw.close()}catch(Exception e){}
}
Exceptionのハンドリングは適当だし、動作は確認してないぞ
>>554 ファイルがなかったらExceptionがThrowされなかったけ?
あそっか。じゃあ先頭にorg.apache.commons.io.FileUtils.touch("test02.txt")
かなんかで空ファイル作成追加
ものすごい勢いで本末転倒だなw
JMSの仕様について勉強できるサイトや本ってないですか?
できれば日本語で・・・。
オライリーのJavaメッセージサービスは所持してます。
クラスローダを独自に用意すれば、並行処理で同じstatic変数にアクセスしても値が違う
みたいなことが出来るのでしょうか?
>>559 仕様はSUNのAPI仕様読むのが一番じゃないでしょうか。
仕様そのものはシンプルでキレイだけど
実装によるクセが大きいので、勉強はそこそこに
実装の調査に入った方が良い気がします。
>561
利用する側でなく、JMSプロバイダを作る側なため、
仕様をきちんと理解してからでないときついかなと思った次第です。
オープンソースとか参考にするのがいいんですかねぇ・・・。
563 :
デフォルトの名無しさん:2007/03/17(土) 21:16:56
VISTAでJAVAは使えますか?
とりあえず使えます
>>562 であるならなおのことSpecification読むしかないのでは。
あれが最終にして完全(であるべき)ですから。
差しさわりがなければMQ作ることになった理由を聞かせて欲すぃ・・
> であるならなおのこと
おとこのこなら
に読めてしまったので眼科行ってくる
アッー!
SwingでBeanを編集するためのよいバインドツールみたいなものはありませんか?
仕事関係です。SOAという言葉が大好きな人がいまして・・・。
まあまだ作ると決まったわけではないんですが。
英語大嫌いなんでキツイ(;´Д`)
SOAと英語にどういう関係が、つーか誤爆か?
そあー大変だな
てか別に英語関係なくね?
572 :
デフォルトの名無しさん:2007/03/18(日) 14:45:12
http://kajuhome.com/tomcat5.shtmlを見てTomcatをセットアップしているのですが、起動時にはTomcatが起動していません。
起動後、コマンドラインから/etc/rc.d/init.d/tomcat5 start(中でcatalina.sh startを呼んでいます)で起動すると問題なく起動します。
catalina.outを見ると、停止時に
致命的: プロトコルハンドラの一時停止に失敗しました
java.net.SocketException: Network is unreachable
というエラーが出ています。また、起動時の表示を見ていると、上記のtomcat5より先にhttpdが起動しています。
上記URLには「必ずtomcat→apacheの順で起動すること」とありますので、ここも気になるところです。
以上二点、何かお気付きの点があれば御指摘ください。よろしくお願いします。ちなみに環境は
・CentOS 4.4
・jdk-1_5_0_11-linux-i586-rpm.binからインストールしたJDK1.5.0_11
・apache-tomcat-5.5.23.tar.gzから解凍したtomcat5.5.23
・jakarta-tomcat-connectors-jk2-2.0.4-src.tar.gzからmakeしたmod_jk2.0.4
です。他に必要な情報があれば御指摘ください。
>>572 CATALINA_HOMEとかが読まれてないんじゃないか?
しかし、/etc/profileを更新するとは強引だな
あと、jk2は終わってるぞ
574 :
デフォルトの名無しさん:2007/03/18(日) 15:23:40
JAVA勉強してるのですが、将来的にもLG3Dを取り敢えずインスコしといたほうがいいですか?それともBistaにしとく?
575 :
572:2007/03/18(日) 15:29:14
>CATALINA_HOMEとかが読まれてないんじゃないか?
>
>しかし、/etc/profileを更新するとは強引だな
解決策&お勧めの方法などありましたら、「ここを見ろ」でOKですのでご教授ください(;´∀`)
ちなみにmod_jkも試してみたのですが、まったく同じ問題が出たのでクリーンインストールしなおしたとです……。
576 :
デフォルトの名無しさん:2007/03/18(日) 15:32:46
今eclipseでdbを利用した簡単なアプリケーションを作っているのですが、
eclipseにhsql pluginを導入しました。しかし、
作ったアプリケーションをいざプラウザで表示しようとすると
HTTP????? 500 -
--------------------------------------------------------------------------------
type ??????
?????
?? The server encountered an internal error () that prevented it from fulfilling this request.
??
javax.servlet.ServletException: org.hsqldb.jdbcDriver
ってエラーが出るのですが。ちなみにDBへの接続は別のクラスがやるようになってます。
解決策分かる方、教えてください。お願いします。
577 :
デフォルトの名無しさん:2007/03/18(日) 15:41:48
その別クラスからのDBへの接続は大丈夫でした
578 :
569:2007/03/18(日) 15:56:03
>570-571
565への返信です。
SOA→JMSという流れらしくて・・・。
で、JMSの仕様書英語しかなさそうなんで面倒だなと。
ならまぁ、「SOAだから」じゃなくて単に英語苦手だからだな。
つ エール
今 Sun のサイトから
jdk-1_5_0_11-windows-i586-p.exe をダウンロードしてインストールしたのですが、
bin フォルダ内に javac コマンドがありません。
何か変更があったのですか?
javac に替わるコンパイルコマンドはどれでしょうか。
582 :
:2007/03/18(日) 16:26:28
キーボードから任意の数値nを入力させて、1からnまでの和を表示させるプログラムです。
たとえばnが7であれば、「1+2+3+4+5+6+7 = 28」という具合に表示させます。
本に載っている模範解答だと、この処理部分を
int sum = 0;
for (int i = 1; i <= n; i++) {
System.out.print(i + " + ");
sum += i; // sumにiを加える
}
System.out.println("= " + sum);
としているのですが、これだと「1+2+3+4+5+6+7+ = 28」になって、最後の余計な"+"が入っちゃうと思うんです。
そこで、この処理部分を
int sum = 0;
for (int i = 1; i <= n; i++){
if (i != n){
sum += i;
System.out.print(i + "+");
}
else{
sum += i;
System.out.print(i);
}
}
System.out.println("=" + sum);
というふうに修正してみたんですが、これって一般的な方法と言えるんでしょうか?
Project Looking Glassに参加してる方は2chなんかにいないですよね?
仮に居たとしても会話したくないだろうな
585 :
581:2007/03/18(日) 17:05:34
JDK のインストールの後の JRE のインストール先を JDK と同じフォルダにしたため
bin が上書きされてしまっていました。
失礼ぶっこきました。
587 :
572:2007/03/18(日) 18:45:18
>>586 アドバイスありがとうございました。結論からいうと
>CATALINA_HOMEとかが読まれてないんじゃないか?
で大当たりでした。
/etc/rc.d/init.d/tomcat5の先頭にechoを入れると、起動時に環境変数まわりのエラーメッセージがドカンと表示されたので、
先頭に(/etc/profileとはまた別に、フルパス直書きで)環境変数を設定したところ、うまく起動できました。
また、念のためinit.dによる自動起動を停止し、/etc/rc.d/rc.localに記述する方法で明示的にtomcat→httpdと起動するようにしておきました。
大変助かりました。アドバイス、ありがとうございました。
>>582 sum+=i;が重複してるからif-elseの外に出した方がいいな。
けどそれ以外はみんなそんな感じに書くと思うぞ。
逆に変態的な書き方があったらぜひ教えて欲しいもんだ。
for (int i = 1; i <= n; i++) {
sum += i;
System.out.print(i);
if (i != n) {
System.out.print("+");
}
}
java -jar foo.jar としたときにシステムプロパティ java.class.path って
確実に実行モジュールである foo.jar のみが表示されるのかな?
仕様や実行結果を見るにどうもそうらしいんだけど。
絶対パスならそのまま、相対パスなら user.dir を付加すれば Win32 のGetModulePath の代わりになる?
592 :
582:2007/03/19(月) 00:42:19
>>582 まぁ、あえて違う書き方をしたいと思ったら、
int sum = 1;
System.out.print(1);
for(int i = 2; i <= n; i++ ) {
sum += i;
System.out.print(i + "+");
}
System.out.print(" = " + sum);
ぐらいかな? あまりこういう書き方はしないと思うけど・・・。
ごめん間違った
> System.out.print(i + "+");
System.out.print(" +" + i);
に修正
>>589 普通に
for (int i = 1; i <= n; i++) {
sum += i;
System.out.print(i + (i != n ? " + " : " = "));
}
System.out.println(sum);
みたいなのを考えたけど、希望してるのならこんなの
for (int i = 1; i <= n; i++) {
System.out.print(i + " + ");
sum += i;
}
System.out.println("\b\b= " + sum);
>>595 \bとはマニアックな・・・。
けどこうしてみるとifもないしスマートに見えるな。
機会があれば使ってみよう。
597 :
デフォルトの名無しさん:2007/03/19(月) 14:01:53
開発はユニクソ?リヌクス?の方が多い?
598 :
572:2007/03/19(月) 15:25:20
>>588 フォロー、ありがとうございます。これでinit.dの下で管理できそうですね。
大変参考になりました。重ねて御礼申し上げます。
新人教育でJavaを教えることになりました
知らないやつを基準に変数からクラス、オブジェクトまで教えるのですが
これだとすでにJavaやプログラミングを知っている人が退屈してしまうので
そいつらむけの適当な自習課題を用意しようと思います。
(簡単なゲームとかメモ帳作成とか)
参考になりそうなページはないですか?
お前が作れよ
ゲームとかメモ帳ってGUI方面だろ。
Webアプリ作らせたほうが実用的かと。
Java知ってるやつにはDB使ったアプリを教えろ
>>601 知らないやつ基準ということなのでそういう人が大多数という前提だと、
新人研修の自習でWebアプリ作るほどの力があるならそのまま現場投入で
たたき上げた方がよほど本人及び会社の為ではないかと
604 :
603:2007/03/19(月) 22:50:47
あ、現場投入云々はあくまで技術者として、ね。
社会人としてどうとかはまた別の話。
606 :
1/2:2007/03/20(火) 00:17:04
import java.awt.*;
import java.awt.event.*;
class Awt10{
Frame frame;
Button button;
TextField text;
public Awt10(){
frame = new Frame( "フレーム" );
button = new Button( "クリックするとダイアログ表示" );
text = new TextField();
button.addActionListener( new ActionListener() {
public void actionPeformed(ActionEvent e){
new Dialog01( frame );
}
} );
frame.add( button, BorderLayout.NORTH );
frame.add( text, BorderLayout.SOUTH );
frame.pack();
frame.setVisible( true );
}
public static void main( String[] args ){
Awt10 awt10 = new Awt10();
}
}
607 :
1/2:2007/03/20(火) 00:21:12
class Dialog01{
Dialog dialog;
public Dialog01( Frame frame ){
dialog = new Dialog( frame, "ダイアログ", true );
Label label = new Label( "ラベル" );
dialog.add( label );
dialog.pack();
dialog.setVisible( true );
}
}
これでコンパイルすると、
Awt10.java:15: <anonymous Awt10$1> は abstract でなく、java.awt.event.ActionList
ener 内の abstract メソッド actionPerformed(java.awt.event.ActionEvent) をオーバ
ーライドしません。
public void actionPeformed(ActionEvent e){
こういうエラーが出てきてしまいます。
javaの入門本のコードそのまま打ち込んでいるんですが、どうしたらいいんですか?
> actionPeformed
performed?
>>607 >class Awt10{
これ本当?コピペ間違ってない?
このソースであのエラーが出るとは思えんが…
うわーありがとうございました。
performedのスペルが間違ってました。恥ずかしい。
>>609さん
コピペは間違いはないと思います。。。
こういうエラー見たことなかったのでスペルちゃんと見てませんでした
611 :
609:2007/03/20(火) 00:49:21
すまん。勘違いだった(汗)
普段の自分のコーディングスタイルと違うので(と言い訳してみる)
612 :
デフォルトの名無しさん:2007/03/20(火) 10:26:06
*=ってどういう意味?
a = a * b; と a *= b; が同じ
さんくす。
a *= bってスタックに積む数が少ないから実行速度a = a * bより早いのかな?
>>615 > スタックに積む数が少ない
そもそも、この違いがない、はず。
単なる表記法の違いだよね…?
a #= b と a = a # b の違いは、aが評価される回数。
x[func()] += y; と x[func()] = x[func()] + y;
だとfunc()の性能によっては大きな速度差が出ることがあるし、
func()が副作用を持つ場合は動き自体が違う可能性もある。
a, b をメタ変数と考えるなw
完全なインタープリタならいざ知らず、バイトコードまではコンパイルしてるのだから
式の評価順の解析(スタックや逆ポーランドといった)はコンパイル時におわってる。
より短くコードを書くことを良しとしていたCの文法を受け継いでるだけだ。
>>620 要するにコンパイラが勝手に最適化するから気にするなでおk?
622 :
デフォルトの名無しさん:2007/03/20(火) 19:12:20
WebappClassLoaderをサーブレット側から手動で動かすにはどうしたらいいですか?
eclipseでワークスペース使ってコンソールから窓を開いて3DCGを表示するアプリ作ったのですが
それをアプレットに落とし込むにはどうしたらいいでしょか。
やり方教えて下しア
C/C++ だと _ で始まる名前や場所を問わず __ を含む名前はシステムで予約されてるけど、Javaではどうなん?
_については制限なし。
$も使えるが、機械生成されたものなど、用途を制限されている。
ただし、「それが望ましい」程度の縛り。
>>624 Character#isJavaIdentifierStart も Character#isJavaIdentifierPart も true を返すから '_' 自体は使える。
_ で始まる名前とか __ で始まる名前とかで、予約はされてないはず。
コーディング規約で使わないのを推奨してたか、は忘れた。
>>625-626 サンクス。自分でそんな名前を進んで使うつもりはないけど、
いま弄ってるソースでバンバンそんな名前が使われてたから気になってた。
>>617 どこにレスを付けるのか迷ったけど、ここにレス付けるわ。
例A
short x = 0;
int i = 123456;
x += i; // エラーなし
x = x+ i; // エラー 精度が落ちている可能性
例B
Object o = "Hoge";
String s = "Test";
o = o + s;// エラーなし
o += s; // エラー 互換性のない型
元ネタ 書籍「Java Puzzlers」
>x += i; // エラーなし
なんで?
JLS15.26.2を読んでみた。
前者は、複合代入演算
E1 op= E2
の意味するところは
E1 = E1 op E2
ではなく、
E1 = (T)(E1 op E2) // TはE1の型
すなわち、複合代入演算子は暗黙のうちに代入される側の方へのキャストを
行うというのがポイント。
後者は、複合代入演算子が使えるのはプリミティブ型/そのラッパー型、そして
+=については左辺がStringの場合のみ、文字列連結が行われる。
(右辺はどんな型でもよい)
>>629 例えば
byte b = 0;
b += 2; // 2 は int型
とかがコンパイルエラーになったらウザいでしょ。
JPanelにCanvasをはりつけてCanvasにイメージを描画しようと思ってます。
JPanel内に↓のようなMyCanvasクラスを定義してpaint()を実装しました。
private class MyCanvas extends Canvas {
public void paint(Graphics g) {
g.drawImage(resultImage, 0, 0, null); // resultImageはJPanelのインスタンス変数
}
}
JPanelでresultImageが変更されたときにmyCanvas.repaint()を呼んでいるのですが
Canvasのイメージが更新されません(一度、最小化して戻すと表示されてます)
再描画がうまくいってないようなのですがどのようにすればよいでしょうか。
- MyCanvasはCanvas(AWTコンポネント)を継承せず、代わりにJPanelを継承
- paintではなくpaintComponentをオーバーライド
でどうか?
アドバイスありがとうございます。
ただそれでもだめでした。
paintComponent()でSystem.out.println()やるとちゃんと表示されてるのでrepaint()で
メソッドは呼び出されてはいるようです。
ただはりつけたJPanelに表示はされません・・・
もとのパネル(MainPanel)では
setLayout(new BorderLayout());
imagePanel= new MyPanel();
add(imageCanvas, BorderLayout.CENTER);
ではりつけてます。
add(imagePanel, BorderLayout.CENTER)
の間違いでした
自己レスです
はりつけたMyPanelのpaintComponent()にsuper.repaint()を入れたらすぐ再描画されました。
貼り付け元のJPanelも再描画する必要があるってことでしょうか・・・
関係ないかもしれないけど、
paintComponentでsuper.paintComponentは呼んでる?
呼んでます・・・
JFrameの上にJPanelを貼り付けた場合は、paintComponent()ですぐ再描画されてたんですが、今度はJPanelの上にJPanelを貼り付けたからかと疑ってるんですが、関係ないかな。
超初心者です。
本を見ると
「swingはAWTと異なり、コンテンペインを取得し、そこにコンテンツを配置する。」
というように書いております。
で、そのとおりgetContentPane()してaddしたらもちろん上手くいきました。
流れとしてはこんな感じで。→new JFrame().getContentPane().add(new JPanel());
その後もしかしてと思って、
new JFrame.add(new JPanel())
ってやっても普通にうまくいきました。
コンテンツペインを取得する必要ってあるんでしょうか?
>>638 自己レスですが
g.drawImage(resultImage, 0, 0, this);
で解決したようです。null->thisにしました。
>>639 最近のJFrameでは不要。必要に応じて内部でgetContentPane()した先に
要求をたらい回ししてくれる。
643 :
639:2007/03/21(水) 00:48:04
おお、、ありがとうございます。
getContentPane()は面倒だけどswingの構造を理解するのに役立ってたので
ちょっと複雑な気分です。
jarファイルからカレントディレクトリにある任意のJDBCドライバを読み込ませるようにしたいのですが、
MANIFESTのクラスパスには何と記述すればよいのでしょうか?
.や*.jarでは認識しませんでした。
直接名前指定 or jre/lib/extにドライバを格納するしかないのでしょうか?
記述部さらしてみ
646 :
644:2007/03/21(水) 13:49:58
Manifest-Version: 1.0
省略
Class-Path: *.jar xxxx.jar xxxx.jar
Manifest-Version: 1.0
省略
Class-Path: . xxxx.jar xxxx.jar
という感じです。記述の仕方に問題ありますか?
ごめんなすm(^ω^#)m
static Class forName(String className)
の使い方がわかんなひ(;ω;)おっおっお
簡単なソースをいくつかキボンヌッ
(#^ω^)ノたのんだうお
独学で苦戦している超初心者です。
自分でもいろいろ調べてみたのですが、困り果てて皆さんのお力に頼ることになりました。
今、コマンドラインに数字を一行で 10,24,35,40 のような形で入力させてそれぞれの数字を表示させるものを作っているのですが、コンパイルをして実行までは出来るのですが、数字を入力したあとにエラーが出ます。
エラーメッセージをググってみたのですが、検索には引っかかるものの「これだ!」というものが見つからなかったのでココに質問させていただきました。
以下にコードの一部とエラーメッセージを記載します。
public static void main(String[] args) throws IOException {
int input[];
System.out.println("数列はカンマ区切りの文字列で入力してください。");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String numbers[] = str.split(",");
int i=0;
input = new int[i];
while(i < numbers.length){
input[i] = Integer.parseInt(numbers[i]);
System.out.println(i + "つめは" + input[i]+ "です。");
i++;
}
}
以下エラーです。
java.lang.ArrayIndexOutOfBoundsException: 0
at Test.main(Test.java:28)
Exception in thread "main"
*ココでいう28というのがコードの28行目であれば
input[i] = Integer.parseInt(numbers[i]);が28行目にあたります。
どなたか、お助けください。
> int i=0;
> input = new int[i];
だれが見てもここだ
>650
右辺の numbers[i] ではなく、恐らく input[i] から出ている例外かと。
int i=0;
input = new int[i];
この時点で input[] の要素数はゼロになっているが
それ以降 input[] の要素数を増やしていない以上 input[] の要素数はゼロのままだ。
input = new int[i];
を
input = new int[numbers.length];
にしてみたら?
653 :
650:2007/03/22(木) 11:07:57
>>652 どうもありがとうございます!解決しました!
答えだけでなく、どこがどのように間違っているかまで答えていただいて
大変勉強になりました。
>>654 個人的には、「Javaをはじめよう」以下は要らないような気もする。
char が -32768〜32767になってたり、
「リファレンス型というのは、クラスのことです」とか、間違いもちらほらあるし。
文法とかは、JLS へのリンク貼って終わりで良いとか、
入門者用のコンパイル手順を示すんなら、テキストでやるより
flash movie とかでやった方が親切なんじゃないか、と思ったり思わなかったり。
wikibook に flash 置けるのか知らんけど。
>>514 おやおや? Java家電時代の到来か?
将来は、Javaで家電制御を企んでいるのかねー? Jiniかねー?
まずはおいしいご飯からお願いします
すみませんが、質問です。
HttpServlet のソースコードは、どのソフトに含まれているのでしょうか?
たぶんTomcatにあるのだろうと思っていたのですが、うまく見つけられません。
利用中のTomcat は4.1です。
質問です。
HTTP Get のクエリ文字列から、パラメータ名とその値の組み合わせの集合を取
得するには、どうしたらいいでしょう?
>>658 classならcommon/lib/servlet-api.jarの中。ソースは入ってないよ。
661 :
658:2007/03/22(木) 18:37:21
>>660 > classならcommon/lib/servlet-api.jarの中。ソースは入ってないよ。
ありがとうございます。ソースはどこで手に入るのでしょうか?
オープンソースですから、どこかで配布はしているはずなのですが。
実は
>>659も私なのですが、以下の処理の参考にしたかったのです。
目的:URL文字列からクエリパラメータを手動で取り出す
URL文字列を与えられて、
String url = "
http://www.youtube.com/watch?v=pd74BKx0x-w";
ここからクエリ文字列を取り出し、
String qstring = new URL(url).getQuery();
//qstring = "v=pd74BKx0x-w"
ここまではできるのですが、それをパラメータと値に分解する方法が分かりません。
正規表現などで愚直に分けるしかないのでしょうか?
何か既存のAPIがあるのではないかと思うのですが。
663 :
658:2007/03/22(木) 19:06:03
>>662 ありがとうございます。
HttpServletRequestは与えられていなくて、ただURL文字列だけがあるのです。
だから「手動で」取り出す必要があります。
説明不足ですみません。
>>663 ほいっ
http://www.google.com/codesearch ?hl=ja&q=show:WeBMAMCdhTg:T67KRquB4ao:axPaDrtTH9s&sa=N
&ct=rd&cs_p=
http://download.nextag.com/apache/ tomcat/tomcat-5/v5.5.17/src/apache-tomcat-5.5.17-src.tar.gz
&cs_f=apache-tomcat-5.5.17-src/container/catalina/src/share/
org/apache/catalina/core/ApplicationHttpRequest.java
このvoid parseParameters()あたりから辿ってけばいんじゃね?
666 :
658:2007/03/22(木) 20:20:55
667 :
デフォルトの名無しさん:2007/03/22(木) 20:26:32
質問です。
server.xmlの<context>のreloadable属性が
falseかtrueかの情報を
クラスから取得する方法はありますか?
javax.servlet.http.HttpServletRequestはinterfaceだから、
ソース見ても実装情報はないよ。
669 :
658:2007/03/22(木) 20:36:56
>>668 > ソース見ても実装情報はないよ。
それはそうなのですが、ソースが無いと、Eclipseで追いづらいと思います。
なお、RequestUtil.class は catalina.jar に含まれていました。
publicクラスですが、一般ユーザが利用することが適切なのか、よく分かりません。
ところで、どのクラスがどのjarに含まれるのかを簡便に知るにはどうしたらい
いでしょう?
・1つ1つJarコマンドで表示
・拡張子をzipに変えて検索
・片端からEclipseのプロジェクトに組み込んでみる
これらよりもっといい方法はあるでしょうか?
>>669 Eclipseで追うだけなら、jadclipseを入れておくとソースがないものは
jadで逆コンパイルしたものを表示してくれたりする。
jar探しは、コマンドラインに苦痛を感じないヒトなので、
jar tfで探すかなー。Eclipseに組み込むのはいい方法だと思います。
>>671 フラグメントがあったら最後の要素が "bar#hoge" みたいにならんか?
>>672 なるほど。じゃあこれでどだ。無理矢理1行。
String[] params = url.substring(url.lastIndexOf('?')+1, url.indexOf('#') > 0 ? url.indexOf('#') : url.length()).split("[&=]");
674 :
658:2007/03/22(木) 22:50:29
>>670 ありがとうございます。参考になります。
できたら配布元のサイトでドキュメント化してくれていたら楽なのですが。
>>671-673 標準のAPIには存在しないらしいので、自分もそれなりに書いてみました。
String url = "
http://www.youtube.com/watch?v=pd74BKx0x-w";
String q = new URL(url).getQuery();
Map<String, String> map = new HashMap<String, String>();
for (String pv : q.split("&")) {
String[] p = pv.split("=");
map.put(p[0], p[1]);
}
a=&x=yみたいに値がないパラメタがあったらうまくいかない気がする。
675は
>>673ね。
>>674 たいていはそれでいいけど同じキーの値が複数あったらうまくいかないので注意。
パラメータ間の区切りに最近は;も使うので、汎用性から言ったらこれも認識する
とよい。
>>675のケースを回避するために、まず &(および; )だけで区切り、そののち=で
分解するといいだろう。
>>676を考慮するならmapの値側をコレクションクラスにする必要がある。
書式指定子について教えてください。
ある本で↓みたいなのがでてきたんですが、%が多くて何やってんのかよくわかりません。
System.out.printf(String.format("%%2d | %%%dd\n", n), r, x);
%dで10進数に変換。2は2桁の長さを表す。ということはわかったのですが、
引数に対して書式指定子がやたら多いような気が・・・
メソッドが入り子になってるからややこしいんでしょうか?
そもそもformat()の第2引数 n は何に変換されるんでしょう?
679 :
658:2007/03/22(木) 23:27:54
>>675氏のケースに対応
String[] p = pv.split("=");
↓
String[] p = pv.split("=", 2);
自分の用途には
>>676氏のケースはなさそうなので、これで何とかなりそうです。
ありがとうございました。
%%が%そのものになるというのは理解してる?
順番に書くと、
String format = String.format("%%2d | %%%dd¥n", n);
System.out.printf(format, r, x);
たとえばnが5だと最終的には System.printf("%2d | %5d¥n", r, x) を行う。
# 一つ指摘しておくと、フォーマット指定として改行を記述するには¥n
# ではなく%nを使うべき。
683 :
681:2007/03/23(金) 02:31:04
XmlNamespaceManager site:w3c.org
に該当するページが見つかりませんでした。
おや?
>>681 >どのようにXPathを記述したらいいでしょうか?
こういう事聞くレベルなら仕様を理解してない。実装されたAPI以前の問題。て言うかW3Cの仕様に対してMSの実装出してくるなんて釣りにしか見えないんだが・・・。
>XMLから<media:thumbnail> のurl属性
を取得する
ロケーションパスの書き方は分かるのか?
>>684 .NETのクラス名がw3cのページでヒットするわけ無いだろ。煽るならもっと頭使え。
googleくらい使えるようになろうな
xpath site:
http://www.w3.org/ ~~~~~~~~~~~~~~~~~~~~~~~~
686 :
681:2007/03/23(金) 05:12:15
すみません。
>>685 >
> こういう事聞くレベルなら仕様を理解してない。実装されたAPI以前の問題。
> て言うかW3Cの仕様に対してMSの実装出してくるなんて釣りにしか見えないん
> だが・・・。
おっしゃるとおり、よく理解しておりません。
> >XMLから<media:thumbnail> のurl属性
> を取得する
> ロケーションパスの書き方は分かるのか?
おそらく、
/rss/channel/item/media:group/media:thumbnail/@url
ではないかと思うのですが…。
687 :
681:2007/03/23(金) 05:18:48
追記です。
よく分かっていないのは、名前空間の扱いです。
.NETの実装を見て、JavaのXPathApiにも、addNameSpace にあたる関数があるの
だろうと考えたのですが、それを見つけられなくて困っていました。
>>685は、XmlNamespaceManagerなんぞw3c標準にないのに知るかよ!
という回答するつもりだった人からのピーデーの某氏へのイヤミです。
×という回答するつもりだった人からの
○という、回答するつもりだった人からの
「、」いっこ抜けて意味が変わってるしorz
690 :
デフォルトの名無しさん:2007/03/23(金) 12:06:23
ログを解析するアプリケーションを作りたいのですが、SwingやAWTで
UI部分を作り、エンジン部分をC言語で作る事は出来るのでしょうか?
出来る場合、JAVA側(UI)とC側(エンジン)とのやりとりはどのような
感じになるのでしょうか?
C言語は少し経験ありますが、JAVAはまったくの初心者です。
よろしくお願いします。
出来る。
やりとりはソケットを使う/JNIを使うなど。
>>691 即レスありがとうございます
その単語でぐぐったら期待通りのAPIがHITしました!
693 :
681:2007/03/23(金) 12:54:47
695 :
デフォルトの名無しさん:2007/03/23(金) 14:02:20
File#mkdirsが失敗した場合に
その原因を取得する方法ってありますか?
>>695 無いよ。
SecurityManager が許可しない場合だけは例外もらうから分かるけど。
mkdir() する前に、作ろうとするディレクトリが既に存在しても失敗するし、
同名ファイルがあってディレクトリ作れなくても失敗するし、
ディレクトリの名前が不正な場合 名前が長すぎたり名前に使えない文字が含まれたり でも失敗するし、
ファイルシステム上の権限がなくてディレクトリを作れなくても失敗する。
>>696 そうなんすか…orz
一応isDirectory()で存在しない時だけ作るようにはしてるんですが
何で失敗したのかわからないとどうしようもない…
>>693 そもそもAPIは何使ってんだ?JAXP1.3以上?
名前空間のバインディングなんてアプリケーションによっては必要ないし
バインドするプレフィックスの数によってデータ構造なり検索アルゴリズムの
最適な実装が変わるから汎用な物は作れないから実装を用意するのは無駄。
バインダくらい自分で書け。愚痴しか書いてないじゃないか?
699 :
デフォルトの名無しさん:2007/03/23(金) 23:10:02
よろしくお願いします。完全に手詰まってしまいました。
環境-
マシンA(開発機):Windows XP Pro、IIS6、WebLogic8.1、JavaSDK1.4.13
マシンB(評価機):Windows Server 2003、IIS6
マシンAで開発、デバッグしてOKなものをマシンBに置き換えています。
それぞれにサーブレットクラス1と固定値が書いてあるfinal staticメンバがいるクラス2があります。
マシンAとマシンBではクラス2のfinal staticメンバは違う値が書いてあります。
マシンAでリコンパイルしたクラス1をマシンBに置き換えます。
その後WebLogicを再起動後、マシンBを動かしてみると
マシンBでクラス1が参照しているクラス2のfinal staticメンバ変数が
マシンAの値となり、エラーが出てしまいます。
クラス2は置き換えていないのに、エラーになってしまいます。
どこかに値がキャッシュされてるとしか思えない動きなのですが、
APサーバを再起動しているのにそういうことがありうるのか、まったくわかりません。
キャッシュでハマることはまああるけどそのパターンならキャッシュ以前の話。
マシンA.クラス2をマシンBに"一度も"持っていったことがないはずなのに
マシンA.クラス2の値を参照しているなんておかしい。
なんらかの形でいっしょに持っていってしまったとしか思えない。
最適化されてクラス1にその定数の値が埋め込まれちゃってんじゃないの?
質問です。サーブレットとJAVAって違うの?
705 :
681:2007/03/24(土) 01:59:52
XPathについての自己フォローです。おそらく解決しました。
何が分からないのか自体をよく分からず調べていたのですが、まとめるとこう
なります。
・XPathの名前空間と接頭辞のバインディングの設定の、Javaでの標準的な方法
は何か?
→完全には決まっていない。それを規定するNamespaceContextは、インター
フェースだけしかなくて、実装がない。
・なぜ決まっていないのか?
→単にまだ出来ていないだけ。JAXPは現在1.3だが、1.5までには何とか。
・じゃあ、どうしたらいいのか?
→自分で非標準の実装を作るか、privateな内部クラスで使い捨てにするか、ま
たは有志の作ったライブラリを利用するか。
・こういう大事なことがXPath単体でできるようになっていないのはなぜか?
→XPathはもともとXSLTのためのもので、XSLT自体がXMLだから、XSLT内に名前
空間宣言をそのまま書けば済んでしまう。
実はXPathを知ったの自体がつい一昨日で、うまく調べられず、ずいぶん無駄な
回り道をしてしまいました。結局、
http://norman.walsh.name/2006/03/28/jaxpNamespaceContext http://www-06.ibm.com/jp/developerworks/java/060906/j_x-javaxpathapi.shtml 初見では分からなかったのですが、これらにほぼすべてが書かれていました。
解決に当たって、このスレのやり取りも非常に参考になりました。ありがとう
ございます。特に
>>685,
>>698さんには深く感謝します。
質問者の見本みたいな人だ
>>681以外の質問者のほとんどがクズに見えてきた
お前ら冷静になって良く見てみろ。箇条書きにしてるだけで結局は
仕様が定める範囲と実装がサポートする範囲と自分で実装しなきゃいけない部分を理解してないし
そもそもどのコンテキストでXPathを使いたいのか一度も言ってないんだぞ?
XSL内でロケーションを表すのに使うのかプログラム中に直接叩きたいのかすら分からず仕舞だぞ?何を教えろと?
事後報告は当然の事だ。
#XPointerの事もたまにで良いので思い出してあげて下さい。
できて当然のことでも褒めないと人は伸びない
710 :
デフォルトの名無しさん:2007/03/24(土) 12:03:27
>709ごめんなさい…
|/
_., .,、._,r hh.、 y...u,_ 、 、.,.,
.yl!).彳}゙.^゙冖^^^゙゙'⌒゙゙「{ .〕:!|ァ_ l.r.
.rl!.「.゙.′ .゙.^゙「.|^|'!.,.ri,、
_,.u:l 「″ _,..vv-─--v、、.,__゙ ´「 リ゙ .r
.-i(┴^ ,.v‐ ′ i!、 厂^'ー、_ .'゙/
.,l| .,.‐'゙r '=, .|ト! .. /_ ┘ _,
.[.′ .,r(,,vv!冖h厂 _,、、、,_ ¨゙() .゙゙il|リ冖ミ(ミ,.l|/レ'
.|| _,yr!^″ [.zli》ニ《)ミ|l;, |ノ冖ーu「.,zzzzy,{丁′
.!ミ .yr(l「′ 〔″ `.,i^ .〔.!!干「「)v)《フ
i| __,/′.} . \,,,,,_,,,,,,vr″ .゙)z ,メ゙'ly
|゙/|レr》! } .}.. /,v--r ,、u_:rフ'¬ー^″ ゙ミ
》゙|′ .ミ .| .∨ ,、 {lzトrr┘ \从,,) }:! .《
}}.,rー ミ,,ェ , .'|フ .,,zu厶  ̄ ゙'^ l!
゙|从 》″ | r -:(工ェ」zミv_ n. 〔
.》ト .′ ∨ 7vv=(干=─干ミl||l,_,z ″ 》
.《l,_ .'|! .__ , . ゙̄.. 〕
《^¨′ .゙冖'^^'''冖 v\ }
[ 、 . 〕 〔 .′ .」_ .ll′
.| | 」 ._} .hノ .:| ,.. .,.トト 〕
.} .^′ ゙《,_ .、,ノ ...厂、 .il
} _ .、 .゙゙'〜 .y,_ _,r;|¨ <、、‐ . ノ
.{, 〔 」 ´ ‐ 「ilリiアアァァァ;lllllli(リ゙} ┌ 冫.. .ア
\ ∨゙ . _ .- . ' .`゙厂¨厂゙厂'. .゙ 、' .゙. ヽ‐,r|
.ノy .´ 、 .: ' ..: .、 ' ` ' _ . .冫 -.',y;|^
712 :
コン:2007/03/24(土) 13:30:20
jsp試したいのにトムキャットの設定がむずくてだめです。
エクリプスは動くし、しかしエクリプスでトムキャットはだめ、
どこかいいサイトあったら教えてください。
713 :
デフォルトの名無しさん:2007/03/24(土) 14:25:14
>712
オレかよ(:D)| ̄|_ =3=3
NetBeans使えばバンドルされてるからそれ使えばいいと思う。
設定が難しいってのには?だが、まあやりたい事の主品はそこじゃないだろうしね
マウスカーソル消す方法ご存知ないですか?
Cursorクラス見てもそれらしい設定がないです・・・:
>>715 カーソルを消したいComponentでjava.awt.Component#setCursor(Cursor cursor)を使え。
cursor = Toolkit.getDefaultToolkit().createCustomCursor(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB), new Point(), "");
与えるImageについては別にこれでないといけないということはない。
Cursorクラスのドキュメントから全て辿れるぞ。もっとドキュメントの読み方を勉強汁。
Component#setCursorはクラス説明の関連項目から。
Toolkit#createCustomCursorはコンストラクタの説明から。
>>715 java.awt.Toolkit#createCustomCursor(Image, Point, String); に透明な Image 渡す
718 :
デフォルトの名無しさん:2007/03/24(土) 18:31:05
初歩的な質問で恐縮ですが、
<head>内に<link rel="stylesheet" type="text/css" href="css/style.css">
と入れるとjavaが動いてくれません。
色々手は尽くしてみたのですが・・
原因はなんでしょうか?
よろしくお願いします。
<link rel="stylesheet" type="text/css" href="css/style.css">
↑の一行を外すと動作してくれます。
>>718 style.cssの中でアプレットを無効化してない?
720 :
718:2007/03/24(土) 18:44:59
>>719さん
早速のご返答ありがとうございます。
今確認してみましたが、無効となるような設定はしていないようです・・
実は動いているけど見えないだけとか。
APPLET {
width: 0%;
}
こんなあからさまなのは無いと思うけど。
もう少しcssやhtmlの中身が分からないと何とも言えない。
linkタグやスタイルシートの有無でアプレットの動作が変わるなんて、どちらかというとweb製作板向きの話題かもしれんね。
少なくともその1行が無ければアプレット自身は動作しているわけだし。
もしくは、linkタグやcssの中身をアプレットで検知して動作を変えてるとか…はさすがに無いか。
722 :
デフォルトの名無しさん:2007/03/24(土) 20:08:06
というかCSSファイルの内容の一部を削除していけば、どこが原因かわかるでしょ?
ファイル名に/が入ってもいうんだっけ?
723 :
715:2007/03/24(土) 21:01:33
>>712 TOMCAT_HOME\bin\startup.bat
だけで動くじゃん。ハマるぐらいならeclipse経由で起動する必要ない。
726 :
じゃぎ:2007/03/25(日) 11:22:28
こんにちわ。
同一Webアプリケーション内の二つのサーブレット間で
同じ情報を共有したり、同じ情報を恒久的に持っていたりという意図に、
どちらかのサーブレットクラス内、あるいはその他、アクセス可能な
クラス内のStaic変数を使ったりするのはいけないんでしょうか。
また、Static変数内のものがSerializableかどうかの有無にも関係
ないんでしょうか。
ここのページのリスト3のように
ttp://www.atmarkit.co.jp/fjava/rensai2/jspservlet07/jspsevlet07_2.html application.setAttribute("counter",intCnt);
として、applicationや、ServletContextのset(get)Attiributeを使う例を
良く見るんですが、モヤモヤしていて迷っています。。よろしくお願い致します。
過去ログでもうまくみつけられなかったんですが、もし関連したページが
あるようでしたら、二言、三言キーワードのようなものを投げて頂ければ
ありがたいですます。
public static int
そのServletクラスに属するべき情報かどうかで使いわけるべき。
「特定のServletクラスが持つ情報」ではなく、
あくまで「複数Servletクラス間で平等に共有するべき情報」なのであれば
ServletContextを使うほうがいいだろうね。
729 :
じゃぎ:2007/03/25(日) 11:50:02
早速ありがとうございます。
ちょっと心配だったのは、Static変数にした場合、一時的には良くても、
ガベージコレクションなどが行われた際に、必ずしも値が保障されなく
なったりするのかな。。とか思ったりしてましたが、心配しなくても良い
ものなのでしょうか。
あつかましくて申し訳ありませんが、よろしければ、そのあたりのご教授
も頂ければ幸いに思います。
GCがstatic破壊するなら何を信じればいいんだろう
お願いします。例えば
if (list != null && list.size() > 1) {...}
でlistがnullの場合、以降の条件式は評価されないようなことに
名称はありますか?
また、他の言語では違ったりしますか?
GCがクラスローダを回収したらstatic修飾子つきも回収されるけどな
>>731 >以降の条件式は評価されないようなこと
特に名称は無い。
が、言い方としては「評価が打ち切られる」などと言われることが多い。
>他の言語では違ったりしますか?
C言語なども || や && に限ってはJavaと同じく左から評価される。
ただし、+-*/などの評価順はC言語では不定(決まっていない)。
右から評価されたり、ランダムに評価される実装の言語もあると思う。
>>734 ショートサーキット評価 の検索結果 約 988 件中 1 - 10 件目 (0.17 秒)
知名度は低いな。
そうじゃない言語があるとしたら
わざわざif文を入れ子で書かないといけないのか。つらいな
>>736 ヒント: ( )で括ればそれが先に評価される
if (((a=1) || b=1) && c=1) foobar;
739 :
731:2007/03/25(日) 12:21:18
>>733 >>734 ありがとうございます。
昔勉強したときに名前が付いていた気がしていたのですが、
質問される立場になったときに、思い出せず、もやもやしてました。
やっとスッキリしました。
>>738 いやいや、カッコでくくってもc=1は評価されてしまうから
>>731の例だとぬるぽじゃん?
742 :
じゃぎ:2007/03/25(日) 13:52:34
>>730 >>732 ありがとうございます。setAttributeのほうが、特別推奨される理由が
あるとすれば、ガベコレのようなところかなと、つたない頭で考えてました。
>>728さんにも、スッキリさせて頂きまして、ありがとうございました。
これで安心してサーブレットいじれます。
ショートサーキット評価 988件
ショートサーキット演算子 618件
短絡評価 590,000件
短絡演算子 27,500件
訳したら増えたw
""でくくったら激減。
"ショートサーキット評価" 224件
"ショートサーキット演算子" 213件
"短絡評価" 304件
"短絡演算子" 124件
こんなもんなのか。
746 :
デフォルトの名無しさん:2007/03/25(日) 16:23:20
バイナリファイルを比較する簡単な方法はないでしょうか? ……まぁ、
(1)サイズを比較して違ってたら無条件でOUT
(2)サイズが同じだったらストリームを二つ開いて、バイト単位で順次比較
とすればいいだけの話ですが、こんなの誰かが作ってるような気がしまして(汗)
MD5で比較
java.security.MessageDigest(のサブクラス)もありますな。
ダイジェスト作る時間があれば順次比較が終ってるだろw
>>746 バイト単位の比較でもいいけど、int単位とかで、もっとまとめてやってもいいかもね
てきとーなブロック単位でダイジェスト比較していくと効率がいいかもな。
>>749 >>746は簡単に実装できる方法を求めてるから速度は二の次なんじゃないかね?
そういう意味でAPI使ってハッシュを求めさせるのはコーディングが簡単だし悪くない方法だと思う。
でも、コリジョンの可能性があるから、同一ハッシュ=同一バイナリとは言い切れないのが問題。
あらかじめ MD5ハッシュが算出してあれば、それ比較してもいいけどね。
>>751 無駄な上に不確実で最悪な方法だと思うが。
755 :
デフォルトの名無しさん:2007/03/25(日) 17:28:33
質問主は誰かもう作ってるんじゃないか?
っていう質問してるのにお前等ときたら…
ハッシュ算出してあるときの話じゃない。
ハッシュを算出するには算出する範囲のビットを全部見る必要がある。
それなら見た時点でお互いを比較すれば済む話。
>>755 commons IO の org.apache.commons.io.IOUtils.contentEquals(InputStream,InputStream)
これでいいじゃん。MessageDigestも使ってるし、みんなはっぴー。
標準APIじゃなくていいのならapache.commonsにあったと思うが。
public static void main(String[] args) throws Exception {
File file1 = new File(args[0]);
File file2 = new File(args[1]);
boolean flag = true;
if (file1.length() == file2.length()) {
FileInputStream in1 = new FileInputStream(file1);
FileInputStream in2 = new FileInputStream(file2);
byte[] buf1 = new byte[1024];
byte[] buf2 = new byte[1024];
while (in1.read(buf1) >= 0) {
in2.read(buf2);
if (! MessageDigest.isEqual(buf1, buf2)) {
flag = false;
break;
}
}
in1.close();
in2.close();
} else flag = false;
System.out.println(flag);
}
759 :
758:2007/03/25(日) 18:00:02
書かれてたorz
>>758 一致しないときもストリームをcloseした方が綺麗
761 :
758:2007/03/25(日) 18:05:47
ん?閉じてると思うけど?まあ途中で例外出たらだめだけど。
>>761 すまんwhileの外だった
}の数を見誤った
でもそれはMessageDigestを使ってるといえるのかw
ハッシュ(MD5)は予めそれがわかっている場合やそれを保存しておいて
後から再利用するってことならまだ分るんだが、そんな前提もなしに
ハッシュを勧める莫迦がなんでこんなにいるんだ?
Stringクラスの説明で
「文字列は定数です。この値を作成したあとに変更はできません。」
ってあるんですけど、
String str = new String("123456789");
str = "1";
こんなふうにあとから代入しても、コンパイルエラーも出ず、代入した文字列が表示されるんですけど
変更できないってどういう意味なんですかね?
>>764 "abcde"="12345"
ってできないってことだ
1=3と同じ
>>764 それは、変数の参照先オブジェクトが入れ替わっただけ。
"123456789"で初期化したオブジェクトそのものの内容は変更できない。
>>764 str → "123456789"
だったのが
"123456789"
str → "1"
になるってこと。元のインスタンスは破壊されない(参照が無くなればガベコレはされるけど
HttpURLConnectionでHTMLソースをUTF-8でゲットしてくる際に
文字化けしてるかどうか判定する事ってできますか?
>>763 > ハッシュ(MD5)は予めそれがわかっている場合やそれを保存しておいて
> 後から再利用するってこと
だとしても分かっちゃだめだろ。ファイルが一致することの証左にはならん。
ネットでダウンロードするときに付属してることのあるハッシュコードは
飽くまでパリティチェック的な意味合いでしか使われてないと思う
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version n
umber in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
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$100(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)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
続行するには何かキーを押してください . . .
知り合いに聞いたところjavaとjavacのverをあわせれば良いといわれたんですが
よくわからない・・誰かたのんます!
773 :
764:2007/03/26(月) 01:58:19
回答ありがとうございます。理解できました。
String型の疑問がまだあるんですが、よければ回答お願いします。
メソッドに引数として参照型を与えて、その値を変更すると、int等の基本データ型とちがって
参照先の値が変更されますよね。
そこでメソッドの引数をString型にして、値を変更しても、参照変数が指しているオブジェクトは
変わらないんですが、これは値渡しみたいな事が行われてるんですかね?
それともまだ何か勘違いしているんでしょうか
static void method( String str ){
str = "java";
}
main{
String str = new String("123456789");
method( str );
System.out.println( str );//123....が表示される
}
説明下手だったらすいません。
JavaはCと同じくすべて値渡しだ。
参照型であろうとC++のような参照渡しはないので
変数の「指し先」が関数呼び出しで変化することはない。
当然「指し先の内容」が変化することはありえる。
カエレ!
Javaはすべて値渡し。これはもはや常識!
参照を値渡しする、と言わないと分からない人は一生分かりませんよ。
参照を値渡しするのとは違うだろ
Javaはこの辺りが変
780 :
デフォルトの名無しさん:2007/03/26(月) 10:53:44
コネクションプーリング使うにはネット使わないといけないのね。orz
コネクションプールができなくて、3日も鬱になったジャマイカ。
じゃばでぱけっとのもにたりんぐはできますか?
C++の参照もあれはあれで参照を狭い意味で使ってるから、
あれしか知らないで参照を語られても困るよな。
>>773 > str = "java";
その例だと参照型の値を変更してるのではなくて、
参照先そのものを変更してる。
// 甲
static void method(Calendar c){
c.add(....);
}
// 乙
static void method(Calendar c){
c = Calendar.getInstance();
c.add(....);
}
甲を呼び出した場合、呼び出し元の c は値が変更されてるが
乙を呼び出した場合、呼び出し元の c は値が変更されない。
乙内で参照される c は新たに別の Calendar オブジェクトを参照してるため、
呼び出し元の c に影響を与えないから。
あなたの例は乙に近い。
なお、String には Calendar の add に相当するような、内部の状態を変更するメソッドはない。
(あると不変オブジェクトではなくなってしまう。)
replace も substring も、返り値として String を返す。
元の String を参照しても、replace、substring される前の値と全く変化ない。
>>783 逆
C++でオブジェクトA,Bに関して
A=Bとやると痛い目にあう、それは動的アドレスのコピーであるから(純粋な参照)。
JAVAの場合はポインタの概念は無い。
JAVAの場合、A=Bはオブジェクトの代入を示す。
非常に荒っぽい言い方だと、JAVAのソースではオブジェクトの代入はstrcpy、すなはち代入。
だが、JAVAの場合、参照先の値を変えてやると参照元の値も自動的に変わってくれるという、
Cの参照とも純粋な値渡しともつかない擬似参照になる。
おそらく参照元が値を使用する時、毎回値渡しを使用してるのか。
JAVAの参照は便利だがあやふやではある。
訂正
非常に荒っぽい言い方だと、JAVAのソースではオブジェクトの
参照は
~~~~~
strcpy、すなはち代入。
>>773 >new String("123456789")
関係ないけど"123456789"自体がString型のインスタンスだからそれは冗長
というかなんで不変オブジェクトにコピーコンストラクタがあるのか謎なんだけどたぶん設計ミスだな
>>785 > オブジェクトの代入はstrcpy
え?
少し前のレスくらい読めよ・・・
とっても初心者なのですが
戻り値の意味がわかりません
return文とか適当に使っていたもので…
>>789 わからない。代入がstrcpyてどこ読めば理解できる?
ああ、代入じゃなくて参照てことか。
どっちみちわからん。
>>784 丁寧な説明ありがとうございました。
メソッド内で新しいオブジェクトへの参照が変数に代入されているので
呼び出し元では元のオブジェクトを指しているままなんですね。
>>794 そういうことです。
Stringだけなんとなく特別な印象を受けてしまいがちだけど、
"=" の意味は他の参照型(Object派生型、配列)と変わりません。
>>785 参照先の値を変えたら参照元の値を自動的に変えるって・・・本気で言ってんのか?w
Javaにポインタが無いって言葉に騙されてるとしか思えない。
Java の参照は C/C++ のポインタそのものじゃなかろうか。
ポインタ演算を隠してるだけで。
C++の参照(type&)は言語仕様的には別名(alias)と同義で、
内部実装は制約のある参照的なことやってます、だったような。
たった今始めたばかりの初心者です。
ビルドをしたら、「環境変数JDK_HOMEにJDKをインストールしたディレクトリを設定してくだい」と表示されました。
なので、変数を「JDK_HOME」、値を「C:\Program Files\Java\jdk1.5.0_11」にしたのですが、また同じことが表示されます。
どうしたらいいですか?
オブジェクトの渡し方で混乱している奴も多いだろうから、簡単な例を挙げとく。
コピーコンストラクタが正しく定義されていると仮定してくれ。
// C++の値渡し。交換できない。
void swap(Hoge x, Hoge y) {
Hoge temp = x; x = y; y = temp;
}
// C++のアドレス渡し。交換できる。
void swap(Hoge* x, Hoge* y) {
Hoge temp = *x; *x = *y; *y = temp;
}
// Cの参照渡し。交換できる。
void swap(Hoge& x, Hoge& y) {
Hoge temp = x; x = y; y = temp;
}
// Javaの『参照の値渡し』。交換できない。
public static void swap(Hoge x, Hoge y) {
Hoge temp = x; x = y; y = temp;
}
>>798 開発環境を示さないと何とも言えない。
システム環境変数のJDK_HOMEをJDKディレクトリに設定したのか、
それともIDEの環境変数をJDKディレクトリに設定したのか
いくらでも解釈できるから
>>800 あれ?もう1回やったらなぜかできました。
ありがとうございました。
こらこら。
システム環境変数を書き換えたら、IDE(またはコマンドライン)は立ち上げ直さないと駄目だぞ。
>>783 C++における参照の意味は狭いかもしれないけど
値渡し、参照渡しの意味はどの言語でも同じ。
本当の参照渡しを体験したかったらFortranをやるといいだろう。
JavaでPCに送られてくるパケットをフィルタリングすることは可能でしょうか?
可能だったら、役に立ちそうなクラスなんかも教えていただけるとありがたいです。
>>804 標準APIだけじゃ無理。
パケットキャプチャじゃなくて、パケットフィルタリングなのか。
それだと jpcap みたいな外部ライブラリ使っても無理のような。
>>799 それJavaにアドレスの中身を指示する演算子が無いだけちゃうんかと
たとえばx.valueとかを交換すれば交換できるだろ
>>806 値の交換とオブジェクトそのものの交換は違うだろう。
>>807 そこが本質じゃないって。
JAVAの場合、オブジェクトはアドレスしか指せない。プリミティブは値しか指せない。
Cは中身もアドレスも指定できる。だからオブジェクトの交換という荒業が出来る。
>>799 > // C++のアドレス渡し。交換できる。
これで交換できるってんなら、
static void swap(Object[] x, Object[] y){ Object temp = x[0]; x[0] = y[0]; y[0] = temp; }
とかすれば交換できるって話になっちまうんだが。
「アドレス渡し」とやらは Hoge* 自体の交換ができてないんだから交換できない、とした方が説明が楽。
質問者の意図とずれた話を続ける事に意味があるのかと問いたい。
>>809 参照渡し/値渡しの説明の文脈では、な。
一般的にはパラメータへの再代入は無意味と覚えときゃいいよ。
なんなら全部のパラメータにfinalをつけてもいいくらい。(Javaのfinalは再代入不可を明示するシンボル。念のため。)
コンパイルエラーが出ないのは、互換性のためだろうけど……
参照渡し/値渡しに関しては
間違ったことを書いているサイトが少なくないな。
2chでは、本は買うな、Webで十分だ、みたいな意見がよく出るけど
それも考え物だな。
>>813 俺は実際にプログラミングやっててわかったけどな。
つうか本は参考程度にしか買わないしポインタ関連なんて一冊も買ってない
>>812 >一般的にはパラメータへの再代入は無意味と覚えときゃいいよ。
呼び出し側では意味がないけど、呼び出された側では意味があるんじゃ?
>>809 > static void swap(Object[] x, Object[] y){ Object temp = x[0]; x[0] = y[0]; y[0] = temp; }
まかり間違って こーゆーのが普及したりなんかすると
「配列渡し」っていう新語ができるわけだな。たぶん。
「プログラミングやった」程度で理解した気になる奴ばかりだから、
今までバラバラな見解の悲惨なレスが繰り返されてたんだろ…
利用できるのと仕組みをおさえるのは違う
>>808 なんで本質じゃないんだよw
オブジェクトの中身を書き換えるんじゃなくてポインタ交換ができる/できないの話だよね?
なんで言語の仕組みに関してこんな大議論になってんの?
質問している初心者ならまだしも、回答者側の人間は
信頼できるソースを自分で確認して終わりだろ?
まさか皆が皆
>俺は実際にプログラミングやっててわかったけどな。
とか言っている馬鹿と同じなのか?
よくわからないところは俺様解釈で乗り切って
他人にも押し通す、これがJava厨。
こういうテキトーな態度でもなんとなく扱えてしまう言語、それがJava。
>>813 雑誌の記事で Java は参照型は参照渡し…… とか書いてあるの、結構見たような。
core JAVAには、
Javaは参照渡しだとかほざいちゃってる著者が
未だに地球上に存在していてウザイ早く氏ね
って書いてある
824 :
デフォルトの名無しさん:2007/03/27(火) 02:07:04
3人の死刑囚がいます
王様は3人の死刑囚に言いました
「ここに白い帽子3つと黒い帽子が2ある、白か黒どちらかをお前たちにかぶせ
白い帽子をかぶったものが逃げたらそのまま逃がしてやろう、ただし黒い帽子をかぶった
ものが逃げたらその場で射殺する」
死刑囚は自分がなに色の帽子をかぶっているかはわかりませんが
他の二人がかぶっている帽子の色はわかります
王様は3人とも白い帽子をかぶせました
3人はしばらく考えた後、自分が白だと確信していっせいに逃げました
さて、なぜ自分が白だと確信できたのでしょう?
※アイコンタクトとかそういう答えじゃない
全員植草教授だった
>>824 A, B, C の3人の一人Aはこう考える:
(1)自分Aが黒だったとしよう。
(2)B,Cはそれぞれ、黒(A)と白(BまたはC)を見るはずだ。
そこで彼らはこう考えるはずだ:
もし自分B(またはC)が黒だったら、黒は2つしかないのだから、
相手C(またはB)は一人で速攻で逃げるに違いない。
そうではないので、自分は白である。
(3)そこまで考えの至ったBおよびCの二人は自分Aを置いて一斉に逃げるはずだ。
(4)そうではないので、最初の仮定(1)が間違っていて、自分は白である。
そこまで考えの至った3人は一斉に逃げた。
わざわざこのスレに投下したのは
プログラマに論理的に考えさせようとしたのか。
それなら俺はあえて逆をいく。
どうせいずれ死刑になるんだからここで射殺されたところで大差ない。
だからいちかばちかで逃げ出してみた
でも、これだと「自分が白だと確信して」を満たさないか・・・
主人公がこんなところで死ぬはずないから、では
王様が黒い帽子をふたつ手に持っていた。
3人は日ごろの顧客とのやりとりにより
エスパー能力を鍛えられているプログラマーで、
なぜか、自分が白だということを、本能的に過信した。
magcup便利でし。感動しマスタ
死刑囚である3人全員がそこまで頭が切れるはずがない
Aは
>>826のように考察し逃げることとした。
Bは黒と白の帽子を前にどうしてよいかわからなかった。
Cは黒と白の帽子を前にどうしてよいかわからなかった。
Aが逃げ出したのでBはつれられ逃げ出した。
Aが逃げ出したのでCはつれられ逃げ出した。
Aは射殺された・・・
>>772 まさに「javaとjavacのverをあわせれば良い」
解決策1
% java -version
でJREのバージョンを確認。
% javac -version
でJDKのバージョンを確認。
JREと同じバージョンのJDKを入れてコンパイルしなおす。
解決策2
javacのバージョンと同じバージョンのjavaをフルパス指定で明示的に呼ぶ。
A=自分が白
B=他二人が白
P(A)=3/5
P(B)=(3/5)*(2/4)=3/10
P(A,B)=(3/5)*(2/4)*(1/3)=1/10
P(A|B)=P(A,B)/P(B)=(10/3)*P(A,B)=1/3
だから確率的には逃げたら負け
836 :
デフォルトの名無しさん:2007/03/27(火) 08:10:09
BufferedReaderのreadLineのブロックを解除したいのですが、どうしたらよいでしょうか
初心者スレでくだらねえクイズごっこやって楽しいか?
>>824 とりあえず最初にテストしろと言われてるので逃げ出すテストをしてみた
839 :
804:2007/03/27(火) 13:30:57
>>805 外部ライブラリ使っても無理ですか……。
Javaでは難しい(というか無理)なんでしょうか?
同じことを2度聞くような形になりますが、どうしても諦めきれないので返答お願いします。
;;;;彡 ミ;;;;;;;;;;;;;;;ミ
;;;チ' ィ''' ヽ、_ ___,,,,,、`ヾ、;;;;;;ヾ
〃 ./ア三三三三ヾ タィ三三三ッ、 `y;;;;チ
~" ,,=r≡ァ、 ..~ _,,二、 ̄ヾキ };;ネ
ー''"` kオッ' ,ヾ';;;, /,,ヒェア,≧ー" };;;ト
'" ー‐''" ,;;;; ::'~ヾ…‐ ´~ {;ツ
...,,,;;;;;;;:: ::::... キ::}
| ,,' ,r"'、:::: __、 {|ィ/. __
; .:: :;!、_ | 支 |`ヾ、. . : : : レ' | 力 | _ ,ィ=ヽ、 ,
'、 ..::  ̄`ー.__| 点.|_ ヽ.: : リ ._| 点 |_[_ `ヽ ヾ、
、 tェ--ニ二~_.\ /ァ ッ / \ /Y l、 `
. i `ヾ‐'ー'ーL_~≧≦二二二二二二二二二二二ナく__,ム ヽ
} `、 ` 、 ̄ ¨ ¨ "ノ '/ `ヽ、 `、y-‐ヾヽ´¨
,,〉 、 `ー = - ' / ヾ、 ゞ、___人_
/ \ 、 :::. / ヽ、 ヾ ̄´ ̄
\ :::::::::::.... ...::::リ} 、 `
\::::::::, `ー---- '::::::::/ .ト、 ー _
¨\;:,, / | `ヽ、 `ヾt、_
\,,......,,,イ ト、 `ヽ、‐―- - - 、、_ !t_
java.io.File#listFiles()ではArrayListをFile[]に変換しているようですが
1.0にコレクションがなかったから互換性のためという解釈でよいでしょうか。
>>842 どのように解釈しようが その人の勝手で良いと思われ。
Vectorはあったので、そのつもりがあればVectorにしてたと思う。
配列使うのかコレクション使うのかは、統一とれてないねえ。
真っ当な総称型があるならコレクションで決まりだろうけど
erasureなんて導入して・・・アホか。
>>845 Vector があっても、中身が File ってのを保証できないんだがな。1.4 までは。
なぜここに来てそんな遅レスを
問1
パラメータから得た値をnとして、2のn乗を求めて表示してください。
nの上限は62として、63以上が入るとメッセージを表示するようにしてください。
int型だと2の30乗までになってしまいます。
って問題なんですけど
import java.io.*;
public class kadai13{
public static void main(String[]args)throws IOException{
@
int i=1;
long a=2;
while(i<myAnswer){
a*=2;
i++;
}
if(myAnswer<=62){
System.out.println("2の"+myAnswer+"乗は"+a+"です。");
}else if(myAnswer>=63){
System.out.println("2の2乗までしか計算できないよ。");
}
}
}
この@のところに
int a=Imterger.parse Int(args[0])
ってのを使って解かなければならないんですが
分かる方教えてください。
この時期に慌てて宿題の丸投げなんかするなよ
単位落としてしまえ
宿題スレなんてのもあるのにアレだけど、
宿題に答えてやる奴ってなんなのかね?
ソフトウェア業界に対するいやがらせ?
いいじゃん。どうせお前ら技術と給料は学生並みなんだから
854 :
デフォルトの名無しさん:2007/03/27(火) 20:58:30
JConsoleにリモートで接続できません。
「接続に失敗しました」という味も素っ気も無いメッセージしか出てこないので、「どのあたりを調べればいいのか」で結構ですのでアドバイスを下さい。
調べたいのはTocatで動いているサーブレットの動作状況です。
サーバのOSはLinux(CentOS)、クライアントはWindowsXPです。
サーバ側でのローカル(Localhost:0)では接続できましたが、やはり可能ならクライアントで監視できれば嬉しいです。
オプションは、JAVA_OPTSに
-Dcom.sun.management.jmxremote.port=18080
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
としています。
使っていないポート番号ということで、8004と18080の二つを試したのですが、いずれも×でした。ファイアーウォールはテスト用サーバなので設定していません。
以上、よろしくお願いします。
初めて質問します、場違いだったらすみません(´・ω・`)
昨日からwinXPでJavaを始めた者なのですが
EclipseとNetbeans、どちらの開発環境が使いやすいのでしょうか?
また人気なのはどちらか教えて頂けませんか?
宜しくお願いします。
初心者なら迷わずeclipse
SwingやりたいならNetBeanもいいな。
つかSwingバリバリの事務アプリならNetBeans一択。
手書きでできる程度のウィンドウだけならeclipseも可。
他の部分はeclipseの方が洗練度が高いと思うけど好み次第かな。
おお、沢山のお答え有難う御座います><
Swingのことはまだ考えていないので
まずはeclipseで慣れてみようと思います。
教えて頂き有難う御座いました。
クライアントアプリならC++使えよ。
Javaは3層アーキテクチャのファンクション層が一番の強みなんだから。
Swingでクライアントアプリを発注するアホなクライアントなんてそんなにいないだろう。
初心者にC++すすめるのはアホではないの?
場合によるが、この場合はアホだと言わざるを得ないな
C++が難しいわけではない。
コーディング規約で制限しないから複雑怪奇なコードを量産する人が多いだけだ。
アドレスやメモリの概念なら基本情報処理程度の知識があるなら普通に理解できるだろう。
C++・C#・Javaを最低限使いこなすのはプログラマなら当たり前のことだ。
>>861 とりあえず、安直にそう考えたお前はアホ。
>>863 質問者のことをもっと考えてやろうな。
ってかC++が難しいとか誰が言ってるのよ?
>>863 >俺はC++をマスターしてるんだぜ!どうだすごいだろ!
まで読んだ
Swingって言ってるから画面の話なんだろうけど
C++は何使って画面作るのを想定してるんかな。
MFCでやれって言われたら俺は逃げるけどな。
非質問をスルーできない俺は素人。
swingといえばオラクルのごみくずマネージャー
>>868 Swingのことは考えてないって言ってんだろ。よく読もうな。
sunのjava認定試験申し込もうと思ったら会社名とかの入力が必須なんだけど無職だと受けれないの?