★★Java質問・相談スレッド138★★at TECH
★★Java質問・相談スレッド138★★ - 暇つぶし2ch1:デフォルトの名無しさん
10/05/01 12:46:59
1 名前:デフォルトの名無しさん[] 投稿日:2010/03/16(火) 10:23:04
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    URLリンク(pc11.2ch.net)
Webプログラミング URLリンク(pc11.2ch.net)
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 URLリンク(www.wikiroom.com)
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
★★Java質問・相談スレッド137★★
スレリンク(tech板)

次スレは>>950あたりで。

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
URLリンク(www.wikiroom.com)


2:デフォルトの名無しさん
10/05/01 12:47:40
**** 関連スレッド案内 ****
■ AWT と Swing は --
Java低速GUI Swing 9
スレリンク(tech板)
■ SWT は --
Java 高速GUI SWT 3
スレリンク(tech板)

■ NTT DoCoMo の iモード携帯電話用 Java (iアプリ) は --
iモード携帯電話用Java(iアプリ) Part20
スレリンク(tech板)
■ DoCoMo 以外は --
CLDC+MIDP+携帯電話用Javaスレッド part 9
スレリンク(tech板)
■ Androidアプリの作成は --
GoogleAndroidアプリ作成part3
スレリンク(tech板)

■ 課題・宿題は --
★★ Java の宿題ここで答えます Part 69 ★★
スレリンク(tech板)

■ NetBeansに関する雑談は --
NetBeans Part5【Java/C++/Ruby/Python/PHP】
スレリンク(tech板)
■ Eclipseに関する雑談は --
Eclipse統合M29【Java/C++/Ruby/Python/Perl】
スレリンク(tech板)

3:デフォルトの名無しさん
10/05/01 12:48:21
**** 開発環境が必要の場合は ****
■ J2SE 5.0 (1.5.0)
URLリンク(java.sun.com)
■ Java SE 6
URLリンク(java.sun.com)

**** 実行環境だけが必要の場合は ****
■ Java ソフトウェアのダウンロード
URLリンク(www.java.com)

4:デフォルトの名無しさん
10/05/01 12:49:47
ありゃ、1行余分にコピーしてるな、まあいいか
乙>俺w

5:デフォルトの名無しさん
10/05/01 13:44:13
1>>乙

6:デフォルトの名無しさん
10/05/01 14:27:15
otu

7:デフォルトの名無しさん
10/05/01 14:39:12
何故、左シフトには論理左シフトと算術左シフトの2種類無いの?右シフトには論理右シフトと算術右シフトの両方あるのに

8:デフォルトの名無しさん
10/05/01 14:41:55
中央シフトが無いのは差別ニダ!

9:デフォルトの名無しさん
10/05/01 15:07:46
>>7
それはね、論理左シフトと算術左シフトは結果が同じだからですよ。

10:デフォルトの名無しさん
10/05/01 15:09:39
符号には影響されないってことか

11:デフォルトの名無しさん
10/05/01 15:18:42
つまり算術左シフトは符号無視して論理左シフトと同じように
 10000010 (-126)  →  00000100 (4)
になるってこと? 1000100(-60) にはならないってこと?

12:デフォルトの名無しさん
10/05/01 15:20:59
>>11
アホ

13:デフォルトの名無しさん
10/05/01 15:22:43
>>11
勉強しなおせ

14:デフォルトの名無しさん
10/05/01 15:23:26
>>11
低脳のクズが市ね

15:デフォルトの名無しさん
10/05/01 15:33:34
清清しいまでの自演

16:デフォルトの名無しさん
10/05/01 16:01:46
自演乙


