[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/09 23:39 / Filesize : 54 KB / Number-of Response : 212
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者】Java質問・相談スレッド119【歓迎】



1 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 05:54:45 ]
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    pc11.2ch.net/hp/
Webプログラミング pc11.2ch.net/php/
をご利用下さい。

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

前スレッド
 【初心者】Java質問・相談スレッド118【歓迎】
pc11.2ch.net/test/read.cgi/tech/1218360111/
次スレは>>990あたりで。

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

2 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 05:56:04 ]
**** 関連スレッド案内 ****
■ AWT と Swing は --
Java低速GUI Swing 7
ttp://pc11.2ch.net/test/read.cgi/tech/1204155623/l50
■ SWT は --
Java 高速GUI SWT 3
ttp://pc11.2ch.net/test/read.cgi/tech/1164877399/l50

■ NTT DoCoMo の iモード携帯電話用 Java (iアプリ) は --
iモード携帯電話用Java(iアプリ) Part18
ttp://pc11.2ch.net/test/read.cgi/tech/1214192372/l50
■ DoCoMo 以外は --
CLDC+MIDP+携帯電話用Javaスレッド part 8
ttp://pc11.2ch.net/test/read.cgi/tech/1206017034/l50

■ 課題・宿題は --
★★ Java の宿題ここで答えます Part 65 ★★
ttp://pc11.2ch.net/test/read.cgi/tech/1212085079/l50

**** 開発環境が必要の場合は ****
■ J2SE 1.4.0
ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/index.html
■ J2SE 5.0 (1.5.0)
ttp://java.sun.com/j2se/1.5.0/ja/
■ Java SE 6
ttp://java.sun.com/javase/ja/6/

**** 実行環境だけが必要の場合は ****
■ Java ソフトウェアのダウンロード
ttp://www.java.com/ja/

3 名前:デフォルトの名無しさん [2008/09/03(水) 06:27:30 ]


4 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 09:00:19 ]
前スレのきちがいへ
castはジェネリックで使うから意味があるわけで
ジェネリックが使えなければ意味がない。
動的と言ってる部分はあくまでジェネリック部分なのだから。
だからジェネリックのないところで同じようなことはできない。
だからみんな出来ないと答えてる。

まあキャストした後でどう使うのかをコードで示せれば、
それに応じた解決策はでるかも知れない。
といっても使い方が、言語自体拡張したりテンプレート的なもので使うとかでないと
java言語の範疇では無理だと思うけどね。


5 名前:デフォルトの名無しさん [2008/09/03(水) 09:09:38 ]
Javaは動的に見えて、あくまで静的な言語ですな。結局void *でしかないですけど・・・

6 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 10:20:35 ]
前スレの988ですが質問の仕方が悪かったようなので再度お願いします
型の変換について質問なのですが
String型をint型として扱いたい場合Integer.parseInt(String)を使いますよね?
しかしこのStringは数字の文字列でなくてはいけないようで
数字以外の文字列が含まれている場合エラーが出ます(最初lengthでも返ってくるかな?と思ったのですが)
double型をint型として扱いたい場合Integer.parseInt()ではなく(int)doubleでキャストをしますよね?
同じ型変換のようですが両者には違いがあるようで
Stringの場合はintにキャストできないしdoubleの場合はInteger.parseInt()を使うことはできません
私はパースするという行為とキャストするという行為が型変換をするための行為だと思ってるのですが
これは間違った認識でしょうか?
もし両者とも型変換を行うものであるならば内部的にどのような違いがおきているのでしょうか?

自分で何か変な勘違いをしてるのかと思っているのですがよろしくお願いします

7 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 10:57:21 ]
>>6
> 私はパースするという行為とキャストするという行為が型変換をするための行為だと思ってるのですが
> これは間違った認識でしょうか?

キャストは型変換だけど、パース(parseInt)なんかは、
型変換だとは考えないほうがいいと思うので、
間違った認識でしょうね。

8 名前:6 mailto:sage [2008/09/03(水) 11:24:10 ]
>>7
どうもレスありがとうございます
キャストは型変換ときいてひとまず安心しました
パースは文字通りに考えると構文解析なのでしょうが
それが何を意味してるのかが正直わかりません
その辺も含めてもっといろいろ調べてきたいと思います

