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 ] その聞きたいアプレットのことは、普通に本とかウェブの解説じゃないか?
101 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:01:51 ] >>81 その処理が滅茶苦茶リソースを食うなら java.nio で並列処理したほうがいい。 あと通信量がすんげー多いなら並列処理のほうがパフォーマンスが上がる。 このどちらでもないなら、どっち使っても大して変わらない。
102 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:09:17 ] いや、変わるだろ
103 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:11:59 ] >>101 プラシーボが期待できる場合も追加で。
104 名前:101 mailto:sage [2008/09/06(土) 12:00:59 ] >>102 スレッドの切り替えが重い OS なら変わるな。 で、たとえばどんな場合を想定してる? >>103 忘れてた。 スレッドのコンテキストスイッチが重いんだろうなという妄想に取り付かれていたり ほんの少しでも早ければそれで満足なら並列処理で。 プログラムが楽になればそれでいいならスレッドで。
105 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 13:04:45 ] 両方作って比較して結果書き込んでくれ
106 名前:85 [2008/09/06(土) 14:59:54 ] >>93 >>95 了解です どうもありがとうございました
107 名前:デフォルトの名無しさん [2008/09/06(土) 16:52:24 ] eclipse3.3エウロパを使って開発しています。 そこで、antを使って独自のjarファイルを作成したいのですが、 うまくいきません。 build.xmlとかいうのを作成して、右クリックのantの実行ってやると、 --------------------------------------------------------------- Buildfile: D:\AppData\Eclipse\workspace3.3\Hoge\build.xml directory: compile: [javac] Compiling 1 source file to D:\AppData\Eclipse\workspace3.3\Hoge\Classes BUILD FAILED D:\AppData\Eclipse\workspace3.3\Hoge\build.xml:18: Unable to find a javac compiler; com.sun.tools.javac.Main is not on the classpath. Perhaps JAVA_HOME does not point to the JDK. It is currently set to "C:\@Development\Java\jdk1.6.0_03" Total time: 297 milliseconds --------------------------------------------------------------- こんな風にエラーになります。 何が原因でしょうか?
108 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 16:56:35 ] >>107 >Perhaps JAVA_HOME does not point to the JDK. >It is currently set to "C:\@Development\Java\jdk1.6.0_03"
109 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 17:04:27 ] >>81 一般にスレッドは他の資源よりリソースを消費する。 したがって、大量のスレッドを用いると問題が発生する可能性がある。 ノンブロッキングIOでは、スレッドの数を抑えることができるので、 スケーラビリティに有利となる。つまり、 クライアント数の増加に対する性能の劣化をそれなりに抑えることができる。 一方、ノンブロッキングIOを使うと、処理を振り分けるところを 自前で書かなくてはならないため、プログラミングが複雑になる。 しがたって、最初はクライアント毎にスレッドを使うように書いておいて、 問題が出てきたら NIO を使うようにリファクタリングするのがいいんじゃまいか とよく知らない俺が書いてみる
110 名前:デフォルトの名無しさん [2008/09/06(土) 17:20:20 ] >>108 そこなんだけど、それって環境変数設定しろってこと? 自分、java_home設定しないでeclipse は動いてるんだけど。 antもいけないのかな?
111 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 17:25:26 ] 今jcpad使ってるんだけどどうも不便で・・・・ アプレットを簡単に実行できて軽い奴って無いかな
112 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 17:25:27 ] >>109 おまえアホだなw どこがおかしいのか分かんないんだろうけどww
113 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 17:27:49 ] >>81 2004年の記事 Servlet APIとNIO: ついにServlet APIとNIOが結合できる www.ibm.com/developerworks/jp/java/library/j-nioserver/index.html
114 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 17:35:14 ] >>110 eclipse や ant が動いているのは、JREで実行しているのでは? また、eclipseでのコンパイルは、eclipseに入っているIBMのコンパイラが やっているので、環境設定は関係ない。と思う
115 名前:デフォルトの名無しさん [2008/09/06(土) 17:36:02 ] appletviewer
116 名前:デフォルトの名無しさん [2008/09/06(土) 17:43:37 ] antは腐ってるからな。 Java自体腐ってるけど。 Development\Java\jdk1.6.0_03\lib\tools.jarを Development\Java\jdk1.6.0_03\jre\lib\ext\tools.jarに こぴってやってみ。
117 名前:デフォルトの名無しさん [2008/09/06(土) 17:51:16 ] jdk1.6.0_03をつかってるお前の脳みその方こそ腐ってないか?
118 名前:デフォルトの名無しさん [2008/09/06(土) 19:29:48 ] >>117 それじゃだめなの?自分もそれが入ってた。 >>116 ちょっとやってみる
119 名前:デフォルトの名無しさん [2008/09/06(土) 19:32:19 ] >>114 そうだったんだw javaインストールしないでeclipseだけで動くからふしぎだったんだw >>116 あと、やっぱりtools.jarが自分の中には入ってないや。 どっかのサイトにもそれをパスに通すとかって書いてあった。
120 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 20:15:39 ] マジレスすると、そんなもんを ext の下に入れるな
121 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 20:32:15 ] >>110 eclipse の Java 設定で、JRE じゃなくて JDK を使うように設定してみたら? [ウィンドウ]→[Java]→[インストール済みのJRE] で JDK のパスを設定。
122 名前:デフォルトの名無しさん [2008/09/06(土) 22:42:54 ] 自作のJavaプログラムをWindowsのスタートアップにEXEファイルとして 登録して実行させたいのですが、どうすればよいでしょうか? ちなみにバッチファイルにjava 〜と記載して実行させる事はできました。
123 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 22:46:14 ] じゃあバッチをキックするexeを作ればいいんじゃね? つかスタートアップにバッチファイルを登録しておくのは何でダメなの?
124 名前:デフォルトの名無しさん [2008/09/06(土) 22:48:11 ] >>110 んー、そこにすでに書かれているのよ。
125 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 22:51:48 ] >>123 ただ単にEXEファイルからJavaのプログラムが呼び出せないかなと 思っただけです。もちろんバッチで事足りてますが…。
126 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 22:53:34 ] コマンドを実行するだけなら、わざわざバッチファイルにせんでも、ショートカットに記述するだけで十分だと思うが。
127 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 23:00:57 ] >>126 もちろんそれでも実行できますね…。
128 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:04:53 ] javaをexeにするって馬鹿の考えそうなことだな
129 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:20:46 ] >>128 そういうやり方あるの知らないの?
130 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:22:54 ] サービスに出来るとかいう機能もあるやつ、なんだっけな〜
131 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 03:14:36 ] やり方も何もexeにする必要性あるのか?
132 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 03:25:57 ] exeにするとネイティブだから速くなるとか
133 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 03:34:10 ] GCJだと、大して変わらんね まあ起動時間は短縮されるだろうけど ttp://www.shudo.net/article/Fedora-Core-Expert-200507-GCJ/#performance
134 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 03:42:58 ] 以前にチャットの質問をしたものです。どちらも作ってみろトのことで、ノンブロッキングIOでのサーバーを作っているのですが クライアント側で String message socket.getOutputStream().write(message.getBytes()); で文字列を送り、サーバー側で private void doRead(SocketChannel channel) { try { ByteBuffer buf = ByteBuffer.allocate(BUF_SIZE); if (channel.read(buf) > 0) { buf.flip(); byte[] bytes = new byte[buf.limit()]; buf.get(bytes); String line = new String(bytes, 0, buf.limit(), "UTF-8"); System.out.println(line); }}} とやると、おくった文字が、ひらがなや漢字の場合に文字が??にかわってしまいます。 bytesをStringに戻すにはどうしたらいいでしょう。。。
135 名前:デフォルトの名無しさん [2008/09/07(日) 03:44:43 ] すいません。 BUF_SIZEは int BUF_SIZE=1024; です
136 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 03:55:12 ] UTF-8が悪かったみたいです。 くだらない質問すいませんでした。解決しましたor2
137 名前:デフォルトの名無しさん [2008/09/07(日) 04:17:54 ] 相変わらず糞スレだな
138 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 05:28:02 ] >>137 初心者歓迎のスレならこんなもんだろ。 輝くような質問とレスの応酬になったらキモいだろ。
139 名前:デフォルトの名無しさん [2008/09/07(日) 05:39:08 ] >>138 君がその「糞の塊」なんじゃないの?
140 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 07:02:30 ] >>122 exewrap
141 名前:138 mailto:sage [2008/09/07(日) 10:39:12 ] >>139 だな。 末尾が「だろ」で両方終わってるし、低脳だよな。 よし逝ってくる。
142 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 11:01:10 ] exeにするなんてJavaの思想に反してるじゃん
143 名前:デフォルトの名無しさん [2008/09/07(日) 11:05:20 ] >>142 糞は黙ってろ
144 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 11:14:24 ] ぬるぽ ぬるぽ ぬるぽ
145 名前:デフォルトの名無しさん [2008/09/07(日) 11:17:49 ] >>142 Javaの思想とかおまえが偉そうに語らなくていいから、糞は黙ってろ
146 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 11:20:44 ] exeにしようなんてセンス無さ過ぎて笑うに笑えない
147 名前:デフォルトの名無しさん [2008/09/07(日) 11:26:23 ] >>146 糞は黙ってろ
148 名前:デフォルトの名無しさん [2008/09/07(日) 11:32:06 ] >>142 Javaの思想を語ってもらえませんか?少しでいいんでお願いします!
149 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 11:40:01 ] Write once, Run anywhere
150 名前:デフォルトの名無しさん [2008/09/07(日) 12:37:59 ] 糞スレ街道まっしぐら!
151 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 14:32:42 ] 糞連発してる奴は >>149 の発言で 言い返せなくて涙目www
152 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:08:59 ] Javaクラスファイルの難読化ソフトであるDonQuixote ttp://donquixote.cafebabe.jp/index.html を使っている人いますか? Solaris10 for x86(5/08)上で使おうとしているのですが,BCELをとってきて CLASSPATH=/PATH/TO/bcel-5.2.jar:... のように設定しても Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/bcel/util/Repository Caused by: java.lang.ClassNotFoundException: org.apache.bcel.util.Repository というエラーメッセージが出ます どのようにすれば動くのでしょうか?
153 名前:デフォルトの名無しさん [2008/09/07(日) 16:06:05 ] >>151 いいかげんにおまえが糞ってことに気がついたらどうよ?
154 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 17:09:22 ] JSAPIの実装にFreeTTSがありますが、 日本語に対応したオープンソースのJava APIってありますでしょうか? nativeライブラリだと見つかるので、JavaAPIがないようならJNI使って呼び出すか、 外部プロセス起動で実行させるかしかないですよね・・・
155 名前:デフォルトの名無しさん [2008/09/07(日) 18:17:13 ] exeなんて古生代の形式に戻す必要あるのか
156 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 18:22:04 ] Javaのプログラムをjarファイルにしても 解凍ソフトでjarを解凍してクラスが抽出できるから Jadとか使って逆コンパイルすると ソースを見られてしまうのですが これを防ぐ方法はありますか?
157 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 18:23:14 ] 難読化でぐぐれ
158 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 18:23:23 ] javaを使用しない
159 名前:デフォルトの名無しさん [2008/09/07(日) 18:23:46 ] 難読化はできるが完全に読めなくすることは不可能 てか、ソースを見られてなにか困るのか? どんなプログラムでも基本的に解析しようとすれば解析できる 少なくともコンピュータには理解できるわけだからな
160 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 18:25:01 ] 完全に読めなくすることは可能
161 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 18:26:16 ] >>156 逆コンパイルする気にさえならないようなソフトは無敵
162 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 18:26:26 ] 実行もできなくなるけどな
163 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 18:29:11 ] Javaのソースコードに暗号化をかけることはできますか
164 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 18:30:11 ] >>163 >>162 暗号化でなく署名なら出来る
165 名前:デフォルトの名無しさん [2008/09/07(日) 18:41:46 ] >>163 古生代の暗号なら出来るんじゃねーの?
166 名前:デフォルトの名無しさん [2008/09/07(日) 18:49:20 ] >>155 いつもスルーされて淋しいよな…
167 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 19:26:06 ] めちゃくちゃソースを分かり難く書いて、 解析する時間が無駄と思わせるようなソースにすればいいんじゃない? 部分的に流用可能なソースも難しいように、スパゲティ構造にしてw 難読化ソフトって使ったことないのだが、上記のようなソースに変換してくれるものとは違うのかな?
168 名前:152 mailto:sage [2008/09/07(日) 20:07:31 ] 難読化ソフトの話題は多分 >>152 に端を発したということでどなたか私めにお答えを... 作者様のBLOG ttp://www.oikaze.jp/~tamada/Diary/cat_e99ba3e8aaade58c96.html を見ると 「・DonQuixote 3.0 Java バイトコード操作フレームワークとして,DonQuixote 3.0 を公開しました.」 とあるのですが,パスワードがかかっていていただくことができません. DonQuixote1.0を最新のJDK1.6.0-07に使っているのが悪いのでしょうか? >>152 のエラーメッセージは信用できるように思えるのですが maven2 を使ったのが初めてなので何か設定が足りないのかもしれません なお ttp://proguard.sourceforge.net/ の Alternatives にリンクが張られている フリーの処理形をすべて試してみましたが期待通り動くものはほとんどありませんでした 他に良い難読化ソフトがありましたらお教えくださいませませ
169 名前:デフォルトの名無しさん [2008/09/07(日) 20:27:00 ] 解読しても価値のないプログラムを書けばOK
170 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 20:29:32 ] 【コミュニティーサイト作成有志募集!】 現在コミュニティーサイトGaccoで有志を募集しています。 詳しい概要等は →www36.atwiki.jp/vipvipschool/ こちらをご覧下さい。 ・プログラミングができる方 (現在技術陣は6名です) ・ウェブデザイン・画像編集能力がある方 (現在デザイン陣は2名です) ・宣伝能力のある方 (人員募集やサイト完成後の宣伝等。動画編集ができると○。) を募集しています。 気軽にIRCに参加、またはsuteあっと2ch.bona.jpまでメールを下さい。 スレッド:ttp://ex14.vip2ch.com/test/read.cgi/news4gep/1219068297/l50
171 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 21:08:52 ] 難読化?HSPで書いたら完ぺきだな。 自分でも読む気失せるぞあれは。
172 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 21:22:12 ] 言語がJavaでなくていいなら、intercalかAPLが最強で最凶で最狂でしょ。
173 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 21:35:44 ] バイナリエディタでマシン語じか打ちだろ。 ソースコード?存在しません。
174 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 21:50:01 ] 逆アセンブルでソースになっちゃう
175 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 00:36:37 ] それは目的と手段を間違えている
176 名前:デフォルトの名無しさん [2008/09/08(月) 01:12:45 ] UbuntuでJavaできないんですけど。。。 ちなみに8.04です
177 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 01:40:29 ] int []a=new int[5]; a[ZERO]=0: a[ONE]=1; … こんな感じで配列を定数で置き換えたいときってどういう方法がメジャでしょうか? interface NUM{int ZERO=0;int ONE=1;…} class Hoge implements NUM{} class Hoge{ private final int ZERO=0; private final int ONE=1; …} enum NUM{ZERO,ONE,…} … int []a=new int[5]; a[NUM.ZERO.ordinal()]=7; 列挙で扱いたい気がするけれど、javaの場合整数値と直接結びつかないから ordinalを呼ばないといけないし、理由は忘れましたがordinalを使うようなやり方は 止めるべきという話を以前見聞きした気がします。
178 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 03:03:20 ] なんでそんなことしたいの??
179 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 04:10:47 ] 良く分からんが、とりあえず、EnumMap
180 名前:デフォルトの名無しさん [2008/09/08(月) 06:08:38 ] 普通に final int ZEEL=-1;
181 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 06:35:01 ] >>176 Synaptic で JRE 入れれば動くはず。 あとは gcj とかぶってないか確認しろ。
182 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 11:55:39 ] >>177 ZEROでa[0]にアクセス、ONEでa[1]にアクセス、…てことなら、 配列そのものをクラスに包んでアクセサ作るのが言語的に”メジャ”っぽいと思う。 class Foo { enum Num { ZERO, ONE, … }; private int[] a = new int[〜]; int get(Num num) { switch(num) { case ZERO: return a[0]; case ONE: return a[1]; : }} void set(Num num, int value) { switch(num) { case ZERO: a[0]=value; case ONE: a[1]=value; : }}}
183 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 15:04:00 ] なんでスイッチ…
184 名前:182 mailto:sage [2008/09/08(月) 16:36:16 ] すまん、EnumMap使ったことないもんだから。 こう? class Foo { enum Num { ZERO, ONE, … }; private Map<Num,Integer> a = new EnumMap<Num,Integer>(Num.class); int get(Num num) { return (a.containsKey(num) ? a.get(num) : 0); } void set(Num num, int value) { a.put(num, value); } }
185 名前:デフォルトの名無しさん [2008/09/08(月) 17:11:39 ] 効率悪い
186 名前:167 [2008/09/08(月) 17:35:46 ] enum Mum { ZERO { public int getValue() { return 0; } } , ONE { public int getValue() { return 1; } } , ; public abstract int getValue(); }
187 名前:186 [2008/09/08(月) 17:36:37 ] ごめそ167というのは間違い。
188 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 17:53:16 ] >>185 効率を心配するほどのもの?
189 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 17:54:07 ] www.atmarkit.co.jp/fjava/rensai2/javaent02/javaent02.html ここ見て勉強しているのですけど、 メモリを使用するタイミングはどのタイミングなのでしょうか? 変数やメソッドの呼び出しなどがあったときにメモリを消費しているのか、 それとも変数やメソッドを呼ばなくても、定義してるだけで消費するのか。 どちらなのでしょう? 後者なら継承を繰り返すたびにメモリ使用量の多いプログラムになると思うので、 前者だとは思うのですが。
190 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 18:40:44 ] なんで素人がやたらメモリとか気にするわけ?
191 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 18:47:36 ] 参照してる記事がメモリうんぬんと書いてるから、気になったんだろうな。 全く気にしないのも問題だが、それで勉強してるレベルなら、まだ早いよ。
192 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 18:50:08 ] >>190 素人だからこそ気にするべきなんだろ そんなのもわからない阿呆はやめちまえ
193 名前:デフォルトの名無しさん [2008/09/08(月) 18:52:44 ] メモリもそうだけど、配列アクセスの方がCPUに大きく影響するよ。 あまり記事になってないけど、arr[k]は範囲チェックが必ず入るから、arr[k]を一回アクセスするだけで、 JVM内では(隠れて) if (0<=k && k<arr.length) が呼び出されてる。 だからメモリを気にしながら設計するのも大事だけど、byte[1000*32]とか良く作るんだし、配列アクセスの方を気にしたほうがいいよ。
194 名前:デフォルトの名無しさん [2008/09/08(月) 18:56:34 ] メモリの方は、PCだけの人は気にならないんだろうけど、携帯とかアプレットとかあるし。 アプレットはまだ携帯とか小型端末じゃみれないけど、そういう小型機器はメモリが極小64kbとかだから、 メモリの方も気にしなければいけない。
195 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 18:58:28 ] 性能に頼ってプログラミングしている気でいる現代の若者を見てると おじさん悲しくなってくるよ
196 名前:189 mailto:sage [2008/09/08(月) 19:01:45 ] みなさんレスありがとうございます。 それで結局のところどちらなのでしょう・・? おかしな質問だとは自覚しているのですが、気になって仕方がありません。 どうかよろしくお願いします。 >>193 配列って使うんですか? コレクションフレームワークのほうが高機能なので配列よりそちらを使うようなことを書いてましたが。
197 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 19:12:53 ] 素人が気にし出すとろくなことにならんよ ちゃんと理解出来ないんだから勘違いの嵐
198 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 19:15:53 ] >>196 変数やメソッドの種類と、JVMによる。
199 名前:189 mailto:sage [2008/09/08(月) 19:37:23 ] >>197 そうは言いますが、素人向けの説明でメモリの話が出てきてるのだから、 やはり重要だと思うのですが・・・ たとえ今は理解できないとしても、ステップとして踏んでおくべきだというのが私の考えです。 書籍やWebからの情報でも、100%ちゃんとした説明できる人のほうが少ないと思うので、 勘違いがあるのは当然だと思います。 そういうのは後々間違いに気づいていくので、 はじめの段階では特に問題視する必要はないと思います。 お答えいただけないようなので別のとこで質問しなおしたいと思います。 というわけで質問しめます。
200 名前:デフォルトの名無しさん [2008/09/08(月) 19:43:46 ] 配列はね、CharBufferとかでよく使うよ。 素人向けの解説だとStringBuilderとかなのかもしれないけど… 初心者の壁を越えられるかどうかは、java.nioの解説やAPIを熟読して理解できたかどうかだろうけど、ネイティブのファイル・アクセスとメモリ(ポインタなど)は難しいからな…
201 名前:デフォルトの名無しさん [2008/09/08(月) 19:47:18 ] >お答えいただけないようなので別のとこで質問しなおしたいと思います。 こういうのは生意気だし、「ばくちゃん、まだ身の程をわかってません!」って感じww
202 名前:189 mailto:sage [2008/09/08(月) 19:50:30 ] >>200 ありがとうございます。 あとでそのクラスを調べてみます。 >>201 私は自分のことを客観的に見ることができるんです。 あなたとは違うんです。
203 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 20:00:03 ] なんだ釣りか
204 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 20:01:09 ] スレに張り付いてまでいちいち煽るくらいなら 少しのヒントを出すぐらいすれば まだ自分の優位性をアピールできるだろうに。 気持ち悪いやつだ
205 名前:189 mailto:sage [2008/09/08(月) 20:17:22 ] >>203 ちょっと生意気な閉め方したら食いついてくる人がいると思って、 最近はやりだったから言ってみたかったんです。すみません。 変な質問だとは自覚してましたが、本当に聞きたかったことなので、 またで直します。
206 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 20:33:24 ] 質問をお願いします. java.awt.event.KeyEvent を使用してキーの同時押しを持ってきたいのですが、 スペース 押下時に、 上 と 左 の同時押し(結果的に3つ) を取ろうとすると、 KeyEvent.VK_UP と KeyEvent.VK_LEFT が帰ってきません。 順番を逆にし、上左押下時のスペースは持ってこれます。 他の組み合わせ(スペース + 上右、下左、下右)はどれも正常に動作します。 KeyEventについて詳しくないのですが、これはどういうことなのでしょうか?
207 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 20:38:38 ] コーディングが悪いんでないの? if文の順番が変とか。 ソース晒してみ
208 名前:206 mailto:sage [2008/09/08(月) 20:39:22 ] すみません訂正です >順番を逆にし、上左押下時のスペースは持ってこれます。 これも KeyEvent.VK_SPACE がもってこれません
209 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 20:39:24 ] >>206 pc11.2ch.net/test/read.cgi/tech/1204155623/640
210 名前:206 mailto:sage [2008/09/08(月) 20:51:54 ] >>209 なるほど、ありがとうございました。 スレ違ったようですみません >>207 おかげさまで原因がわかりました ありがとうございました。
211 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 20:57:03 ] >>205 ここにはもう来ないで欲しい