1 名前:仕様書無しさん mailto:sage [2006/08/28(月) 07:54:53 ] Sun認定Java資格 実用情報 4 【SJC-P用】 このスレッドは、Sun認定Java資格の Sun Certified Programmer for Java 2 Platform 5.0 Sun Certified Programmer for the Java 2 Platform 1.4 Sun Certified Programmer for the Java 2 Platform 1.2 に関して、具体的な『実用情報』を集めるために立てました。 過去スレ・関連スレ >>2 試験報告用テンプレ >>3 関連書籍 >>4 リンクなど >>5 ▼▼▼▼▼▼▼▼▼▼ ↓注目 ▼▼▼▼▼▼▼▼▼▼ このスレッドでは、 次の書き込みや議論は『 不要 』です。 「資格なんて意味ねーよ」 「実務経験関係なしにiStudyシコシコやってればとれる資格に意味ねぇ」 「3日で取れないやつはクソ」etc スレッドを荒らすだけの発言は他でやってください。 ▲▲▲▲▲▲▲▲▲▲ ↑注目 ▲▲▲▲▲▲▲▲▲▲ 前向きに、 SJC-Pに関する実用情報を議論するための スレッドにしましょう。
981 名前:仕様書無しさん [2008/03/15(土) 22:53:23 ] 不毛だ不毛すぎるぜ 次スレでは上みたいなのはスルーな
982 名前:972 mailto:sage [2008/03/15(土) 23:02:41 ] >>978 げ、本当だ…。 やばい、また腹が立ってきた…
983 名前:仕様書無しさん [2008/03/15(土) 23:10:14 ] >982 すまん。黙っておけばよかった。
984 名前:仕様書無しさん mailto:sage [2008/03/15(土) 23:59:10 ] それもアレだがな
985 名前:仕様書無しさん [2008/03/16(日) 19:04:36 ] 誰か教えてください。 (再来週には、SJC-Pを受けようと思っています) Java言語仕様で、 class Test { public static void main(String[] args) { int[] a = { 11, 12, 13, 14 }; int[] b = { 0, 1, 2, 3 } ; System.out.println(a[(a=b)[3]]); } } の結果が14になります。 しかし、 class Test { public static void main(String[] args) { int[] a = { 11, 12, 13, 14 }; int[] b = { 0, 1, 2, 3 } ; System.out.println(a[(a)[3]]); } } の結果は、ArrayIndexOutOfBoundsになります。 なぜでしょうか?
986 名前:仕様書無しさん mailto:sage [2008/03/16(日) 20:14:02 ] >>985 うーん、これに何の意味があるのかサッパリわからん。 こういうのがあるから資格なんぞ寝言だと思うんだが……まあいいや。 前者: a=b //aにbを代入(正確じゃないが、資格レベルならそれでいいかな) (a=b)[3] -> b[3] -> 3 a[(a=b)[3]] -> a[b[3]] -> a[3] -> 14 後者: (a)[3] -> a[3] -> 14 a[(a)[3]] -> a[14] -> インデックス超過 処理の優先順に合わせて、一個一個値を代入してみな。
987 名前:仕様書無しさん mailto:sage [2008/03/16(日) 20:20:36 ] >>986 基本的な配列の考え方だろ。 意味が無いなんてとんでもないぜ。
988 名前:986 mailto:sage [2008/03/16(日) 20:43:04 ] >>987 単なる言葉遊びに見えちまうんだよ……。 実際の現場ではこんな書き方せんだろ? まあアレだ、資格全然持ってない奴のヒガみ、とでも。
989 名前:仕様書無しさん [2008/03/16(日) 20:51:10 ] >986 なるほど、ありがとうございます。 理解出来ました。
990 名前:仕様書無しさん mailto:sage [2008/03/16(日) 20:58:25 ] System.out.println(a[(a=b)[3]]); @A これって@、Aの両方ともbにおきかわるってわけではないんだね? ではこれはどうかな? System.out.println((a=b)[a[3]]);
991 名前:仕様書無しさん [2008/03/16(日) 21:05:45 ] >989 正確ではないとは、どういう事でしょうか? 単に、ブラケット中([])の式の評価に先だってブラケットの左側にある式が完全に評価されているのだから (aにbが入ってもこの式には影響しないから) 代入という言い方が正確ではないのでしょうか? ご指導お願いします。 Java言語仕様を読んで勉強をしているので正確な理解がしたいのです。
992 名前:991 [2008/03/16(日) 21:14:01 ] >990 3だよ。
993 名前:仕様書無しさん mailto:sage [2008/03/16(日) 21:14:41 ] @Aが何を指すのか分からないんだが。a = @ b = A で合ってるか? a = b と代入した時点で、aが参照しているArrayクラスと、 bが参照しているArrayクラスが一緒になる。 もともとaが参照してたArrayクラスは、(たぶん)ガベコレでサヨウナラだ。 ((a=b)[a[3]]) : 1. a = b -> b 2. b[b[3]] -> b[3] -> 3 正確に書くんだったら、「Java言語仕様」でも参照しないとムリっぽ。 俺はあんな本全部覚えられるほど頭良くねえ。
994 名前:仕様書無しさん mailto:sage [2008/03/16(日) 21:15:08 ] >>991 代入とかくと、 System.out.println(a[(a=b)[3]]); 以下と同じということになるか、と。 a=b; System.out.println(a[a[3]]); これとはちがうからねえ。 一行で表現される式内の一時オブジェクトに代入ということかな、と。 #あ、最初の回答者ではないんで。
995 名前:仕様書無しさん mailto:sage [2008/03/16(日) 21:18:02 ] >>993 このあたりの基本文法構造は、CやC++でも同じでは?
996 名前:986 mailto:sage [2008/03/16(日) 21:27:27 ] 正直Javaは数年触ってないから自信ないよねっと。 class Test { public static void main(String[] args) { // Arrayクラスは、Java君がどっかに領域作ってくれるんじゃね int[] a = { 11, 12, 13, 14 }; // aは、Arrayクラスの在処を覚えた int[] b = { 0, 1, 2, 3 }; // bは、Arrayクラスの在処を覚えた int[] c = null; // >>991 「シャローコピー」でググって説明を探すと大吉 c = a; // aの指すArrayクラスの場所を、cに教えてやる a = b; // bの指すArrayクラスの場所を、aに教えてやる b[0] = 10000; System.out.println(a[0]); // b[0]と一緒 System.out.println(b[0]); System.out.println(c[0]); // a[0]と一緒 } } C:\test>javac Test.java C:\test>java Test 10000 10000 11
997 名前:991 [2008/03/16(日) 21:41:21 ] >994 違いますよ〜。 配列アクセスでは、ブラケット([])の式が評価される前に ブラケット([])の前にある式が完全に評価される事が保障されています。 その評価された値は別の場所に記憶されます。 たとえば、 class Test { public static void main(String[] args) { int index = 1; try { skedaddle()[index=2]++; } catch(Exception e) { System.out.println(e + ", index=" + index); } } static int[] skedaddle() throws Exception { throw new Exception("Ciao"); } } の結果は java.lang.Exception: Ciao, index = 1 となります。 ブラケット[]の中の式は評価されていません。
998 名前:仕様書無しさん mailto:sage [2008/03/16(日) 21:43:18 ] 何だお前ら、珍しくjavaの話してるな・・・
999 名前:986 mailto:sage [2008/03/16(日) 21:47:25 ] >>991 正確には「a = b」は bが指しているArrayクラスの位置を、aに代入する になる。 言い換えると「a = b」は a[0] = b[0]; a[1] = b[1]; a[2] = b[2]; a[3] = b[3]; の代用にはならん。 後、揚げ足取られるとウザイんで、 何でもかんでも「正確じゃない」って書いてる。
1000 名前:986 mailto:sage [2008/03/16(日) 21:48:42 ] まるっこコピーが欲しいならArray#clone()だろうか。 class Test { public static void main(String[] args) { int[] a = { 11, 12, 13, 14 }; int[] b = { 0, 1, 2, 3 }; // 1. bと同じ内容のArrayクラスを作る // 2. aに、1で作ったArrayクラスの場所を教えてやる a = b.clone(); b[0] = 10000; System.out.println(a[0]); System.out.println(b[0]); } } ハイ後は適当にヨロシク。あと次ぎスレへGO。
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。