9 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 12:00:26 ]
型がない言語から勉強をはじめるとそういう解釈にもなるんでしょう。

10 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 12:40:52 ]
>>8
内部的(なイメージ)からだとキャストを型変換というのも微妙な気がするが。
変換というと元のものが別のものに変わるような気がしてする。

ある果物(メモリ上のオブジェクトイメージ)に「リンゴ」というラベル(変数a)が
付いていて、それにもう一つ「ふじ」というラベル(変数b)を付けるのがキャスト。
どっちも同じものを示しているし、オブジェクトイメージは変化しない。
この手法(?)は(変数が実質ラベルである)オブジェクトにしか出来ないので、
プリミティブが関係する場合はキャストのように見えるのは全てパースで、
つまり元から別のものを作り出している。

…ヘタだな、すまん。



11 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 12:59:02 ]
1. 型変換のキャスト
double d = 3.14;
int i = (int)d;

2. >>10が書いているような型の解釈を替えるためのキャスト
リンゴ ap = ...;
ふじ fj = (ふじ)ap;

たぶんこの2種類があって、1の方は組み込み型でしか使えない。ので、
組み込み型ではないクラスで型変換のようなことがしたかったら
parseInt()のようなキャストではない実装が必要になるんでしょう。




12 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 13:48:29 ]
そういう面倒臭いのはPerlとかでやっとけ

13 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 22:16:51 ]
>>9
暗黙の型変換やってるだけで全部バリアントっていう言語は実際少ないでしょ。

14 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 22:35:26 ]
>>4
ジェネリック無くても、オーバーライド関係でキャストは必要じゃね?

15 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 22:56:50 ]
castってのはClass#castの話だろう


16 名前:デフォルトの名無しさん [2008/09/03(水) 23:31:05 ]
JSplitPaneやJScrollPaneを生成してから、
そのサイズを使って処理を行いたいんですけど、
生成時はサイズが 0 のままで、
repaint() が呼び出されないとサイズに有効な値が入りません。

pack() とか revalidate() とか適当に呼び出してるんですけど、
足りないんでしょうか?

(そもそも pack とか validate の使い方がよくわかってませんが。。)

17 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 00:28:25 ]
そういうもんだから仕方ない

18 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 00:30:20 ]
setVisible(true)しないと計算されないんだっけか?

そのサイズを使った処理ってのは何?

19 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 00:53:42 ]
>>16
サイズで私の場合は、中に入れ込むコンポーネントの
setPreferredSize を使うと大体解決します。

とりあえず、api ドキュメントを読みましょう。
Swing の場合は "How to Use XXX" も読みましょう。

20 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 01:22:22 ]
>>16
ComponentListener



21 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 01:45:58 ]
JToolBarってデフォルトのままgetBackgroundを使うとrgb238,238,238が入ってる
みたいなのですが、ツールバーに加えるコンポネントの背景色に
setBackground(jtoolbar.getBackground())とか
setBackground(new Color(238,238,238))とかやってもツールバーに対して白っぽくなります。
で、toolbarの方にsetBackground(new Color(238,238,238))ってやると色が揃ったので、
どうやらJToolBarのデフォルトの色がおかしいみたいだったのですが
getBackgroundで返ってくるのじゃないこのデフォルトの色は何なんでしょうか?

22 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 04:36:00 ]
>>21
どの JToolBar か分かんないが、1.6.0_07 のデフォルトのなんとかいうテーマのは、
グラデーションが掛かっているように見える。
JToolBar のレンダラ(?)が書いてるんだと思うが、Color はグラデなんか表現できないから、
一番明るい色かなにかを返してるとかじゃないか。
もし「ならば上に載せるコンポーネントの背景色をどうすればいいのか」という話なら、
透明にすればいいんだ。