17:デフォルトの名無しさん
10/05/01 16:15:59
(´・ω・`)

18:デフォルトの名無しさん
10/05/01 16:17:16
>>11
算術シフトは符号ビットを入れるルール
× 1000100
○ 1000101

19:デフォルトの名無しさん
10/05/01 16:23:59
あれ俺まで混乱してきた
1001 1000 (-104)を算術左シフトすると
1011 0000 (-80)になっちまう

20:デフォルトの名無しさん
10/05/01 16:25:35
算術左シフトの定義からして符号ビットは無視します^^;;

21:デフォルトの名無しさん
10/05/01 16:32:34
元 1 000 1000 (符号付8ビット整数)

算術
左シフト 0 001 0000
右シフト 1 100 0100

論理
左シフト 0 001 0000
右シフト 0 100 0100

22:デフォルトの名無しさん
10/05/01 16:38:39
>>8
上シフトや下シフトが無いのも差別ニダ!

23:デフォルトの名無しさん
10/05/01 16:42:27
どうやら俺の理解が足りていないようだ

>>21
論理シフトは符号付に向いてないからいいとして
算術左シフトで、結果的に元の数が負だったのが
00010000という負でない数になってるのは正しいのですか?

24:デフォルトの名無しさん
10/05/01 16:46:25
ビット演算 - Wikipedia
URLリンク(ja.wikipedia.org)
Wikipediaだと算術左シフトは符号ビット無視してる

シフト演算 - Security Akademeia
URLリンク(akademeia.info)
このサイトだと算術左シフトは符号ビット残してる

どっちが正しいのか



25:デフォルトの名無しさん
10/05/01 16:50:57
CASL II だと算術左シフトは符号ビット残す。

CやJavaだと算術左シフト=論理左シフトになる。

26:デフォルトの名無しさん
10/05/01 16:55:37
>>19
符号ビット残すと数値がおかしくなるので
算術左シフト自体に利用価値が無い。使うような用途が無い。
だから存在しない

27:デフォルトの名無しさん
10/05/01 17:24:56
つまり
10011000 (-104)を-208にするためにはどうすればいいってばよ?

28:デフォルトの名無しさん
10/05/01 17:48:54
>>21
8bitしかかいてないのでbyteデータだとすると
論理
×右シフト 0 100 0100
○右シフト 1 100 0100
なぜなら、論理シフトであろうと、シフトする前に32bitに符号拡張される謎仕様だから

29:デフォルトの名無しさん
10/05/01 18:00:49
理論上じゃなくてまずJava仕様だったなwスレ的にw

30:デフォルトの名無しさん
10/05/01 18:05:15
>>27
int a=-104;
System.out.println("a="+a);
a*=2;
System.out.println("a="+a);

//Output
// a=-104
// a=-208

31:デフォルトの名無しさん
10/05/01 18:20:16
>>27
8bitでは-208は表せませんが

32:デフォルトの名無しさん
10/05/01 20:58:15
自分をシフトしたいわ

33:デフォルトの名無しさん
10/05/01 21:04:17
>>31
8bit整数を負符号オンリーで現せば ほら 0~-255 この通り1

34:デフォルトの名無しさん
10/05/01 21:30:38
そんな一般的でない符号化が許されるなら、1ビットで-208表したっていいだろ。0ビットでもいいかもな。

35:デフォルトの名無しさん
10/05/01 22:08:47
0bitは無理だろ

36:デフォルトの名無しさん
10/05/01 22:19:55
Javaに限らず
算術左シフトなんて需要ないだろ・・・

37:デフォルトの名無しさん
10/05/01 22:30:05
>>34

int hugo(byte n) {
return -127+(int)n;
}

38:デフォルトの名無しさん
10/05/01 23:39:30
>>36
Javaに限らなければ需要はあるぞ
オーバーフローフラグを持つCPUなら算術シフトと論理シフトでフラグの変化が違う

39:デフォルトの名無しさん
10/05/02 00:06:29
それでも負数に使うことは無いだろう

40:デフォルトの名無しさん
10/05/02 01:46:57
内部クラスでthisって使ったらthisは何を参照してることになるの?

41:デフォルトの名無しさん
10/05/02 03:38:40
>>40
内部クラス

42:デフォルトの名無しさん
10/05/02 04:33:26
>>41
なるほど。以外に不便そうだな内部クラスってのは

43:デフォルトの名無しさん
10/05/02 04:38:57
class ClassA {
private static ClassA classA;
ClassA() {
classA=this;
ClassB classB=new ClassB();
}
void hoge() {
System.out.println("hoge!");
}
class ClassB {
ClassB() {
this.hoge();
ClassA.classA.hoge();
}
void hoge() {
System.out.println("hoge?");
}
}
}

44:デフォルトの名無しさん
10/05/02 10:52:12
全ての植物は植物クラスを継承する
全ての食物は食物クラスを継承する

このような考えを元に継承を考えたとき、多重継承が無いJavaでは
どちらにも該当するりんごクラスなどをどのように実装すればいいんでしょうか?

45:デフォルトの名無しさん
10/05/02 11:36:03
class Plant{
}

interface Eatable(
}

class Apple extends Plant implemnts Eatable{
}

こんなんでどうでしょ?
食べられるものにはEatableを実装と言うことで。

46:デフォルトの名無しさん
10/05/02 12:55:39
正直継承よりはインタフェースにこだわった方がいいよ。
あと別にクラスで無理やり自然界を記述しなくてもいいから。

47:デフォルトの名無しさん
10/05/02 13:00:46
で、Java 7 は何時出るんだよ?

48:デフォルトの名無しさん
10/05/02 13:16:38
>>43
そんな危ないことしなくても、外側のメンバを直接呼び出すか、
名前がかぶっているなら ClassA.this.hoge(); でいい

49:デフォルトの名無しさん
10/05/02 15:12:41
>>48
クラス名.thisの参照方法を知らないんだろ。

50:デフォルトの名無しさん
10/05/02 15:38:55
public ClassA {
private static ClassA classa = new ClassA();

private ClassA() { new ClassB(); }
public ClassA getInstance() { return classa; }
public void hoge() { System.out.println("hoge!"); }

private class ClassB {
public ClassB() { hoge(); ClassA.hoge(); }
public void hoge() { System.out.println("hoge?"); }
}
}

何となく、>>43のを書き直してみた
専ブラで書いたから、スペルとか間違えてるかも


51:デフォルトの名無しさん
10/05/02 23:25:06
>>48-49
>クラス名.this
kwsk


52:デフォルトの名無しさん
10/05/02 23:27:13
>>50
本来の形から>>40の意図に合わせて単純化されたクラスをそのように直してしまってもいいのでしょうか?

53:デフォルトの名無しさん
10/05/02 23:32:55
結論: 設計を見直せ

54:デフォルトの名無しさん
10/05/02 23:34:11
>>51
Java で内部クラスから外部クラスの関数を明示的に呼ぶときはどう書くのか教えてください。 - 人力検索はてな
URLリンク(q.hatena.ne.jp)


55:デフォルトの名無しさん
10/05/02 23:37:53
class ClassA
{
 ClassA()
 {
  new ClassB();
 }
 class ClassB
 {
  ClassB()
  {
   new ClassA();
  }
 }
}

56:デフォルトの名無しさん
10/05/03 00:15:31
別にコンストラクタで無限ループさせるなら内部クラス経なくてもよろしくてよ

57:デフォルトの名無しさん
10/05/03 01:05:35
出来る出来ないという仕様的な話はありかと思うけど、
実際にこんなコード渡されたらぶちぎれるw

58:デフォルトの名無しさん
10/05/03 04:28:51
switchのジャンプで一番最後のところでもbreak;って入れたほうがいいの?
例えば
switch (n) {
case 1:
 hoge();
 break;
case 2:
 hoge2();
 break; //←これとか
}

switch (p) {
case 1:
 hogehoge();
 break;
case 2:
 hogehoge2();
 break;
default:
 hogehoge3();
 break; //←これとか
}



59:デフォルトの名無しさん
10/05/03 04:35:52
一々選択的に書いたり書かなかったりしていると何時かうっかりミスが出るから
書く癖を付けとけ。

60:デフォルトの名無しさん
10/05/03 05:05:18
switch多重ネストでソースがごちゃごちゃしてわけわかんなくなった

61:デフォルトの名無しさん
10/05/03 05:14:01
switchのcaseをインデントする癖がついてるんだけど、やめたほうがいいのかな

62:デフォルトの名無しさん
10/05/03 05:21:31
今時は IDE も色分けするしフォーマッターも付いてるから
仕事でコーディング規約とかなければその程度は良いんじゃねぇか。

63:デフォルトの名無しさん
10/05/03 08:54:01
ある程度まではオートフォーマッタとCheckstyleやら
Findbugsに全てを委ねてる

64:デフォルトの名無しさん
10/05/03 13:20:00
defaultで処理をするのは意味的にどうかと思う。
っていう宗教戦争を投げかけてみる。

65:デフォルトの名無しさん
10/05/03 13:29:22
まあ列挙に対する全てのパターンを記述する場合とか、
defaultにAssertionErrorをスローするコードとか書くんじゃね?

66:デフォルトの名無しさん
10/05/03 16:06:41
LinkedHashSetにはなぜlistIterator()メソッドがないのだろう。

ListIterator#previous()で反復子を前に移動したかったのに。
next()しかできないよ。

しぶしぶLinkedHashSet使うの辞めてLinkedListにしたけど。
Setは重複を許さないから使い勝手がいいと思ったんだけどな。
LinkedListにしたので挿入時に重複チェックしなきゃならない。

もっといいCollection型はないかな?

67:デフォルトの名無しさん
10/05/03 16:12:17
あと、ListIterator#next()とprevious()の仕様、反復子の隣の要素取ってから反復子を隣に移動させているが
これを、反復子を移動させてから隣の要素とるように指定できないだろうか。

68:67
10/05/03 16:29:46
一応、自己解決したかも知れない。
List<String> ll = new LinkedList<String>();
ll.add("A");
ll.add("B");
ll.add("C");

ListIterator<String> it = new ListIterator<String>();

String result;

it.next();
result = it.next();
it.previous();

return result; .//これでカーソルをAとBの間に移動しつつBを取得できる。

next()二回実行してprevious()を実行するというやり方。
逆方向の場合はprevious()を二回実行してからnext()を実行。
問題はListの末端に来たときの処理も作っておかないといけないのが難点。
if(lt.hasNext())とかif(it.hasPrevious())とかでまいどまいどチェックしないといけない。

本当は、末端に来てnext()したら先頭に戻る永久ループ型のIteratorが欲しいのだが…。
時計の針のように12時になったら0時からスタートする、というIterator。

Apache Common Collectionsあたりでも探すしかないだろうか…。しかしあのCollection Frameworkはまだ
Genericsに完全対応していないし…。

69:67
10/05/03 16:48:13
見つけた。末端でnext()すると先頭に戻るLoopingListIteratorを発見。

案の定、Genericsに対応していない残念なコレクションフレームワークだった。
URLリンク(commons.apache.org)

しかしLinkedListにはこのIteratorに変換するメソッドがない。
ということはどこかのクラスのstaticメソッドを使うのだろうか、それともこのLoopingに対応したListIteratorと
別途用意しなければないのだろうか…。

70:デフォルトの名無しさん
10/05/03 16:50:00
URLリンク(commons.apache.org)(java.util.List)
やはり専用のメソッドが用意されていた。

IteratorUtils.loopingListIterator(java.util.List)

71:デフォルトの名無しさん
10/05/03 17:02:54
Set は List のように順序性を維持するものではない。

72:デフォルトの名無しさん
10/05/03 17:19:33
>>68
>本当は、末端に来てnext()したら先頭に戻る永久ループ型のIteratorが欲しいのだが…。

これでいけない?
URLリンク(www.javaworld.com)

73:デフォルトの名無しさん
10/05/03 17:20:27
それくらいテメェで作れよと。

74:デフォルトの名無しさん
10/05/03 17:25:41
>>69
> しかしLinkedListにはこのIteratorに変換するメソッドがない。

コンストラクタに放り込むだけじゃない?

75:デフォルトの名無しさん
10/05/03 19:05:07
#include standard io.h

76:67
10/05/03 21:59:19
>>71
しかし、LinkedHashSetは順序性を維持するものになっている。
LinkedHashMapも同様。LinkedとついたSetとMapはadd()した順番にオブジェクトが並び順序性が保証されている。
順序性が保証されないのはHashSetとHashMap。

>>72
おお自作物。アルゴリズムとデータ構造の本に載ってそうなコードだ。
すでにCommons CollectionsにLoopingListIterator
という便利なクラスを見つけたので一応は解決したと思う。

>>74
それも一応、>>70のユーティリティクラスを使うという解決策を見つけた。


今探しているのは反復子を移動してからデータを取り出す方法。
現状のnext()はデータを取り出してから反復子を移動している。

何をやりたいかというと、時計の針のようなものを再現したいだけ。

Iteratorを継承した新しいIteratorクラスを作ってそこに独自のnext()メソッドを実装する
しかないだろうか。

俺はIteratorの間違った使い方を試そうとしているのかもしれない。

77:デフォルトの名無しさん
10/05/03 22:05:33
>>74
IteratorUtilsが必要と思ったら
コンストラクタもあった。
LoopingListIterator(java.util.List list)

78:デフォルトの名無しさん
10/05/04 00:13:31
int h=100,i=100,j=100;
h += ++h;
i += i++;
j += (j+=1) + (j+=10);
System.out.println("h="+h);
System.out.println("i="+i);
System.out.println("j="+j);

無精できねえ・・・なんてこったい

79:デフォルトの名無しさん
10/05/04 00:49:55
>>78
結果が分からないCよりはマシだろ

80:デフォルトの名無しさん
10/05/04 02:20:03
>>35
1ビットあれば、二つの数(例えば0と-208)を符号化できる。
0ビットあれば、一つの数(例えば-208)を符号化できる。

一般にnビットあれば、2のn乗個の数を符号化できる。

81:デフォルトの名無しさん
10/05/04 02:56:50
その0biって奴tはハードウェア的にもソフトウェア的にも実現不可能だな
概念的には存在しうるみたいだけど
イデアみたいなもんか?

82:デフォルトの名無しさん
10/05/04 12:51:36
セットにイテレータなんてないだろ。
自作すりゃいいもんをだらだら張り付けるな。
ブログでやれ。

83:デフォルトの名無しさん
10/05/04 13:24:46
え?SetはCollectionだからIterableだろ?

84:デフォルトの名無しさん
10/05/04 16:07:44
>>83
それはJava Collection Frameworkの実装の都合だろ。
setてのはふつう順不同というか要素の前後関係は知らないもんだろ。
そういう用途はlinkedlistだ。

たとえIteratorを持ってたとしてもputやsetした順に
取得できる保証もないし前後関係を知らないんだからprevで要素が取れるわけもない。

LinkedHashSetがあがってるがこれは実装由来のコレクション。特殊な要件で使うもんだ。

85:デフォルトの名無しさん
10/05/04 16:30:57
>>84
SetがIterableであることが、実装上の都合だという
ソースはどこにあります?

86:デフォルトの名無しさん
10/05/04 16:53:06
実装されているが、仕様に規定がないなら、それは実装上の都合ということ。
ないことは示せない。あえて示すならこの世の仕様をすべて見ろと言うしか無い。

87:デフォルトの名無しさん
10/05/04 17:07:26
いや、意味が分からないんだが。IterableはCollectionの契約だろ?
まあ気にくわないならUnsupportedOperationExceptionでも投げればいいけど。

正直何をいいたいのかさっぱり。

88:デフォルトの名無しさん
10/05/04 17:46:07
お前がコレクションやらコンテナと呼ばれるものの使い方を理解してないだけだろ。
だいたいLinkedHashSetは既存のsetを守りつつ順序を保ちたいときに使うラッパーだ。
IterableなのはCollectionインターフェイスで強制されてるからだ。

89:デフォルトの名無しさん
10/05/04 17:49:27
>>87
たぶん
「Setってーのは重複要素がないコレクションなんだぜ。」
「Setの実装クラスが何を持とうとそれは実装都合なんだぜ。」
「CollectionってーのはIterableだが、順序付けされているかそうでないかは実装クラス次第なんだぜ。」
ってことをいいたいんじゃないのかな。

90:デフォルトの名無しさん
10/05/04 17:55:52
>>89
いや、>>82でSetにイテレータ無いって言ってるから
どういう意味かと思って。

91:89
10/05/04 18:17:25
>>90
それは、ミスったんじゃないかな。>>84で、
「Iteratorがあっても(入れた時の)順序を保障するものではない。」※括弧内はおれ補完
と記載されているし。

ところで、なんだかIteratorとIterableをゴチャゴチャに書かれている書き込みが多い気がする。

92:デフォルトの名無しさん
10/05/04 18:29:49
Collectionの話してるんだ。混ぜて構わんだろ。

93:デフォルトの名無しさん
10/05/04 18:44:50
列挙性とその順序性は全く別の話。
分かっていないバカが一匹混ぜ繰り返している。

94:デフォルトの名無しさん
10/05/04 22:36:28
あるメソッドの中だけ別のpackageを参照するように出来ますか?

クラスのあたまで
import org.easymock.EasyMock;
とやると
そのクラスのメソッド内で
EasyMock.
と呼び出すと上のパッケージのクラスを参照するじゃないですか?
で、あるメソッドだけ
org.easymock.classextension.EasyMock
のクラスを参照したいのですが、上記のようにフル修飾名をいちいち入れるとソースが見づらくなるので、あたまでなんか宣言して、そのメソッドだけ別のパッケージを参照するように出来ませんでしたっけ?

方法ありましたらお願いします


95:デフォルトの名無しさん
10/05/04 23:05:43
JavaScript なら出来るが。

96:デフォルトの名無しさん
10/05/04 23:31:04
Effective Java 2版 140p に通常のキャストと Class.cast の説明があったのですが、意味がよく分かりませんでした。

class Favorites {
    private Map<Class<?>, Object> favorites = new HashMap<Class<?>, Object>();

     // Class.cast
    public <T> T getFavorite(Class<T> type) {
        return type.cast(favorites.get(type));
    }

     // キャスト演算子
    public <T> T getFavorite(Class<T> type) {
        return (T)favorites.get(type);
    }
}

上記の Class.cast を使う場合ととキャスト演算子を使う場合ではどのような差があるのでしょうか?
この二つに差があるのだとしたら、どのようなときにどう使い分けるのでしょうか?
どうかお願いします。

97:デフォルトの名無しさん
10/05/05 01:04:29
>>96
public Favorites() {
favorites.put(Integer.class, "string");
}
と変なもの入れて
Favorites f = new Favorites();
try {
System.out.println(f.getFavoriteCast(Integer.class));
} catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println(f.getFavorite(Integer.class));
} catch (Exception e) {
e.printStackTrace();
}
と使ってみるといい。f.getFavoriteCastはClass.cast版ね。

98:デフォルトの名無しさん
10/05/05 02:09:36
質問です。
getClass()メソッドのテストをしようと思い、次のようなソースを実行しました。
配列int[]とStringクラスでgetClass()を行い、結果をprintln()で出力するものです。

出力結果の" class [I "というのはどういう意味なんでしょうか?
(てっきり"class java.lang.reflect.Array"あたりが出力されると思ったのですが…)
そもそも配列にgetClass()を行うのは好ましくないのでしょうか?

【ソース】
public class Test1 {
public static void main(String[] args){
int[] a = {1,2,3};
System.out.println(a.getClass());
System.out.println((new String("abc")).getClass());
}
}

【出力結果】
class [I
class java.lang.String

以上です。
どうぞよろしくお願いします。

99:デフォルトの名無しさん
10/05/05 02:22:42
>>98
URLリンク(java.sun.com)

100:デフォルトの名無しさん
10/05/05 02:37:47
>>99
こんな仕様があったとは知りませんでした。勉強になります。
夜遅くにご回答いただき、どうもありがとうございました。

101:デフォルトの名無しさん
10/05/05 04:33:17
>>97
キャスト演算子は型が一致しなくても放置で
Class.cast は型が一致しなければ ClassCastException を投げる
の違いということですか?

102:デフォルトの名無しさん
10/05/05 06:34:21
Class#castだと
Integer.class.cast("") とかコンパイル通っちゃう。

103:デフォルトの名無しさん
10/05/05 09:55:29
そんな珍しいコードよう書かんわw
ちなみに、ジェネリックスとの組み合わせは分かりにくくなる罠。
現状のジェネリックスはある種のトリックだから。
URLリンク(www.ibm.com)

104:デフォルトの名無しさん
10/05/05 15:37:01
class ClassA {
 private String name=null;
 ClassA(String name) { this.name=name; }
 String getName() { return name; }
 void setName(String name) { this.name=name; }
}
class ClassB {
 static void method1(ClassA c) {
  c.setName("Method 1");
 }
 static void method2(ClassA c) {
  c=new ClassA("Method 2");
 }
}
とあったとき

ClassA a=new ClassA("Class A");
System.out.println(a.getName());
ClassB.method1(a);
System.out.println(a.getName());
ClassB.method2(a);
System.out.println(a.getName());
としたら
Output:
Class A
Method 1
Method 2
ってなるよね?

105:デフォルトの名無しさん
10/05/05 16:00:45
>>104
最後のMethod 2はMethod 1のままだろ。
Javaでは参照渡しはできない。参照の値渡しなら出来る。

106:デフォルトの名無しさん
10/05/05 16:39:21
なるほど・・・残念


107:デフォルトの名無しさん
10/05/05 19:08:05
Class.cast なんて初めて知った
どっちも実行時に型チェックして例外投げると思うんだが何が違うの?

108:デフォルトの名無しさん
10/05/05 19:25:43
>>97 で相違動作のサンプルまで書いてあるじゃねーか。

109:デフォルトの名無しさん
10/05/05 19:28:47
未チェック警告抑止しなきゃならない時に手元に Class オブジェクトがあれば Class#cast() でやってる。

private final Map<String,Object> values = new HashMap<String,Object>();
public <T> T getValue(String key, Class<T> type){
   Object value = values.get(key);
   if(value == null)   return value;
   assert(type.isAssignableFrom(value.getClass()): value.getClass().getSimpleType();
   return type.cast(value);
}

110:デフォルトの名無しさん
10/05/05 19:48:08
>>97やってみたけどf.getFavoriteが例外投げないのは何故?
通常のキャストも実行時の型チェックやってるよね?

111:デフォルトの名無しさん
10/05/05 20:01:52
>>110
ジェネリクスのイレイジャ機構により、
おそらくキャストしてる方は実行時Integer型ではなく
Object型そのまんまで扱ってる。(実行時に型情報は消えるから)

ただ、もちろん
Integer i = f.getFavoriteCast(~~);
とすればClassCastExceptionが発生する。

112:デフォルトの名無しさん
10/05/05 20:02:21
>>109Classオブジェクトが無いときはどうするの?

113:デフォルトの名無しさん
10/05/05 20:11:57
>>112
Classを用意できない場合ってあるかい?

114:デフォルトの名無しさん
10/05/05 20:14:46
curses的なことができる何かってないですか?
jcursesというのとlibjcsiというのを使ってみたけど、
マルチバイト文字に対応してない?っぽいので、
いいの知ってる方教えてください。

115:デフォルトの名無しさん
10/05/05 21:13:38
>>113 1.5以前とか総称型を想定してないのとか

116:デフォルトの名無しさん
10/05/05 22:14:47
普通のプログラミングとネットワークプログラミングは別なんでしょうか?
ネットワークプログラミングを習得しないといけないことになったんですが
即ネットワークプログラミング? 普通のプログラミング習得⇒ネットワーク?
プログラムに関してはC言語をファイルの入出力なんかあたりまでやった程度です。

117:デフォルトの名無しさん
10/05/05 22:15:18
jcursesもlibjcsiなんかして日本語通ったはずだが忘れた。
CHARVAは無理だった。

118:デフォルトの名無しさん
10/05/05 22:16:51
1.5以前というか総称型以前はそもそも未チェック警告が無いからキャストで
問題なかったはず。

119:デフォルトの名無しさん
10/05/05 22:29:24
>>116
普通の業務アプリではネットワークプログラミングはしません。
そういう意味では別です。それ以外を除けば別じゃありません。

ネットワークプログラミングというのは、
簡単に言えば、ちょっと面倒くさいファイル入出力です。

120:デフォルトの名無しさん
10/05/05 22:38:55
プロトコル考えなきゃ行けないからちょっとでは済まんだろw

121:デフォルトの名無しさん
10/05/05 22:40:20
じゃあ面倒くさいファイル入出力でいいよ。

122:デフォルトの名無しさん
10/05/05 23:02:44
ファイル入出力もネットワーク入出力も同じようなもの。には同意。

「普通」って発言にはちょっと引っかかるな。
自分トコだとJavaサーバと.Netリッチクライアントが「普通」なんだが。
また別のトコだとWEBアプリが「普通」だったり、Excel+ODBCが「普通」だったり。
RubyサーバにJavaリッチクライアントが「普通」なんてトコもある。
皆それぞれに「普通」。

123:デフォルトの名無しさん
10/05/05 23:04:34
>>118
そういう意味じゃなくて、総称型を想定しないで作ったクラスだとメソッドの追加が必要になるけど言語仕様ごとにクラスの修正やメソッドの追加は出来ないってこと。
ほとんどのクラスはもともと総称型を意識しないような設計だからClassをいちいち用意できない。

124:デフォルトの名無しさん
10/05/05 23:07:58
同じ様なものって、ストリーム型入出力の基礎の基礎のところだけじゃねえか。
まともに使おうと思ったら相手方のアプリの知識も非同期処理の知識も、
もちろんバークレイソケットの知識も必要になる。プロトコルによっては
状態管理もパケ落ち対応も必要。

125:116
10/05/05 23:10:12
文字見ただけで難しそうですね・・・
P2PにおけるDHT関連をやるんですが。


126:デフォルトの名無しさん
10/05/05 23:43:01
>>124
詳細言い出したらキリないだろうが。
ファイル入出力だってファイルシステム言い出したらキリないし、
そもそもフォーマットはどうだの、即時追記に対応するだの、
クラッシュ時安全にするだの、あるよ。
お前はいちいち全部言わないと気が済まないのか

127:デフォルトの名無しさん
10/05/05 23:59:38
>>125
P2PでDHTとかってのは業務的なことでネットワークプログラミング
の範疇に入れるべきなのだろうか?
スレッド間でロジックをシミュレートすることだって出来る部分だし。
確かどっかでアプレット見た気がする。ノード毎に伝搬していく様子の。

128:デフォルトの名無しさん
10/05/06 00:09:16
あ、スマン。それ言い始めたらアプリケーション層のアプリって軒並み
ネットワークじゃねぇってことになる。

129:デフォルトの名無しさん
10/05/06 00:13:04
>>126
それらを同じ様なものと言いのける低脳。

130:デフォルトの名無しさん
10/05/06 00:26:18
スーパークラスのメソッド呼ぶときって必ずsuper.method();ってしたほうがいいの?

つまり

class ClassA {
 void hoge() {
  System.out.println("Hoge!");
 }
}

class ClassB extends ClassA {
 
 void hogehoge() {

 super.hoge(); //← super. つけたほうがいいの?

 hoge(); //← super. つけないほうがいいの?

 }
}
classBでhoge()をオーバーライドしてないとして

131:デフォルトの名無しさん
10/05/06 00:36:37
>>130
どっちでもいい。
むしろhoge()のほうをthis.hoge()にしてほしいわ。

132:デフォルトの名無しさん
10/05/06 00:49:24
>>131
スーパークラスのメソッドってthis.で呼び出せるって知りませんでした。勉強になりました。
ありがとうございます

133:デフォルトの名無しさん
10/05/06 00:51:05
>>131
ちなみにsuper使う場合もthisってつけたほうがいいんですか?
this.super.hoge(); ? super.this.hoge(); ? なんか細かいことばっか訊いてすみません

134:デフォルトの名無しさん
10/05/06 03:12:26
>>94
static import?

リフレクション?

135:デフォルトの名無しさん
10/05/06 03:26:56
>>84
> >>83
> それはJava Collection Frameworkの実装の都合だろ。
> setてのはふつう順不同というか要素の前後関係は知らないもんだろ。
> そういう用途はlinkedlistだ。
>
> たとえIteratorを持ってたとしてもputやsetした順に
> 取得できる保証もないし前後関係を知らないんだからprevで要素が取れるわけもない。

そもそもあるコレクションにlistIterator()メソッドがないとprevious()が使えない。
コレクションによってはiterator()メソッドしか実装されてないのがある。


> LinkedHashSetがあがってるがこれは実装由来のコレクション。特殊な要件で使うもんだ。

SortedSet、TreeSetもComparableが実装されたオブジェクトをadd()できるから
(挿入ソートで挿入したときにComparable#compareTo()が働いて自動的に順番が並ぶ)
順序関係は保証される。これも特殊だと?
LinkedHashSetとArrayListとの違いはオブジェクトが重複を許すか許さないかの違いでしか無いと思うが。
使えるメソッドも若干違うが。

136:デフォルトの名無しさん
10/05/06 03:36:15
抽象化と実装仕様の区別も付いていない人が何で Java なんかやってんの?

137:デフォルトの名無しさん
10/05/06 03:44:21
>>132 >>133
なぜthisやsuperをつけるのかわかってないような気がする。
途中からClassBにhoge()という名前のメソッドを
新たに作ることになったとき(hogeをオーバーライド)は、thisをつけると
新たに作ったメソッドのほうが呼ばれるのだが。
後でhoge()メソッドをオーバーライドするときに備えてsuperというキーワードが用意されている。
いかなる状況でもClassAのhoge()メソッドを呼び出したいのに、あとからClassBのhoge()メソッドを実装すると
なぜかClassBのhoge()メソッドを呼び出してしまう。そういう問題を防ぐために、superというキーワードがある。

だから将来のオーバーライドや、同じ名前のメソッド名衝突に備えてsuperクラスのメソッドを呼びたいときはsuperをつけるべき。
(ちなみにスーパークラスに同じ名前のメソッドがあることに気付かずメソッド名衝突する問題はJava5から登場した@Overrideアノテーションで回避できる)

自分のクラスのメソッドを呼びたいときはできるかぎりthisをつけるべき。インスタンスメソッドはできるかぎりthis.メソッド名()
staticなメソッドはthisつけないでクラス名.メソッド名()とするのが望ましい。Checkstyleとか使ってコーディング規約を守るなら。
そもそもthis.superとかsuper.thisなんて記述ではコンパイル通らない。

138:デフォルトの名無しさん
10/05/06 03:58:36
詳しい説明ありがとうございます

139:デフォルトの名無しさん
10/05/06 04:03:05
となると、変数や定数のフィールドもsuperやthisをつけて使ったほうがよさそうですね・・・
今後気をつけます

140:デフォルトの名無しさん
10/05/06 04:14:16
仮に>>130の例で


141:デフォルトの名無しさん
10/05/06 04:17:57
仮に>>130の例で
ClassBでhoge()をオーバーライドしたとき
他のクラスからClassBのインスタンスからスーパークラスであるClassAのhoge()を呼び出すってことできます?

例えば
class ClassB extends ClassA {
 void hoge() { System.out.println("Hoge Override"); }
}
class ClassC {
 void nanika() {
  ClassB b=new ClassB();
  b.hoge(); //←ここでClassBのhoge()じゃなくてスーパークラスのほうのhoge()を呼び出すことって出来ますか?
 }
}

142:デフォルトの名無しさん
10/05/06 04:23:30
できないしできたらおかしい

143:デフォルトの名無しさん
10/05/06 04:25:43
class ClassC {
 void nanika() {
  ClassB b=new ClassB();
  ClassA a=(ClassA)b;
  a.hoge(); //←もしかして、こうしたらスーパークラスのほうのhoge()になりますか?
  b.super.hoge();とかありそうな気もします
 }
}

144:デフォルトの名無しさん
10/05/06 11:42:54
>>94

Javaでは無理ですね。1ファイル中に登場するクラスの単純名が重複している場合は
そのうち1つだけしか単純名で扱えず、それ以外はFQNで書く必要があります。

Groovy(Scalaも?)は別名をつけられるので、上記のようなJavaの煩わしさは
軽減できるようですが。

145:デフォルトの名無しさん
10/05/06 13:29:43
>>141
できない。

>>143
できない。ためしにコンパイルしようとすればわかる。
どうしてもそんなことしたかったら

ClassA a = new ClassA();
a.hoge();
こうする。

bを(ClassA)にキャストしても中身はこれと同じだからオーバーライドしたメソッドしか呼び出されない。
ClassA a = new ClassB();

というかいい加減に自分でコンパイルして自分の目で確かめろと。

146:デフォルトの名無しさん
10/05/06 14:04:49
>>142,145
回答ありがとうございます。
出来ないのですか・・・となるとどちらも使いたい場合は
何とかメソッド名を変えるなり対応するしかなさそうですね・・・
わかりました


147:デフォルトの名無しさん
10/05/06 14:59:25
>>146
マジレスすると設計がおかしい


148:デフォルトの名無しさん
10/05/06 18:42:54
>>146
デザインパターンの勉強をすべき

149:114
10/05/06 19:48:50
>>117
機種依存部分に対してなんかするんだったか、
jar内のjava部分に対してなんかするんだったか、
自分が書いたコードに対してなんかするんだったかだけでも思い出せませんか?
いすれにしても素敵なヒントありがとうございました。

150:デフォルトの名無しさん
10/05/06 19:51:29
>>149
罫線がSJISとかだと半角カタカナの領域できめうちだったりしたような。

151:デフォルトの名無しさん
10/05/06 21:37:13
Java6からQueueが追加されたっていうんで調べてみたら
LinkedListがQueueを実装してpop()が使えるようになってた。
早速使ってみたが

private List<String> list = new LinkedList<String>()

this.list.add("test");
this.list.add("abc");
this.list.add("def");

String result = list.pop();

という使い方はさすがにできなかった。
pop()はQueueで定義されListで定義されてないため。
private Queue<String> list = new LinkedList<String>()
とやりたかったがLinkedList#listIterator()を使いたかったために
仕方なく
private LinkedList<String> list = new LinkedList<String>()
ってやった。

なんだかな。

152:デフォルトの名無しさん
10/05/06 21:39:35
おまえはコンクリートクラスをベタ書きで使ってるのがお似合い。

153:デフォルトの名無しさん
10/05/06 21:41:53
>>151
意味が分からない俺は初心者です。ハイ。

154:デフォルトの名無しさん
10/05/06 22:02:30
>>151
まさにLinkedListの性質が必要となっているので、
インタフェースを指定する必要はない。

ところで、<E, T extends List<E> & Deque<E>>
とか&指定する機会ってあんまりないよねー。

155:デフォルトの名無しさん
10/05/06 22:47:47

>>151
意味がわからん。
なんでqueue使うのにlistIteratorが要るんだ?
だいたいLinkedListじゃなくてArrayDequeue使うところだろ。
listIterator使うってことはカーソル基準の相対位置にアクセスしたいのか?
pop要らんしpopしたら意味が変わってくるだろ。

156:デフォルトの名無しさん
10/05/06 22:50:34
ところでリスト更新したらConcurrentModificationでない?

157:デフォルトの名無しさん
10/05/06 23:40:44
>>155
というかさ、LinkedListだとしても普通に

Queue<String> queue = new LinkedList<String>();

queue.add("1");
queue.add("2");
queue.add("3");

String elm;
while((elm = queue.poll()) != null ){
System.out.println(elm);
}

だと思うんだ。

158:デフォルトの名無しさん
10/05/06 23:53:08
>>151
Queue<String> q = new LinkedList<String>();
q.add("test");
q.add("abc");
q.add("def");
Iterator<String> i = q.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
System.out.println("-----");
String s;
while ((s=q.poll())!=null) {
System.out.println(s);
}
とかはダメなのか?ListIteratorしか使えない呪いでも?

159:157
10/05/07 00:00:16
>>158
Iterator<String> i = q.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}

の部分は、

for(String s : queue){
System.out.println(s);
}
の方がスッキリして好きだな。

160:デフォルトの名無しさん
10/05/07 00:04:30
前の LinkedList 厨だからスルーが吉

161:デフォルトの名無しさん
10/05/07 05:38:23
え?厨?

162:デフォルトの名無しさん
10/05/07 09:04:58
初心者です。試験勉強用の事で、言葉の定義とかなんですが、質問させて下さい。
1)メソッドに渡した基本型のフィールド変数は、メソッド内側の操作は、
 外側の変数には反映されないでしょうか。(合っていますよね。)
2)このメソッド内の変数をローカル変数と呼ぶ、合っていますか。
3)通常、引数で渡した変数の反映を読んだ側でも反映して返すには、
 戻り値で返すのが普通でしょうか。(static変数との使い分けがよく分からない;)
4)メソッドに参照型の参照で渡した場合、
 メソッド内部のインスタンスに対する操作は反映される、っていうのが、
 当たり前だと個人的には感じるんだけども、
 わざわざ参考書とかで説明してあるのが謎です。
 例えば、
  method1(Vector v)の中で
   Vector v = new Vector();
   v.add(new String("abc");
 とやった場合には外側のvにはabcはくっつかない、
  method2(Vector v)の中で
   v.add(new String("abc");
 とかやると、くっつく、と。
 当たり前の様な気もしますし、どうなんでしょう。
5)この4)の場合と、1)の場合を比較した時の理論がよくわかりません。
 1)だと、メソッド側に引数で渡された基本型の値はコピーされて
 (多分JVMのメモリにはその値用の領域が確保されますよね)
 メソッド内の操作はそのコピーされた領域に保存された値を操作しているんだと
 思いますが、4)で参照を渡した時も、参照は別の領域にコピーされるんですよね。
 すると、4-method2の場合には、v.add~のvで指せる参照はコピーされた
 値な様な気がして・・どうなんでしょうか。

163:デフォルトの名無しさん
10/05/07 09:25:20
>>162
1:反映されません。というよりは、関数内の変数に値がコピーされます。
2:ローカル変数と読んでもいいです。パラメータって普通言うけど。
3:staticは基本的に何度も値を書き込むのに使わないでください。
基本的に定数に使うものです。
返り(戻り)値で済むなら返り値を使ってください。
返り値で済まないなら、状態を持つクラスのインスタンスを渡して、
それに対してメソッド内部で操作を行います。
void method(VOClass vo){
 vo.setXXXX("hogehoge");
}
クラスを作るのが面倒な時は配列で渡します。
あんまりやらないほうがいいですが。
void method(Object[] o){
 o[0] = "hogehoge";
}
4.どうなんでしょう?っていわれてもね、参考書は初学者のためのものだからね。
でもオブジェクトの値渡しするような言語(C++)は、普通に引数にモノを渡すと
一般的にはオブジェクトがコピーされるんで、その理論は通用しません。
どうでもいいですが、Stringのコンストラクタは意味がないどころか
普通はコスト的に有害なので超特別な理由がない限り呼ばないでください。
あとVectorじゃなくて普通はArrayListを使います。
5.Javaには参照渡しはありません。メソッドのオブジェクトを渡した時は、
オブジェクトへの参照がコピられて値渡しされてるだけ。
オブジェクト以外の基本型(プリミティヴ)を
渡した時もその値がコピられて値渡しされてるだけ。
method2はmethod2に渡した引数(オブジェクト)の参照がコピられて
method2のvパラメータに設定されているだけ。
参照ってのは32bitのメモリ空間を表す数字ね。

164:デフォルトの名無しさん
10/05/07 09:41:37
>>163
>staticは基本的に何度も値を書き込むのに使わないでください。
>基本的に定数に使うものです。
定数のときはstatic final
クラス内で共通、唯一つな時に使えばいいのであって何度も値を書いて問題なし
FPSでの弾の数とか

165:デフォルトの名無しさん
10/05/07 10:41:33
>>164
弾の数… ビミョー。使っちゃダメってことはないけど、
あんまり正当化できるシーンは少ない。
少なくともstatic変数が現れたら「きちんと使っているかどうか」
ってのは見てしまうね。コードレビューの時とか。
だいたい「使う正当な理由はないよね。じゃやめて。」
って注意して終わる。

166:デフォルトの名無しさん
10/05/07 17:41:40
javaの公式サイトにここ数日まったく繋がらないんですが・・・

167:デフォルトの名無しさん
10/05/07 17:51:15
>>166
URLリンク(java.sun.com)
普通にこのサイトにつながるけど

168:デフォルトの名無しさん
10/05/07 18:49:58
>>155
それArrayDequeueじゃなくてArrayDeque

javadocにも書いてある通りdequeとdequeueでは英語的にもまったく意味が違う


話を戻して、Listに入れたい要素のオブジェクトを作るクラスを独自に作って
前後関係をもたせたので結局Iteratorを使う必要がなくなってしまった。
Chain of Responsibilityのたらい回しを参考に、となりどうしのオブジェクトがお互い参照しあう方式をとることにした。

それとは別にこういうデータ構造が必要だった。

・基本的に、Stackのように端からしかデータを取得除去する必要がないからpop()を使う。
・ひたすら端からデータを取るだけ。
・要素が空になったときのみ一気に補充する。
・感覚としては弾薬の再装填や燃料補給に近い。しかし個々の要素はまったく異なるものを含み重複を許可する。

だから削除速度が速いらしいLinkedListにした。

Dequeによるとpoll()はpollFirst()と同じ。
pop()はremoveFirst()同じ。
removeFirst()は空のときNoSushElementExceptionをthrowするpollFirst()。空のときはnullを返す。
(isEmpty()を使えば例外は気にしなくていい)
みたいだったがnullで判定するのが好きな人が多いね。

169:デフォルトの名無しさん
10/05/07 18:55:45
>>165
> >>164
> 弾の数… ビミョー。使っちゃダメってことはないけど、
> あんまり正当化できるシーンは少ない。
> 少なくともstatic変数が現れたら「きちんと使っているかどうか」
> ってのは見てしまうね。コードレビューの時とか。
> だいたい「使う正当な理由はないよね。じゃやめて。」
> って注意して終わる。

複数のインスタンスでひとつの状態を共有するときはstatic変数は重宝する。

170:デフォルトの名無しさん
10/05/07 19:28:14
だから"ビミョー"なんじゃないの?

171:デフォルトの名無しさん
10/05/07 20:00:11
書籍『Java言語仕様』によると、純粋主義者はインスタンスフィールドはすべてprivateにすべき
staticフィールドはfinalにすべきというが、そんな感じの意見か。

staticなフィールドの代替をCollectionを集約したSlngletonで代用するとかいう感じか。

172:デフォルトの名無しさん
10/05/07 21:51:12

入力するときに、import java.io.* とimport java.io.* って何が違うの?
JAVA初めて即効分からなくなった。 どっちのがいいとかある?

IOで解説してるサイトが多いからそっちのが簡単とか?

173:デフォルトの名無しさん
10/05/07 21:52:56
間違えた。 java.util.

174:デフォルトの名無しさん
10/05/07 21:55:27
( ゚Д゚)ポカーン

175:デフォルトの名無しさん
10/05/07 22:01:12
イギリスとフランスって何が違うの?級の質問

176:デフォルトの名無しさん
10/05/07 22:09:21
そうなんですか。
ではテキスト通りutilにします。

有難うございました。

177:デフォルトの名無しさん
10/05/07 22:23:00
test

178:デフォルトの名無しさん
10/05/07 22:28:00
質問させてください。
現在コンソール入力でヒットアンドブロー(数字当て)のゲームを開発中で詰まっている点があります。
まず、プログラム上で乱数にて4桁の数字をセットします。

コンソール画面上の例 :

▲回目:1234
 ⇒ Hit :● Blow :●

※▲には入力の回数カウンタを表示。
※●には入力した数字に対して正否の数字がそれぞれ入る。

①『 ▲回目: 』 と表示させた後、ユーザーが入力で4桁の数字を入力してEnterを押す。
②BufferedReaderクラスのInputStreamReaderメソッドにてSystem.Inを入力し変換させ表示
③正否判定を表示 『 ⇒ Hit :● Blow :● 』

この②と③の間で、改行させずに入力を行いたいのですがうまくいきません。
改行は③の正否の判定を表示した時にSystem.out.printlnでするだけにしたいんです。
以下のような形での画面・入力仕様が目標です。

1回目:1234 ⇒ Hit :0 Blow :4
2回目:2525 ⇒ Hit :2 Blow :2
1回目:7777 ⇒ Hit :4 Blow :0
Congratulation・・・

179:デフォルトの名無しさん
10/05/07 22:29:48
>>178
どうせBufferedReaderでreadlineとかしてんでしょ。

180:デフォルトの名無しさん
10/05/07 22:32:18
>>179

はい、その通りです。

181:デフォルトの名無しさん
10/05/07 22:36:19
>>168
おれなら、
public class Test {
public static void main(String[] args) {
Deque<String> queue = new ReloadableDeque<String>() {
@Override public void reload() {
System.out.println("リロードっ");
this.add("1");
this.add("2");
this.add("3");
} };
String elm;
while ((elm = queue.pollFirst())!=null)
System.out.println(elm);
}
}
public abstract class ReloadableDeque<E> extends ArrayDeque<E> implements Reloadable{
@Override public E pollFirst() {
E elm;
if ((elm = super.pollFirst()) == null) {
reload();
elm = super.pollFirst();
}
return elm;
}
}
public interface Reloadable { void reload(); }

だな。

182:デフォルトの名無しさん
10/05/07 22:39:38
>>180
readlineは一行分読み込みが終わるまで読み込めない。
ファイルが読み込み元なら改行文字にブチ当たるまで読み込めない。
コンソールが読み込み元なら改行してくれるまで読み込めない。
別の読み込みメソッドを使いましょう。

183:182
10/05/07 22:43:17
と思ったけど、無理だな

184:178
10/05/07 22:54:36
>>183

ありがとうです。
やっぱり無理なんですかねぇ
3日3晩APIの仕様書熟読とWeb中探しがしんどい・・・orz

185:デフォルトの名無しさん
10/05/07 23:02:09
>>184
一応言っておくと、
Java6使ってるならSystem.console()使おうぜ

186:デフォルトの名無しさん
10/05/07 23:08:03
>>178
こんなの使うとできる、のかも。
URLリンク(www.nilab.info)

187:デフォルトの名無しさん
10/05/07 23:12:35
>>172
は?

java.sql.Date

java.util.Date
との違い、
これらを同時に使用するにはどうすればいいのかっていう質問ならわかるんだが。

それともimport java.io.*とimport java.io.PrintWriterとの違いやimport java.util.Collectionとimport java.util.*との違いのことをいっているのか?

188:デフォルトの名無しさん
10/05/07 23:13:28
>>184
どうしてもやりたかったらawt.keyevent
あとはlinux、cygwinとか?

189:デフォルトの名無しさん
10/05/07 23:18:27
こんなのとか。
URLリンク(jline.sourceforge.net)

190:デフォルトの名無しさん
10/05/07 23:20:12
>>172
URLリンク(www.atmarkit.co.jp)

191:178
10/05/07 23:24:46
>>185
>>186
>>188-189
みんなありがとう。ちょっと調べてみて吟味して後の仕様拡張とあわせて
選択しようかなと思います。



192:デフォルトの名無しさん
10/05/07 23:28:31
>>181
そこまでやるか。
Template Methodに匿名クラスに抽象メソッドにインタフェース全部作ってまでやるか。
そこまでやりだすメリットってそんなにあるのか?

ジェネリックスにワイルドカード指定すればもっと凄い堅牢性が高いものが
できあがりそうだが、やりだすと苦労しそうだ。

193:デフォルトの名無しさん
10/05/07 23:35:38
>>185
C#のSystem.Console.WriteLine()かと思った。
そんなメソッドとjava.io.Consoleが追加されていたとは。
これでScannerクラスを使う必要もなくなるのか

194:デフォルトの名無しさん
10/05/07 23:37:03
Apache Commons CLIという選択肢もあり
URLリンク(commons.apache.org)

195:デフォルトの名無しさん
10/05/07 23:50:30
>>194
cliってgetoptみたいなものでは。

196:デフォルトの名無しさん
10/05/08 00:14:24
超初心者増えたなぁ

197:デフォルトの名無しさん
10/05/08 00:15:32
>>192
匿名クラスなのは、ReloadableDequeの中でreloadを実装すると融通効かなそうだから(部品として弱そうだから)、
匿名クラスでReloadable#reloadを実装した。それから、クラス名考えるのめんどくさかったからってのもある。

抽象クラスなのは、ReloadableDequeを使う人に、
確実にreloadをOverrideさせるため。

Reloadableをインタフェースにしたのは、なんか全然違うところでも使いそうじゃない?そんな理由。マーカ的につかえるかなぁ~って。

198:デフォルトの名無しさん
10/05/08 00:21:25
誤)Reloadableをインタフェースにしたのは、
正)Reloadableインタフェースをつくったのは、

199:デフォルトの名無しさん
10/05/08 01:26:02
>>193
正直いってConsoleは微妙
というかeclipseで使えない

200:デフォルトの名無しさん
10/05/08 01:52:39
うわあマジだ。ある意味正しい動きではあるが。クソだな。

201:デフォルトの名無しさん
10/05/08 01:59:33
>>196
お前いっつもそれしか言わないよな。

202:デフォルトの名無しさん
10/05/08 02:00:14
初心者の域を抜け出せない初心者が初心者批判してるんですね

203:デフォルトの名無しさん
10/05/08 02:43:15
>>200
利点はioexceptionなげないのとpasswordだけ・・・
自分はIDE上で登録済み
br
Java ステートメント
try {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line;
while((line=br.readLine())!=null){
${cursor}
}
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}


204:デフォルトの名無しさん
10/05/08 05:14:29
マルチスレッドについての質問です。
マルチコアCPUの場合、プロセスのコア割り当てはOSが管理しますよね。
Javaプロセスを複数立ち上げれば、OSが適切にプロセスごとに割り振るのは分かります。
でも、一つのJavaプロセスの中で複数スレッドを走らせた場合、
OSからは一つのJavaプロセスに見えてると思うのですが、
どうやって複数コアへ処理の割り当てを行っているのでしょうか。

205:デフォルトの名無しさん
10/05/08 05:51:05
/ 名前を読み込んで挨拶する(その2:nextLine()版)
import java.util.Scanner;
class HelloNextLine {
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.print("お名前は:");
String s = stdIn.nextLine(); // 1行分の文字列を読み込む
System.out.println("こんにちは" + s + "さん。"); // 表示
}
}
Exception in thread "main" java.lang.NoClassDefFoundError:
HelloNextline (wrong name: HelloNextLine)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
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$000(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)
Could not find the main class: HelloNextline. Program will exit.

上記のようになったのですが、エラーが出た時はどの部分をみればいいのでしょうか?

206:デフォルトの名無しさん
10/05/08 06:02:11
HelloNextline (wrong name: HelloNextLine)

207:デフォルトの名無しさん
10/05/08 07:37:04
compress形式で圧縮されたファイル(拡張子 .z のファイル)を解凍したいのですが、
どうすればいいのでしょうか?

208:デフォルトの名無しさん
10/05/08 07:42:39
>>204
vmのスレッディングapi実装はosネイティブのスレッディングapiを利用して行われる


209:デフォルトの名無しさん
10/05/08 08:45:03
バックグラウンドで画像のサムネールを作る処理を走らせたときに MIN_PRIORITY に
設定しても CPU 100% 行ってしまい、枚数が多いと CPU 熱のフェールセーフが働いて
スリープ状態になってしまう。もうこれ以上って Timer か何かから細かい間隔で suspend
resume してやるしかないかな。

210:デフォルトの名無しさん
10/05/08 08:48:11
>>207
標準 API には無いから Runtime#exec() 使ってシェル経由でやるしかない。
ネットで探せばどこかにライブラリが落ちているかもしれないが。

211:デフォルトの名無しさん
10/05/08 08:49:55
>>204
今時の Java VM 実装では OS は Java のスレッドまで見えているので
スレッドを適切に CPU に割り当てられる。

212:デフォルトの名無しさん
10/05/08 09:21:50
>>209
100%になるのが悪いんじゃなくて冷却が足らないだけだ
ヒートシンク掃除して扇風機でも当てとけ
ハードウェア的な話だから続けるならよそでやってくれ

213:デフォルトの名無しさん
10/05/08 09:40:28
ThinkPad だからどうしようもない。役に立たないしょうもない煽りだけならよそでやってくれ。

で、200ms ごとに suspend, resume 繰り返すようにしたらとりあえず 80% ほどに落ち着いた。
TimerTask × ImageIO の閉じた処理どうしなのでデッドロックもないだろう。
少し調整の余地はあるがこれでやるか。

214:デフォルトの名無しさん
10/05/08 11:56:35
>>213
PC買い換えろ

215:デフォルトの名無しさん
10/05/08 12:39:47
>>213
URLリンク(java.sun.com)
ここら辺使ってスレッドのCPU時間の測定してsuspend~resumeの間隔を調整すれば、CPU使用率の調整とかも出来るかも?

216:207
10/05/08 13:10:46
>>210
標準にはないですか。ありがとうございます。
Windowsでも動かすかもしれないので、シェルはちょっと不味いです。
ライブラリ探すか、自作してみます。

217:デフォルトの名無しさん
10/05/08 13:12:52
デュアルコアならCPU1つに制限するとかなしなの?

218:デフォルトの名無しさん
10/05/08 13:59:26
>>211
>>208

ありがとうございます。よく分かりました。

219:デフォルトの名無しさん
10/05/08 14:36:44
>>199
なんでEclipseで使えないんだ
と思ってやってみたら本当に例外を吐いて
DOSプロンプトではちゃんと動く。
さすがにEclipseのコミュニティにバグ報告されている内容だろうか。

220:デフォルトの名無しさん
10/05/08 15:26:00
すんませんjavaの練習したいと思ってJDKインスコしたんですが。ユーザー変数にC:\Sun\SDK\bin入れてるけどコマンドプロントで認識しません。

いまいま始めたばっかでよく分からないんですが。
とにかくコマンドプロントで練習できるようにするにはどうすればいいんでしょうか?

221:デフォルトの名無しさん
10/05/08 15:28:40
PATH %PATH%;C:\Sun\SDK\bin



222:デフォルトの名無しさん
10/05/08 15:29:56
インストール先のフォルダそれで合ってるの?
ユーザー変数?環境変数のこと?

223:デフォルトの名無しさん
10/05/08 15:31:00
C:\Program Files\Java\jdk1.*.*_**\bin

224:デフォルトの名無しさん
10/05/08 15:33:11
SDKファイルの中の何を指定すればいいのかがよくわかりません・・・

225:デフォルトの名無しさん
10/05/08 15:33:55
C:\Sun\SDK\bin

フォルダの場所自体はこれであってるんですが

226:デフォルトの名無しさん
10/05/08 15:34:53
>ユーザー変数にC:\Sun\SDK\bin入れてるけど
これを具体的に説明

227:デフォルトの名無しさん
10/05/08 15:36:27
環境変数のユーザー編集

変数名 PATH
変数値 C:\Sun\SDK\bin

にしてて、フォルダの位置も正しいはずなんですが
コマンドはC:\>setでやってます


228:デフォルトの名無しさん
10/05/08 15:40:30
環境変数の設定変更したあとPC再起動した?

229:デフォルトの名無しさん
10/05/08 15:44:07
先程しましたが結果は同じでした


230:デフォルトの名無しさん
10/05/08 16:01:36
>>220
OSとJDKインストールした場所は?

231:デフォルトの名無しさん
10/05/08 16:05:09
>>230
OSはCです
JDKはC:\Sun\SDKです


232:デフォルトの名無しさん
10/05/08 16:08:07
環境変数の設定をsetコマンドでやってるならPC再起動したらダメじゃん

233:デフォルトの名無しさん
10/05/08 16:08:58
設定はパフォーマンスとメンテナンスのシステムからやってます

234:デフォルトの名無しさん
10/05/08 16:08:59
>>220は何をしたかったの?
javacが実行されないってこと?

235:デフォルトの名無しさん
10/05/08 16:09:40
コマンドプロントでjavaが認識されないってことです

'java' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

ってメッセージがでるんです



236:デフォルトの名無しさん
10/05/08 16:12:51
>>227
環境変数の設定画面見て、一度、スペルミスが無いかチェック
コロンとセミコロンの打ち間違いや、ドットとカンマの打ち間違いとかの可能性はあるかも
問題なかったらコマンドプロンプトでpath[エンター]打つと
現在のPATHが表示されるからPATHにC:\Sun\SDK\binが含まれていることを確認

それと、C:\Sun\SDK\binのフォルダ内に、javac.exe等のファイルが存在してるかを確認
もしかするとインストール失敗してるのかも


237:デフォルトの名無しさん
10/05/08 16:15:09
cmdでpathと打つとC:\Sun\SDK\binは含まれてます

binのフォルダの中にjavac.exeらしきファイルが見当たらないんですが

238:デフォルトの名無しさん
10/05/08 16:18:14
うちはJDKインストールしたら>>223のように
Program Files\Jana\ のところにインストールされたけど
C:\Sun\SDK\bin って自分でフォルダ指定してインストールしたの?

239:デフォルトの名無しさん
10/05/08 16:18:54
実はJDKをインスコしたつもりでJREをインスコしたとか…
んなわけないかw

240:デフォルトの名無しさん
10/05/08 16:18:58
>>238
自分はそこにインストールされました

241:デフォルトの名無しさん
10/05/08 16:22:03
もう一回違うJDKインスコします

242:デフォルトの名無しさん
10/05/08 16:23:47
jreがインスコされちまった。これはJKDとは違うの?

243:デフォルトの名無しさん
10/05/08 16:29:39
JKD?
Joshi Kousei Daisuki
女子 高生 大好き ?

244:デフォルトの名無しさん
10/05/08 16:33:59
JDKもインスコされてました。
新しいファイルは
C:\Program Files\Java\jdk16.0_20\binに指定しましたが結果は同じです

他に設定するべき所があるんでしょうか・・・・?



245:デフォルトの名無しさん
10/05/08 16:41:00
コマンドプロンプトでpathと入力
C:\Program Files\Java\jdk1.6.0_20\bin がちゃんと指定されているか確認
>>244 C:\Program Files\Java\jdk16.0_20\bin ← 16.0は間違いじゃね?)

C:\Program Files\Java\jdk1.6.0_20\binフォルダに
java.exeやjavac.exeが存在していることを確認


もし、java.exeやjavac.exeが存在していなかったら
可能性としては、インストール時にセキュリティソフトがjava.exeやjavac.exeをウィルスと誤検知して、削除か移動された可能性もある



246:デフォルトの名無しさん
10/05/08 16:56:47
>>231
>OSはCです
WindowsC ?

247:デフォルトの名無しさん
10/05/08 17:00:38
>>1

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
URLリンク(www.wikiroom.com)


248:デフォルトの名無しさん
10/05/08 17:02:05
>>246
Cドライブってことでしょ

249:デフォルトの名無しさん
10/05/08 17:44:56
どうした

250:デフォルトの名無しさん
10/05/08 18:38:07
他クラスのpublicな定数を利用するときって定数名だけじゃダメなんですか?

251:デフォルトの名無しさん
10/05/08 18:44:44
public staticな定数ならstatic importという物があってだな。

252:デフォルトの名無しさん
10/05/08 18:50:09
全部自前のクラスなら
定数だけのインターフェース作って全部のクラスにインプリメントしてる

253:250
10/05/08 18:55:46
即レスどうもです

>>251
無事出来ました、ありがとうございます

>>252
今度からはそういう風に設計してみます、ありがとうございます

254:デフォルトの名無しさん
10/05/08 19:11:05
>>210
Apache Commons Compressにあるか?
と思って探してみたがそれっぽいのはなかった。
GZIPのメソッドでそのまま使えそうな気がするがそうでもないか。

255:デフォルトの名無しさん
10/05/08 19:12:18
>>252
いまどきそんな設計するなよ…

256:デフォルトの名無しさん
10/05/08 19:14:39
>>252
おい、定数はenum使えよ
っていうかinterfaceつかうと勝手に実装できるし
それがint型だと変な使い方できるし
Effective Java第2版読めよ

257:デフォルトの名無しさん
10/05/08 20:04:29
>>253

>>255-256



258:デフォルトの名無しさん
10/05/08 20:32:16
Effective Java第2版を読んだやつっているのかな
職場、関係会社、派遣、下請けを今まで見てきたけど、一人だけ読んでいそうな雰囲気だった。
(そもそもenumって何?って返ってくるぐらいだったからなぁ)

259:デフォルトの名無しさん
10/05/08 20:35:50
実際その読んだ人の書いたコードって綺麗だった?

260:デフォルトの名無しさん
10/05/08 20:37:07
えっ、そういう設計はダメなんですか?
初心者なのでよくわからないです…

261:デフォルトの名無しさん
10/05/08 21:57:54
だからEffecitive Javaを読めと
Java5以降のバージョン(enum)が使えないなら第一版(と、結城浩の『Java言語で学ぶデザインパターン入門』)でもいいから

定数にinterfaceを使うなんぞ論外。
定数はコンストラクタの作成を禁止したfinalクラスかSingletonパターンを使うべき

Java5以前の環境では最低でもこの程度のことはすべき。
public final Constant {
 public static final int CONSTANT_A = 1;
 public static final int CONSTANT_A = 2;
 private Constant(){}
}
これでもまだ不十分だが。

Java5以降はこれで十分
public enum Constant {
 CONSTANT_A(1).
 CONSTANT_B(2);
}

262:デフォルトの名無しさん
10/05/09 02:14:15
>137あたりのsuper,this関連(?)の質問なんだけど

内部クラスにもthisとかつけたほうがいいの?
ClassAという内部クラスがあったとき

this.ClassA a = new this.ClassA();

と記述したほうがいいのかな?




263:デフォルトの名無しさん
10/05/09 02:59:58
>>261
定数クラスはclass装飾子が抜けてたりCONSTANT_Aが二つあったり、
enumの方は,が.になってたり、コンストラクタやメンバ変数が必要だったりしませんか?

264:デフォルトの名無しさん
10/05/09 03:15:30
また Effective Java かぶれが暴れてんのか。

265:デフォルトの名無しさん
10/05/09 03:32:53
カオティックな板だな

266:デフォルトの名無しさん
10/05/09 03:50:49
初心者じゃなくなったって実感した時って
どんな事を理解・実装できたあたりからですか?

教えてる新人の場合なら~ってケースでも
教えてもらえると有難いです

267:デフォルトの名無しさん
10/05/09 04:22:36
30年もJavaばかりやってると新人って気持ちじゃなくなるな

268:デフォルトの名無しさん
10/05/09 04:24:09
30年なんてまだまだ新人だろ

269:デフォルトの名無しさん
10/05/09 04:27:58
15年前、これは世界を震撼させる!と思って始めて

まったくそんなことは無かった


270:デフォルトの名無しさん
10/05/09 04:28:13
>>266
interface の使い方を理解したときも、その1つと言えるんじゃないかな。
interface には実装のないメソッド宣言だけがあって、
それを implements したクラスはメソッドの実装を書かなくてはならない、
ということ事態は初心者でも理解できるんだけど、
実際どういうふうに interface を使えばいいかが、初心者には難しい。


271:デフォルトの名無しさん
10/05/09 04:30:28
厳密に定義するなら、始めてから一定の期間が経過していれば初心者ではなくなるな
Javaの場合どの程度の期間が妥当かは知らんが、自動車なら1年だな


272:デフォルトの名無しさん
10/05/09 04:32:59
入門書に書いてあること
一通り、入門書見ずに出来るようになれば
初心者を脱したと。初級者だ
入門書レベルのことじゃ仕事にはならないし
趣味でやってる人間なら十分かもしれないがw



273:デフォルトの名無しさん
10/05/09 04:34:47
まぁそんなところだな。

274:デフォルトの名無しさん
10/05/09 04:43:35
未だに初心者のころと同じようにわからないことばかり。

275:デフォルトの名無しさん
10/05/09 04:46:12
たいていの新人は、Java初心者ってだけじゃなくプログラミング初心者も兼ねてるから
>>261が紹介してるような本をそういう初心者が最初から読んだってあまり効果は無いと思う
入門書クリアレベルじゃたいしたソース書いたことないだろうし
せめて中級者くらいの人が参考に読めばいいと思うよ


276:デフォルトの名無しさん
10/05/09 05:59:01
本は勉強開始してから、1、2年くらいの新人が読むものかと。
それを過ぎたら面白そうなOSSのソースでも読んで、知的欲求を満たすもんだと思う。

277:デフォルトの名無しさん
10/05/09 12:57:27
すみません、実行時に unable to load native library:
can't find dependent libraries と
でてしまいます。どうすれば実行できるように
なるのでしょうか?


278:デフォルトの名無しさん
10/05/09 13:00:02
>>258
読んだ
読書会みたいなのもあるみたいね
>>207
*.Z知らないから的外れかもしれないけど
ライブラリ
URLリンク(commons.apache.org)
windows用exe
URLリンク(www.gzip.org)


279:デフォルトの名無しさん
10/05/09 13:02:29
>>277
Classpathとjavaのバージョン

280:277
10/05/09 13:23:50
>>279
レスありがとうございます。
バージョンはjdk1.6.0_20で、
classpathはカレントを指定してます。

281:デフォルトの名無しさん
10/05/09 13:33:25
>>280
カレントにjarファイルをコピー

282:277
10/05/09 13:56:06
>>281
カレントに置いても実行できませんでした。



283:デフォルトの名無しさん
10/05/09 14:09:53
>>282
エラーメッセージは?

284:277
10/05/09 14:16:06
>>283
同じエラーです。
jdkインストールしてから一度も実行できてないです。
別のパソコンにインストールしたのは普通に使えているのに、
なぜかできないです。


285:デフォルトの名無しさん
10/05/09 14:45:02
>>284
カレントにコピーしたファイル名は?

286:デフォルトの名無しさん
10/05/09 15:53:03
例外処理で整数が入力されるまで、何度も再入力を求める場合はどういう風に書けばいいのでしょうか?
まず整数かどうかを判別する式が思い浮かびません。

287:デフォルトの名無しさん
10/05/09 15:54:46
小数点以下は丸め込むと注意しておいてintにキャストすればいいじゃん

288:デフォルトの名無しさん
10/05/09 16:07:16
>>287
おまい、Java 知ってるか?

289:デフォルトの名無しさん
10/05/09 16:49:51
288はなんか脊椎反射で煽っている気がするなぁ。
普通に読んで Integer.decode(入力文字列) とかで変換しちまえという話じゃないのか。

290:デフォルトの名無しさん
10/05/09 16:53:07
と、小数入っていると変換できなかったか。

291:デフォルトの名無しさん
10/05/09 16:59:12
んーと、Double.valueOf(入力文字列).intValue() とやればいい。

292:デフォルトの名無しさん
10/05/09 17:02:30
整数じゃなかったらという判定がいいなら Integer.decode(入力文字列) で例外catch。

293:デフォルトの名無しさん
10/05/09 17:35:03
ようじょクラスを継承するようちえんじクラスがあって、
ようじょ ょぅι゛ょ = new ようちえんじ();
という感じにスーパークラスの型でサブクラスを
インスタンス化する場合がありますが、
何の為にわざわざそんな事をするのでしょうか。
ようちえんじ ょぅちぇんじ = new ようちえんじ();
と何が違うのでしょうか。
教えて下さい。


294:デフォルトの名無しさん
10/05/09 17:41:38
ようじょクラスに対する操作を書いておけば
ようじょクラスだろうがようちえんじクラスだろうが適用できる

継承関係がなければ
ようじょクラス用とようちえんじクラス用に
それぞれ別々に同じような操作を書かないといけなくなる

295:デフォルトの名無しさん
10/05/09 18:01:12
>>294
有難うございます。
その、継承関係でオーバーライドが機能するのは分かるのですが、
ようちえんじ ょぅちぇんじ = new ようちえんじ();  では
継承関係は反故になってしまうのでしょうか。

296:デフォルトの名無しさん
10/05/09 18:15:11
別に継承関係があって、
共通処理をようじょクラスで記述できるのなら、
ようちえんじクラスで持っててもいいよ

297:デフォルトの名無しさん
10/05/09 18:55:48
>>296
うーん難しいですね。
よく本とかにのっている
List list = new ArrayList();

ArrayList arraylist = new ArrayList();
とどうちがうのか分かりかねているのです。

298:デフォルトの名無しさん
10/05/09 19:13:48
どっちでもいいけど、ある日ArrayListの代わりに
パフォーマンス上の理由でLinkedListを使わざるをえなくなった場合、
ArrayList arraylist のコードの方は直さなきゃならないね。

同様に、以下のようなメソッドを別に用意していたとしよう、
void method(ArrayList arraylist){
 arraylist.add("unko");
}
上記メソッドはaddメソッドにしか用事がないのに
ArrayListで型宣言してるばっかりにLinkedListが渡せない。
これは大いに問題。

上記のような問題が起こらないと言える範囲、
もしくはArrayList特有のメソッドが重要な場合とかは
ArrayListをそのまんま変数宣言で使っていいよ。

299:デフォルトの名無しさん
10/05/09 19:14:47
>>263
素で間違い
片方はCONSTSANT_Bに
でもあれでもまだ問題あり
とにかくEffective Javaでも読む

.は,に戻す

300:デフォルトの名無しさん
10/05/09 19:17:26
List list = new ArrayList();
やっぱり ArrayList じゃなくて LinkedList にしようとか思った時に
List list = new LinkedList();
にすれば動く。

ArrayList list = new ArrayList(); だと
LinkedList list = new LinkedList();
に修正したとしても、例えば
list.ensureCapacity(100);
とかいう文があったらエラーになる。

まあ普通はこういうことは起こらないけど、あくまで例として。

301:デフォルトの名無しさん
10/05/09 19:34:36
>>298
>>300
分かりました!
有難うございます!!

余談ながら、実は『=』の左側で型を宣言するのはメモリに
領域を確保する為だという考え方がぬぐえず、だから大抵の
場合スーパークラスよりサブクラスの方がメソッドとかも
増えているので、スーパークラスで確保した領域にサブク
ラスを代入すると、オーバーライドや独自メソッドなど
確保領域からはみ出る部分が切り落とされると思えて仕方
なかったのです。

302:デフォルトの名無しさん
10/05/09 19:39:19
>>262
thisつけるかどうかはどこのスコープかによる。
迷ってるならCheckStyleを使うべき。CheckStyleがthisの付け忘れを指導してくれる。
もしEclipseを使って開発してるならEclipseにもCheckStyleプラグインがあるからそれを使うといい。

> 内部クラスにもthisとかつけたほうがいいの?
> ClassAという内部クラスがあったとき
> this.ClassA a = new this.ClassA();

そもそもnewのあとにthis.は不要。
型の頭にthis.つけたらコンパイルエラー。

インスタンス生成のことをよくわかってないようなので
基礎から勉強し直した方がいいと思う。実際に自分でそのソースコードを書いて、
コンパイルして自分の目で確かめてみましょう。

内部クラス等の扱いについての詳しい解説は『Java言語仕様』を読むかそこいらのJava入門サイトでも読んだほうが早い。

>>263
CONSTANT_A(1)という書式は無理にする必要ない。
CONSTANT_Aでもいい。toString()が返す値が1になるかわりに"CONSTANT_A"にかわるだけ。
そこいらのサイトを検索して出るJavaのenumの仕様とサンプルを見るべし。

303:デフォルトの名無しさん
10/05/09 19:40:58

>>267
Javaはそんな老けてない。それってC/C++の間違い。Javaは登場してからまだ15年しか経ってないから。

>>269
10年前にJava始めたときは興奮した。それまではC/C++大学で弄っててついでに大学の鯖でHTMLとかCGIとか弄ってたから。
あの頃の多くのJava本がまえがきでJavaの魅力を熱烈にアピールしてC++とここが違うということを強調しまくっていた。
あの頃にあんなまえがき読んだら興奮する。当時はC/C++が最強と言われていたんだから、身震いを覚えた。「C/C++に慣れきっていたら
なんだこの変な言語」と思っていたがまだC++もほとんど十分に把握していなかったこととC言語の煩雑さに不満を覚えていたから
あのときのインパクトは衝撃的だった。

>>276
しかし、Java以外の言語にある程度経験がある場合、とくにC/C++経験豊富でJava初心者の場合はEffective Javaはおすすめできる。
enumのところに書いてあるコードはそれほど難しくないから読む価値はある。というかenumだけなら買わなくてもここでほとんどそっくりな解説を読めたりする。
惑星から物体の重量を計算するenum型のサンプルとかもろにEffective Java第2版と同じことがかいてある。
URLリンク(java.sun.com)

あとインタフェースを定数にするのがなぜいけないかは、ここを読むのがおすすめ。
URLリンク(www.ibm.com)

304:デフォルトの名無しさん
10/05/09 19:52:54
>>286-292
文字列の中にドットが含まれていれば小数をみなす
というんなら、そんなめんどうくさいことやらずにこうすればいい
while(true){

 //コンソールから小数を入力するコード

 if(!input.contains("."))
  break;
 }
}

例外のことは考えてない

305:デフォルトの名無しさん
10/05/09 20:55:12
"one"とかだったらどうするよ?

306:286
10/05/09 21:48:41
みなさん回答ありがとうございます。

>>305さんがおっしゃってる通りなのですが、文字が入力された場合などの判別も条件に入れての質問です。
条件があいまいな質問になってしまい申し訳ございません。

307:デフォルトの名無しさん
10/05/09 22:04:39
>>303

>>267はジョーダンだろw ジョーダンにマジレスすんなよw

308:デフォルトの名無しさん
10/05/09 22:42:27
まあ問題はlistでやると使えないメソッドがかなりあると
void addFirst(E e)
void addLast(E e)
void clear()
E getFirst()
E getLast()
boolean offer(E e)
boolean offerFirst(E e)
boolean offerLast(E e)
E peek()
E peekFirst()
E peekLast()
E poll()
E pollFirst()
E pollLast()
E pop()
void push(E e)
E removeFirst()
boolean removeFirstOccurrence(Object o)
E removeLast()
boolean removeLastOccurrence(Object o)

309:デフォルトの名無しさん
10/05/09 22:54:09
>>308
それらはListではなくDequeだな

310:デフォルトの名無しさん
10/05/09 23:14:49
>>305
java.util.regexか
Apache Jakarta ProjectのApache OROを使って正規表現で文字列を除外する。

311:デフォルトの名無しさん
10/05/09 23:15:44
>>308
何の話題?
元の話の流れがわからないのでリンク元を

312:デフォルトの名無しさん
10/05/09 23:53:18
>>311
linkedlistで使えてlistで使えないメソッド

313:デフォルトの名無しさん
10/05/10 00:21:48
なるほど。
そやな。
あれはDequeのメソッドも混じってるからな。

314:262
10/05/10 00:51:56
>>302
ありがとうございました

315:デフォルトの名無しさん
10/05/10 01:18:31
内部クラスの内部クラスの内部クラスの内部クラスをオーバーライド

316:デフォルトの名無しさん
10/05/10 02:39:19
勢いで作った
URLリンク(www51.tok2.com)
改良点があれば・・・・

317:デフォルトの名無しさん
10/05/10 02:44:17
ご苦労さんとしか言いようがないが…

318:デフォルトの名無しさん
10/05/10 03:38:57
>>316
('a')
('A')
('3')
('-')

顔文字に見えた

319:デフォルトの名無しさん
10/05/10 12:44:29
>>318
static importして
sysout(MINIS10 +" massage "+ MINIS10)
って便利かなと思うけどどう考えてもGRAVE_ACCENT100とか使わないよね・・・

320:デフォルトの名無しさん
10/05/10 18:00:50
どうでもいいことかもしれんけど
式書くとき
n=m+12; ←のように詰めて書く?
n = m + 12; ←のようにスペース空けて書く?

引数とかでも
hoge(n,1,true,a,"abc"); 詰めて書く?
hoge( n, 1, true, a, "abc");  空けて書く?

321:デフォルトの名無しさん
10/05/10 18:10:28
>>320 Eclipse で Ctrl+Shift+F

322:デフォルトの名無しさん
10/05/10 18:10:37
>>256
定数にenum使うってswitch文とかで分岐に使うような複数ある定数の場合でしょ?
他の定数と関連付ける必要ない定数はenum使っちゃだめじゃないの?

323:デフォルトの名無しさん
10/05/10 18:23:14
エフェ厨に構うなよ。2ch 用語覚えた中学生みたいなもんだから。

324:デフォルトの名無しさん
10/05/10 18:37:18
俺が昔読んだ入門書には定数だけのインターフェース作る様なこと書いてあった気がした

325:デフォルトの名無しさん
10/05/10 18:48:10
昔の入門書といえば、そんなもんかも

326:デフォルトの名無しさん
10/05/10 19:10:12
文字列を10文字幅にして、足りない部分は先頭に'0'を付けるにはどうすればいいですか?
例えば "deadbeef"を入力すると"00deadbeef"と返還する処理を書きたいです。
String.format("%010s", "deadbeef");
とやってもダメでした

327:デフォルトの名無しさん
10/05/10 20:09:07
>>322
あとは多少気持ち悪いけど、
Java上でSingletonやりたい場合かな。

328:デフォルトの名無しさん
10/05/10 20:18:59
>>322
駄目っていう理由はないと思ってるんだけど。
何でそう思ってるのか知りたい。

329:デフォルトの名無しさん
10/05/10 20:24:25
public class Rect{
package a;
public class AA{
int ai;
protected int aj;
}

package b;
import a.AA;
class BB extends a.AA{
BB(){
AA aa = new AA();
aa.ai = 7;(1)
aa.aj = 9;(2)
ai = 7;(3)
aj = 9;(4)
}
}
(1)-(4)のなかで正しいのはどれですか?

330:デフォルトの名無しさん
10/05/10 21:51:29
>>329
目の前のPCで動かせばいいだろうが。
何でも聞けると思ってんじゃねえぞ。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch