【初心者】Java質問・相談スレ4【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
00011
NGNGなお、ソースを貼るときには、半角空白が消える仕様のため、タブ1つを全角空白2つに
置換してから投稿しましょう。雑誌や宿題などの疑問を質問するときは出展を明記した
ほうが解決が早いです。
関連情報は >>2-10 あたりにあります。 (一部 dat落ちやHTML化待ち)
JavaScriptの質問はWeb製作板へどうぞ。
web制作管理
http://pc.2ch.net/hp/
パソコンの基本操作に関しては、PC初心者板や、各OS板などで質問しましょう。
パソコン初心者@2ch掲示板
http://pc.2ch.net/pcqa/
上級者の方で教える技術が無い方は下記スレでダベりましょう。
初心者無視! Java相談室 その9
http://pc.2ch.net/test/read.cgi/tech/1021555964/
基本的にsage進行でおねがいします。
0792デフォルトの名無しさん
NGNGそう、ファイルクローズの保証のために finally の中で close() を
呼び出したいから、try ブロックの外で宣言しておかないとまずい。
0793名前
NGNGありがとSUN
0794デフォルトの名無しさん
NGNG0795sage
NGNG0796デフォルトの名無しさん
NGNG2ch語使わないともっと萌えます。
0797デフォルトの名無しさん
NGNGtry {
BufferedWriter out = new BufferedWriter(new FileWriter("hoge.txt"));
try {
out.write("hoge");
} finally {
out.close();
}
} catch (IOException e) {
//エラー処理
e.printStackTrace();
}
ぐらいしないの?
ちゃんと考えないとネストが深くなりすぎるが。
0798デフォルトの名無しさん
NGNG0799デフォルトの名無しさん
NGNG好き好き。ってか無駄に try 重ねると白痴に見える。
0800デフォルトの名無しさん
NGNG0801デフォルトの名無しさん
NGNG0804デフォルトの名無しさん
NGNG誰がアタマが悪い人なの? あなたの中で・・・ なんかあなたの考え間違っていそう。
0805732
NGNG昨日、Javaを初心者用テキストで勉強し始めて、JDKをC:\jdk1.3のフォルダにインストール。
パスを通すということでC:のAutoexec.batにPATH C:\jdk1.3\bin;%PATH%と入力。
MS−DOSプロンプトで2数の和を求めるプログラムSample1を入力。
コンパイルして、.CLASSファイルが作られたことを確認。
しかしJavaコマンドを実行すると、
Exception in thread "main" java.lang.NoClassDefFoundError: Sample1
とエラーがでるのです。何度テキストを見ても間違った操作をしているようには思えないのですが…。
どなたか対応策を教えていただけないでしょうか。
0806デフォルトの名無しさん
NGNG必死だな(藁
0807デフォルトの名無しさん
NGNGout.write() で例外が発生して、その影響で out.close() からも例外が
発生した場合、障害の大本の原因であろう out.write() 側の例外情報が
報告されないな、そのコードだと。JDBC の Connection 関係で同じよう
なコード書いてくれるなよ。
0808デフォルトの名無しさん
NGNGhttp://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/NoClassDefFoundError.html
0809765
NGNG> パスを通すということでC:のAutoexec.batにPATH C:\jdk1.3\bin;%PATH%と入力。
OSはなにつかってます? OSによってパスを通す方法が異なりますよ。
> Exception in thread "main" java.lang.NoClassDefFoundError: Sample1
実行するときは、クラスのあるディレクトリで
java Sample1
ですよね?
0810デフォルトの名無しさん
NGNGjava Sample1.class
とでもしてるのか
大文字小文字を区別してないかだろうな・・・
0811デフォルトの名無しさん
NGNG答えられないのなら いちいち >>801 のようなこと書くなよ。
あっごめん >>801 = >>806 のような馬鹿は放置でしたね。
0812797
NGNG} catch(IOException e) {
//エラー処理
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch(IOException e) {
//またエラー処理
e.printStackTrace();
}
}
}
の方がよっぽど白痴に思えるがな。
807の問題は確かにある。あともうひとつ穴があるんだがこれはまだ指摘されてないな。
801は807を以って797を頭悪いと評しているのか?俺も興味あるな。
0813デフォルトの名無しさん
NGNG> java Sample1.class
> とでもしてるのか
その場合は
Exception in thread "main" java.lang.NoClassDefFoundError: Sample1/class
になりますね。
0814デフォルトの名無しさん
NGNG0815デフォルトの名無しさん
NGNG0816っていうかウザいよおめーが!!
NGNG>>815
上級者の方で教える技術が無い方は下記スレでダベりましょう。
初心者無視! Java相談室 その9
http://pc.2ch.net/test/read.cgi/tech/1021555964/
0817デフォルトの名無しさん
NGNGなにに大して邪魔なんですか?どう邪魔されたのか教えて下さい。
0818デフォルトの名無しさん
NGNG0819デフォルトの名無しさん
NGNGどっちかていうとお前が粘着です。残念ですが・・・
0820デフォルトの名無しさん
NGNGだれか口に綿を詰めて黙らせてあげて!!
0821デフォルトの名無しさん
NGNG説明できるね。788では最終的にファイルをclose()できないときは
ほっておくという意図を伝えたくて/* */と書いたはずなのに、797はそれを読み取れずに
またエラー処理してprintStackTraceするコードに/* */があった部分を書き換えてる。
#まあもしかしたら悪意があって、わざわざ冗長なものにしているのかもしれんけど。
0822デフォルトの名無しさん
NGNGしつこっ!!!(藁
0823デフォルトの名無しさん
NGNGおめでてーな
0824デフォルトの名無しさん
NGNG0825デフォルトの名無しさん
NGNG0826デフォルトの名無しさん
NGNG>out.write() で例外が発生して、その影響で out.close() からも例外が
>発生した場合、
てのは具体的にどんなときだ?
out.write()で例外Aが発生して、out.close()でも例外Bが発生するような状況なら
例外Aも例外Bも発生した原因は大概同じではないか?
同じならout.close()で発生した例外Bが報告されれば十分ということになる。
JDBCでも同じ。
0827797
NGNG0829デフォルトの名無しさん
NGNGあるんだよ、データベースで。「クローズできません」「トランザクションエラー」の
エラーコードで済まされているのが。もともとの例外なら「DB のヒープがいっぱい」
「トランザクションログがいっぱい」などのエラーコードが入ってるんだけど。
ファイルシステムの障害は運良くぶち当たったことが無いので何とも。でも inode が
おかしくなったりしたらこういう状況で出るかも。
0830デフォルトの名無しさん
NGNG理由はout.close()が例外を出し得るって事がコードから伝わってくるから。
それにwriteに失敗した時のエラー処理とcloseに失敗した時の処理は
分けて考えなければ成らないかも知れないし。
0831デフォルトの名無しさん
NGNGクラスパスの設定
http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/win32/classpath.html
を読んでください。あと、参考書を使っててそのサンプルソースが
インターネット上で読めるときには署名とURLを示しとくと、ひまな人が読んでくれるかも。
0832デフォルトの名無しさん
NGNG0833831
NGNGttp://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/findingclasses.html#userclass
のほうがいいかな。
0834デフォルトの名無しさん
NGNG普通システムってのは多重障害は想定しない、つまりある障害が原因で発生した
別の障害までは追求しないという考えがある (データ壊れたとかは別だが)。
で、最初に発生した障害 (それこそトランザクションログがいっぱいになった
とか) が原因で close() に失敗した場合、close() の例外じゃなくて最初の
例外を通知すべき、とあれこれ考えて最終的に >>788 になったわけ (このため
通知方法が無ければ close() の失敗は切り捨てるようになった)。最初は俺も
汚いコードだと思ったんだがな、もう慣れた。
ってか >>797 って Web 基○だか WA○s だか作ってない? どこかで見た
記憶があるぞ、そのコード。
0835デフォルトの名無しさん
NGNG0836797
NGNG>あるんだよ、データベースで。「クローズできません」「トランザクションエラー」の
>エラーコードで済まされているのが。もともとの例外なら「DB のヒープがいっぱい」
>「トランザクションログがいっぱい」などのエラーコードが入ってるんだけど。
つまり、2つの例外が発生した原因は同じものだが現実としてJDBCドライバが
正確な報告をしないから別に処理しなければならない、ということか。
>>830
>理由はout.close()が例外を出し得るって事がコードから伝わってくるから。
>それにwriteに失敗した時のエラー処理とcloseに失敗した時の処理は
>分けて考えなければ成らないかも知れないし。
797でも十分伝わってくると思うが。というか、例外発生の原因が同じなら
writeとcloseの失敗をStackTrace以外で区別する意味はないはず。
0837732
NGNGOSはWINDOWS98です。クラスがあるレジストリで間違いなく Java Sample1 と入力しています。
大文字小文字の区別も何度も確認しました。なんでうまく行かないんだろう…。
Autoexec.batに@SET CLASSPATH=C:\PROGRA~1\PHOTOD~1.0\ADOBEC~1 とかあるんですが
こういうのが影響してるってことは無いですよねー…。
0838デフォルトの名無しさん
NGNG>>833を読んでわからなかったら、コマンドラインから
dir
と
set
を実行してくれる?
0839831
NGNGそれ。832のリンク先を読んでくれているのならわかりますが、
環境変数CLASSPATHを設定していると、ユーザクラスパスのデフォルト値
であるカレントディレクトリをオーバーライドします。
0840831
NGNG0841デフォルトの名無しさん
NGNGjava -classpath . Sample1
とやってみてください。
0842797
NGNG>普通システムってのは多重障害は想定しない、つまりある障害が原因で発生した
>別の障害までは追求しないという考えがある (データ壊れたとかは別だが)。
なるほど。堅固性が要求される場合には現実に合わせて別に処理する、と。
しかしまだ引っかかるな。JDBCドライバの実装に足を引っ張られている気がする。
プログラマは >>769 >>812 のような冗長なコードを書かなければならんのか。
そこまでシビアな状況でない時はやっぱり797のコードを書くだろう。
>ってか >>797 って Web 基○だか WA○s だか作ってない? どこかで見た
いや。別人だ。
0843732
NGNG833読んでみましたがまだ理解するには難しいです…。setを実行してみたところ
C:\Java1\chap2>set
TMP=c:\windows\TEMP
TEMP=C:\windows\TEMP
PROMPT=$p$g
winbootdir=C:\WINDOWS
COMSPEC=C:\WINDOWS\COMMAND.COM
CLASSPATH=C:\PROGRA~1\PHOTOD~1.0\ADOBEC~1
PATH=C:\JDK1.3\BIN;C:\WINDOWS;C:\WINDOWS;C:\WINDOWS\COMMAND;C:\PROGRA~1\NETWOR~1
\MCAFEE~1;C:\PROGRA~1\GRISOFT\AVG6
windir=C:\WINDOWS
BLASTER=A220 I5 D1 T4 P330
と表示されました。
他のプログラムで設定されている環境変数CLASSPATH?が影響しているということでしょうか。
0844デフォルトの名無しさん
NGNGそうですね。それをはずせばいい。
たぶん、
java -classpath . Sample1
でもいいと思いますけど。 Sample1 の前のどっとを忘れずにね
0845831
NGNG出てきましたね。個人的には環境変数CLASSPATHを設定するのって反対
なんだけど。あと、lib/extをユーザアプリが使うのとか。
0846732
NGNG! ホントですね。java -classpath . Sample1で実行されました。
「それをはずす」というのはただ消す、というわけにはいかないのでしょうね。
当面は −classpath を足した方法で進めていこうと思います。
みなさん本当にありがとうございました! 最初から挫折しないですみました。
0847デフォルトの名無しさん
NGNGがんばれ〜
0848デフォルトの名無しさん
NGNGなんでこんなに空行を入れるんだろう…
0849デフォルトの名無しさん
NGNG例えばCのprintf("%02d", i);と同等なコードはJavaではどう書きますか?
0850797
NGNGBufferedWriter out = new BufferedWriter(new FileWriter("hoge.txt"));
try {
out.write("hoge");
} finally {
out.close();
}
を
using (BufferedWriter out = new BufferedWriter(new FileWriter("hoge.txt"))) {
out.write("hoge");
}
のように書ける。
これから見て取れるのは、途中で例外を投げる場合は、「closeでは失敗しない」か
「closeで発生させる例外でも同じ情報を提供すべき」という思想だと思ってるが、
ドライバによってはそういう考えが欠けているということなんだろう。
※C#は触ったことないから少し違うかも。
>>846
autoexec.batに
set CLASSPATH=%CLASSPATH%;.
で、再起動、でもいけると思うよ。738でも書いたけど
0851797
NGNGDecimalFormat df = new DecimalFormat("00");
int i = 5;
System.out.println(df.format(i));
かな。細かい書式はAPIドキュメントを見れ
0852デフォルトの名無しさん
NGNGJAVAでない例がなぜここに?
0853デフォルトの名無しさん
NGNGmainでmoveメソッドを呼び出して、そこまでは成功してます。
それでmoveメソッド内でできた変数xをメイン内で表示させたくて
以下のようにしたんですがSystem.out.println(x);のとこでエラーがでてしまいます。
エラー内容はシンボルを解釈処理できませんとのことです。
書き方がどのようにおかしいのかおしえてもらえないでしょうか
public static void main(String[] args){
sample w=new sample();
w.move(args);
System.out.println(x);
}
0855デフォルトの名無しさん
NGNG何エラーよ?
0856Rina ◆tI333vNE
NGNG落ち着けw 何エラーとかそういう問題じゃない.
mainメソッドの中にxの宣言が無いだけじゃないかw
>>853
質問の意図がよく掴めないんだが, moveメソッドの中の
変数xを参照しようとしているのかな?
public class sample {
public void move(String[] args) {
// ここでxを定義している?
}
}
public class hoge {
public static void main(String[] args) {
sample w = new sample(args);
w.move(args);
System.out.println(x);
}
}
もしこんな感じならxは表示できないよ. 対処法はケースバイケースだけど
xをsampleクラスのフィールドにするといいんじゃないだろうか. 例えば
こんな感じ.
public class sample {
// TYPEはdoubleなりintなりクラスなりお好きなものを.
public TYPE x;
public void move(String[] args) {
// ここで x をゴニョゴニョする.
}
}
public class hoge {
public static void main(String[] args) {
sample w = new sample();
w.move(args);
System.out.println(w.x);
}
}
これならうまくいくと思う. 詳しく, あるいは正しく理解したいのなら,
変数のスコープについて本やサイトで勉強するといいと思う. 頑張ってね.
0857デフォルトの名無しさん
NGNGお前、この質問にちゃんと答えて偉いな。俺は「moveメソッド内で
できた変数x」の表現から x を return で返してるかと思ったが。
0859デフォルトの名無しさん
NGNGsuper ( ... );
と書きますが、このコンストラクタが例外を持っているので、
try {
super ( ... );
} catch ( ... ) {
...
}
としたいのですが、super(コンストラクタ)の呼び出しは、
先頭文でなければいけませんと言われてしまいます。
こういう場合、スーパークラスのコンストラクタの例外は、
とれないのでしょうか。なにかいい方法はないんでしょうか。
0860デフォルトの名無しさん
NGNGサブクラスのコンストラクタも例外投げる宣言するのでは。どうしても
というなら、(ぜんぜんきれいじゃないけど) サブクラスかつラッパーな
クラスにするとか。
public class A{
public A() throws Exception{…}
public int hoge(){…}
}
public class B extends A{
private A a = null;
public B(){
try{
a = new A();
} catch(Exception ex){…}
}
public int hoge(){return a.hoge();}
}
0861デフォルトの名無しさん
NGNGpublic static void main(String[] args) throws Exception {
new Derived();
}
public Derived() throws Exception {
super();
}
}
class Base {
public Base() throws Exception {
throw new Exception("例外発生!");
}
}
ではどう?
コンストラクタで例外が発生したということは、そのインスタンスのすべての
メンバは不定値になるから、派生側でも同じ例外を投げるのが正しい。
catchしたところで意味のある処理をすることは不可能。
0862861
NGNG>サブクラスかつラッパーなクラスにするとか。
意味ないような・・・
0863Rina ◆tI333vNE
NGNG/** 実現したいであろうコンストラクタ */
public HogeClass(FugaClass arg) {
try {
super(arg);
} catch (XXXException e) {
// 例外処理
}
}
/** こんな風に書いたら? */
public HogeClass(FugaClass arg)
throws XXXException {
super(arg);
}
子クラス(この例だとHogeClassね)を使用する側でXXXExceptionに
ついての例外処理を行わないといけないけど, こっちの方がいいと思う.
どうしてもっていうんなら, 親クラスにしたいクラスのインスタンスを
子クラスに持たせて, 子クラスにラッパーを実装するって手があるが
あんましお勧めできない.
0864Rina ◆tI333vNE
NGNG0865デフォルトの名無しさん
NGNG返答ありがとうございます。
>>860
確かにそれなら例外とれますねー。
ただ、あんまりやりたくない方法ですね。
>>861
それだと、Derived ()は使う人に、
例外を通達できませんよねー。
0866860
NGNG出されるので例外宣言しなきゃコンパイルできないんだ。布団の中に
入って気がついた。
>>865
例外の通達が目的なら素直に throw してください。
0868デフォルトの名無しさん
NGNGいや、スーパークラスの引数有りのコンストラクタは、
例外が発生した場合、例外を使い手にスローしますが、
サブクラスでも同じように、使い手に例外をスローしたいのです。
もしかして、
public HogeClass(FugaClass arg) throws XXXException {
super(arg);
}
だけで、例外を使い手にスローしてくれますか?
0870861
NGNG>例外を通達できませんよねー。
ん?普通にできるけど。
例にExceptionを使ったのがまずかったか?
要するに基底クラスと同じ例外を投げる。Stream/Writer系のクラスは全部こうなってるはず。
0872861
NGNG> super(arg);
>}
>だけで、例外を使い手にスローしてくれますか?
861のコードはそのままコンパイル・実行できるから確かめてみるといい。
super(arg);
で例外が発生→catchされなかったら呼び出し元に例外が投げられる。
ごく普通の動作。
0873860
NGNGあまりにも糞な作りのクラス (他チーム製) をチーム全員に使わせる
ときやる方法だよ。API の仕様上は A でなければいけない、しかし
A クラスを素で使わせるとトラブル続出な予感、な時にチーム先発実装
部隊が後続部隊のためにやる方法。
0875860
NGNG0876861
NGNG0877Rina ◆tI333vNE
NGNG0880860
NGNG0882861
NGNG0883shige
NGNGhttp://feeds.directsex.com/res/kinky/res/liveindex1.asp
0884デフォルトの名無しさん
NGNG「System.out.printlnの出力結果って、どこに表示されるの?」
……いやぁ、デバッグ用にラベルを表示させたいだけなんですけどね(^^;
それとも、Exceptionが出るとSystem.out.printへの出力は消えちまうのだろうか?
もちろん環境により千差万別なのは判っているので、「まずはこの設定を見れ!」
という所から教えていただけると非常に助かります。何卒お助けを(拝)
0885デフォルトの名無しさん
NGNGjava.lang.SystemのAPIドキュメント
やろうとしてることは多分
java.lang.System#setOut(PrintStream out)
0886デフォルトの名無しさん
NGNGCのがよっぽどマシ!
だれかJavaの本質をレビューしてくれ!
Cのがいいだろ?!
0887デフォルトの名無しさん
NGNGに入れた値を
11 12 13
21 22 23
という風に行列表示したいです。
コマンドプロンプトでは縦に一列に並んでしまいます。
どうすればいいでしょうか?
0888デフォルトの名無しさん
NGNGお前は多分
System.out.println()したんだろ?そうじゃなくて
System.out.print(array[i][j])しれ。
0889デフォルトの名無しさん
NGNGあほくさ〜
0890デフォルトの名無しさん
NGNG>>5
0891デフォルトの名無しさん
NGNGclass Hello {
public static void main(String args[])
{
double [][] array = new double [2][3];
for(int i=0;i<2;i++){
for(int j=0; j<3;j++){
array[i][j]=Math.random();
}
}
System.out.println(array[i][j]);
}
}
を試してみました。
System.out.println(array[i][j]);
iやjを解釈処理できませんとでました。どうしたらいいのでしょうか?
0892デフォルトの名無しさん
NGNGと思って、ループ書いてみたのですが、うまくいきません。
これはどこがおかしいのでしょうか?
class Hello {
public static void main(String args[])
{
double [][] array = new double [2][3];
for(int i=0;i<2;i++){
for(int j=0; j<3;j++){
array[i][j]=Math.random();
}
}
for(int i=0; i<2;i++){
for(int j=0; j<3; j++){
System.out.println(array);
}
}
}
}
■ このスレッドは過去ログ倉庫に格納されています