23 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 05:20:28 ]
>>22
ありがとうございます!
よく見ると確かにグラデーションなんですねこれ。
背景色透過ってどうするんだろうと調べたらそのものsetContentAreaFilledがあるんですね。
これfalseにすると透過になる代わりにマウスに対するフォーカスもなくなるみたいなので
マウスのリスナで切り替えるようにしたら上手く出来ました、情報感謝です!

24 名前:デフォルトの名無しさん [2008/09/04(木) 09:42:47 ]
調べてみましたが、確信が持てなかったので教えて下さい。
J2MEでTomcatって動作できませんよね?

25 名前:デフォルトの名無しさん [2008/09/04(木) 10:03:20 ]
自己解決しました。動作出来ないっぽいです。

26 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 12:58:56 ]
>>23
JComponent#setOpaque

27 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 13:32:17 ]
オパキュー

28 名前:デフォルトの名無しさん [2008/09/04(木) 14:51:07 ]
Thread thread = new Thread (){
  public void run(){
    while (true) {
      sleep(100);
    }
  }
};
thread.start();
thread = null;

こういうふうに、どこからも参照されなくなったスレッドは、
いつかGCに消されて処理が止まるんでしょうか?
それともずっと動き続けるんでしょうか?

29 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 15:01:15 ]
動き続ける

30 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 15:10:16 ]
>>28
ずっと動き続けます。
どこからも参照されない状態にはなっていません。

Thread.start() に、以下の行があります。
> group.add(this);




31 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 18:32:15 ]
何でスレッドを安全に停止するスレッドってなくなっちゃったんですか?

32 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 18:52:14 ]
>>31
なんだそれ

33 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 19:01:16 ]
Thread.stop() が deprecated な事を言ってるんじゃ。
とりあえずAPIリファレンスみれば

34 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 19:42:45 ]
安全に停止する方法がなくなったんじゃなくて、
元々安全じゃないから使うなになったんだろ


35 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 19:56:54 ]
代替コードがjavadocに書いてあるだろ。

36 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 21:10:13 ]
ロックオブジェクトはstaticで作るべきですか?


37 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 21:13:49 ]
>>36
何が理由でロックしたいのかによる。

38 名前:36 mailto:sage [2008/09/04(木) 21:34:17 ]
すいません。
質問を変えます。

どういう場合にstaticで作るべきでしょうか?





39 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 22:10:52 ]
意味が分からん。
ロックしたい粒度、スコープをあらわすのにstaticオブジェクトがふさわしい場合


40 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 22:24:00 ]
下記のようにmethodAとmethodBが同じクラス内にあったとき
methodA呼び出し中にmethodBを呼び出し、再度methodAを呼ぶと
デッドロックは起こりますか?

class A{

private Object lock = new Object();

void methodA(String str){

synchronized(lock){

try(){
    while(true){
Thread.sleep(1000);
System.out.println(str);
}
}catch(Exception e){
e.printStackTrace();
}

}

}

void methodB(){

lock = new Object();

}

}



41 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 22:35:44 ]
あ、デッドロックじゃなくて、単なる処理待ちでした
要するに、ロックオブジェクトに別のインスタンスを代入すると、
同期中の処理は同期されなくなるんでしょうか?

42 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 22:45:25 ]
>>41
同期っつーか、排他制御されると思う根拠は何?

43 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 22:46:34 ]
いえ、予想としては排他制御されなくなると思ってるんですが
違うのですか?

44 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 23:18:39 ]
>>40
ソースで説明できるのに、試していないのでしょうか。

それはさておき....
ttp://www.y-adagio.com/public/standards/tr_javalang2/statements.doc.html#255769
ロックに使われているオブジェクト自体は、他のスレッドからアクセス可能。
ロックを獲得しているスレッドが、同じロックを獲得することは妨げられない。
等など。

45 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 02:43:43 ]
あたまわる!

46 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 02:51:49 ]
何が回ってるって?

47 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 07:40:11 ]
×あた回る
〇あ賜る

48 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 10:39:35 ]
ファイルを読み込み、修正し、書き込みなんですが、
1つが600MBとか1Gとかのファイルなので、全部をメモリで読み込めず、
また、作業ファイルも作れないのですが、直接修正個所を当該ファイルに書き戻したいです。

read(byte[])して、write(byte[])は無理なので、どうすればいいのでしょうか。


49 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 10:42:40 ]
>>34
実はそう言われると思っていたんですがその方が分かりやすいと
思ったのでああ書きました。

結局停止するメソッドはないんですね。
本家サイトに書かれている方法も分かるんですが、あれだと
ぐるぐる回ってる処理でしか停止できないので気持ち悪いですね。
一つのシーケンスを途中で切る事ができないって言うか。

シーケンスの中に止まるかどうかを判定するコードを何個も
仕掛けておかないとダメって事ですか?

てか >>31 はメソッドとスレッドを間違えてますね。

50 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 10:59:54 ]
>>48
修正内容による。
ファイル先頭で読み込んだ内容がファイル終端に書き込むべき内容に影響するとかだと面倒だし。

全てのデータの影響範囲が局所的なら、
RandomAccessFile とか FileChannel とかで read()、内容を修正、write() でOK。
場合によってはバッファリング必要になるけど。



51 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 11:10:06 ]
regexなどつかって修正するので、ファイルの結果のサイズが可変なんですが、どうしましょう?
マッチ個所を'\0'で埋めるわけにもいかず、とくにマッチを切り取りすると間違いなく可変です。

アルゴリズムはすぐ浮かぶんで作れるんですが、
開いたファイルを修正してそのまま上書きするようなライブラリとかないでしょうか?

52 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 14:03:48 ]
>>49
だからjavadoc読んでこい

53 名前:デフォルトの名無しさん [2008/09/05(金) 16:18:21 ]
ImageBufferから画素のいろをα,R,B,Gの値で取得したいんですがどうすればいいでしょうか
ピクセルという単位についても教えていただけたらと思います

54 名前:デフォルトの名無しさん [2008/09/05(金) 16:21:15 ]
BufferedImageじゃないの?
BufferedImage#getRGB(int x,int y) - int

55 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 19:59:46 ]
getImageメソッドで1つ上のディレクトリに置いてある画像を読み込むにはどうしたら良いんですか?

img = getImage(getCodeBase(),"../画像.gif");

と書いて実行しても画像が表示されません。下のディレクトリにある画像の指定は出来るんですが。

56 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:30:01 ]
>>55
Javadoc見ろよボケ

57 名前:デフォルトの名無しさん [2008/09/05(金) 21:37:38 ]
while(true){
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str=br.readLine();
System.out.println(str);
br.close();
}

これを動かすと一回入力しただけで終了になってしまいます。
何か分からないのですが、br.close()を削除すると何回もちゃんとループ出来ます。
なんでこれって一回で終わっちゃうのでしょうか?

58 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:41:13 ]
>>57
なんでって馬鹿なコーディングしてるから落ちるんだろ
絶対落としたくないなら例外処理ぐらいしろボケ

59 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:43:35 ]
例外処理はこの外でしてるんですよ。
どこが馬鹿なのかを聞きたいわけでして。

60 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:44:27 ]
>>57
br.close(); で連鎖的にSystem.inもクローズされる。



61 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:45:11 ]
>>59
ループの中で例外処理しなきゃ意味ねーだろボケ

62 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:47:17 ]
>>57
BufferedReader.close()
> ストリームを閉じます。

とありますが、この意味が分からない、と。
何処から説明した方が良いのでしょうね。

63 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:48:07 ]
>>59
BufferedReader 閉じたら
その元になってる InputStreamReader
その元になってる System.in も連鎖的に閉じちゃうからね。

閉じた System.in から read() しようとすると IOException 食らうんだっけか?

64 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:50:08 ]
頭悪すぎ

65 名前:57 mailto:sage [2008/09/05(金) 21:58:51 ]
なるほど、ありがとうございます。
System.inは常に開かれてるのかと思ってました。
たしかに標準入力じゃなくて他のストリームから毎回開いて読み込むようにすると大丈夫みたいでした。
ちなみに標準入力のストリームって一回閉じちゃうと自分で開くことって出来ないんでしょうか?

66 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 22:06:16 ]
無理。

67 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 22:34:40 ]
>>66
そうですか、どうもありがとうございます。

68 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 23:22:50 ]
いや、できる

69 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 23:23:40 ]
>>63
実装上EOFExceptionだったりする事もある

70 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 23:31:41 ]
何?このスレ
System.inを再度開くこともできない無能回答者しかいないの?
ププw



71 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 23:43:33 ]
>>68
やり方ぷりーず

72 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 23:47:38 ]
ググレカス

73 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 23:49:52 ]
>>71
釣られるなって

74 名前:デフォルトの名無しさん [2008/09/05(金) 23:58:57 ]
環境変数のJAVA_HOMEを設定していないユーザ環境において、
JDKまたはJREのインストールディレクトリのパスを取得するには
自前でパス検索するしかないのでしょうか?
それともJavaのインストールパスを取得する簡単な方法はありますか?

75 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 00:09:47 ]
>>74
WindowsでSunのJDK/JREをインストーラ経由で入れてるなら
レジストリ見るとかあるけど、確実でもないし簡単ともいえない

76 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 00:18:29 ]
>>64
成長しましたね。

77 名前:デフォルトの名無しさん [2008/09/06(土) 00:19:40 ]
>>75
レスありがとうございます。書き忘れましたが、Windows環境での話です。
何故このような疑問を持ったかというと、
JNIでC言語からJavaを呼び出すプログラムを実行する際に、
JDK/JREのインストールディレクトリ下にあるjvm.dllを
読み込む必要があるためです。

通常であればJAVA_HOME、PATH、レジストリあたりを見るべきなんでしょうか。
複数のJDK/JREがインストールされていた場合はどうするべきでしょうか?

78 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 00:26:35 ]
>>77
複数インストールされてる場合は、
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\CurrentVersion
あたりを見るとか、JDK/JRE関連レジストリ全部読み込んで一番バージョンが大きいやつ使うとか。

79 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 00:34:33 ]
>>78
アプリケーションによって何を使うかは異なるわけですね。
何かサンプルになるものを探してたのですが、
意外と見つからないです。
もう少し考えてみます。

80 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 01:01:11 ]
java使わないおれがあてかんで回答してやると
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\CurrentVersion
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\[バージョン]\RuntimeLib
が正解だろ




81 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 01:06:51 ]
質問というより相談で申し訳ないのですが、
JAVAでチャットのサーバーサイドを作る場合、大きく分けて2種類あると思います。
1クライアントに1スレッドを作るやり方と、java.nioを使ってクライアント全員を並列処理する方法です。
そこで質問なのですが、大人数が参加するチャット(ルーム機能も付いています)では、
やはりノンブロッキングIOを使うほうがいいのでしょうか?


82 名前:デフォルトの名無しさん [2008/09/06(土) 01:27:11 ]
ノンブロッキングもスレッド使うのも、接続増えたら結局は鯖かえなくちゃいかんのじゃないか

83 名前:デフォルトの名無しさん [2008/09/06(土) 02:03:27 ]
javaのSetについて質問です

class Address{
public Address(String name, String address) {
this.name = name;
this.address = address;
}
public String toString() {
return "name : " + name + " address : " + address;
}
//getter setterは省略
public String name;
public String address;
}


84 名前:デフォルトの名無しさん [2008/09/06(土) 02:04:47 ]
上の続きです
public class Practice{
public static void main(String[] args) {
Set<Address> test = new HashSet<Address>();

test.add(new Address("hiroshi", "tokyo1") );
test.add(new Address("hiroshi", "tokyo2") );
test.add(new Address("hiroshi", "tokyo3") );
test.add(new Address("hiroshi", "tokyo4") );
test.add(new Address("sayoko", "tokyo1") );
test.add(new Address("sayoko", "tokyo3") );

Iterator<Address> iter = test.iterator();
//hiroshiの情報だけ取り出したい
while( iter.hasNext() ){
Address i = iter.next();
if( i.name.equals("hiroshi") ) {
System.out.println( i );
}
}
System.out.println("-------------");
//tokyo1の情報だけ取り出したい
iter = test.iterator();
while( iter.hasNext() ){
Address i = iter.next();
if( i.address.equals("tokyo1") ) {
System.out.println( i );
}
}
}
}

85 名前:デフォルトの名無しさん [2008/09/06(土) 02:07:09 ]
上の続きです

SetでAddressクラスのnameをキーとして情報を取り出したり
addressをキーとして情報を取り出したりしたいのですが,
上の実装だとset内の値の数が増えてくるとなんだか効率が悪いような気がします.
他に実装方法はありますでしょうか

86 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 02:14:45 ]
class うんこ {
  Map name, addr;

  public void add(Addr addr) {
name.add(addr.getName,add);
addr.add(addr.getAddr,add);
}

public Addr getByName(Str name) {
return name.get(name)s;
}
}

これで我慢しとけハゲちゃびん

87 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 02:46:46 ]
Mapじゃあかんの?

88 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 03:35:04 ]
java.awtComponentのソース見てたら
setEnabled(boolean)のところで

Component.this.setEnabled(b);

って出てきたんだけど、このthisってどゆ意味?


89 名前:85 [2008/09/06(土) 03:58:02 ]
>>87
Mapだとkeyの値が一つに限定されてしまいます
あと,valueからkeyを取得することができないです.

90 名前:85 [2008/09/06(土) 04:07:38 ]
ごめんなさい
valueからkeyはbidimap使えばできますね(標準関数じゃないけど)
>>89 の下一行は無かったことで

keyの値を色々変えてSetの中身を検索したいです



91 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 04:17:55 ]
>>88
限定this というものらしい。
ttp://www.y-adagio.com/public/standards/tr_javalang2/expressions.doc.html#251603

で、そのソースコード、JDK7ですか。

92 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 04:27:10 ]
>>91
JDK6です。


93 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 04:28:07 ]
>>90
Index用のMapを作るのはどうでしょう。
Map<String(name), List<Address>>
Map<String(address), List<Address>>

AddressはSetに追加してるから可変ではないと思いますが、
可変の場合は、変更シークエンスをキチンとチェックしてくださいまし。

94 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 04:30:23 ]
>>91
そのサイト読んでみたけどよく分かんないっす……


95 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 04:32:11 ]
>>90
とにかく突っ込んどけば簡単に検索できるっていうクラスは無いんじゃないかな。

>>89
keyの値が一つに限定って、"hirosi"→"tokyo1","tokyo2","tokyo3"…なら
Map<String,Set<String>> とか Map<String,List<String>> で表現できるでしょ。
逆もしたかったら "tokyo1"→"hirosi","sayoko" を同じ構造の別の Map に入れとく。
つまり(クラス名はともかく) >>86 みたいな感じってこと。

96 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 04:39:32 ]
>>88
内部クラスからそれを含むクラスを参照してるってこと。

97 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 04:52:15 ]
>>88
> Component.this.setEnabled(b);
が書かれているメソッドsetEnabled(boolean)はComponentクラスのメソッドではなく、
その内部クラスのメソッドじゃない? たぶんAccessibleAWTComponentクラス。
クラス名.thisという書き方はQualified thisと呼ばれていて、
ttp://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.8.4
内部クラスを囲う外側のクラスのthisを明示的に指定することができる。
質問の例では、内部クラスにもComponentクラスにもsetEnabled(boolean)が定義されているので、
内部クラスでthis.setEnabled(b)とか単にsetEnabled(b)と書くと、
内部クラスのsetEnabled(boolean)が呼ばれる。
Componentクラスの方のsetEnabled(boolean)を呼ぶためにそういう書き方をする。

98 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 08:51:40 ]
htmlにJavaApletを組み込んで、新しいプログラムが動くか動かを実検したいです。
完成したら、皆も使える用にしたいが、<!--(?)の続きはどう書きますか。

99 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 09:24:12 ]
それはここで回答をもらうより、
ググった方が理解し易いと思われる

一応sunのを貼っておく
sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/guide/misc/applet.html

100 名前:デフォルトの名無しさん [2008/09/06(土) 09:32:22 ]
その聞きたいアプレットのことは、普通に本とかウェブの解説じゃないか?








[ 続きを読む ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<54KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef