1 名前:デフォルトの名無しさん [2008/03/01(土) 18:16:51 ] プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作板をご利用ください。pc10.2ch.net/hp/ 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 www.wikiroom.com/java/ これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、 wikiからのリンクをおたどりください。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド 【初心者】Java質問・相談スレッド112【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1202467704/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。 質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */ また、当スレで質問をするかたは、回答をもらえたときに、 wikiの更新をして頂ければ、忝のう存じます。 次スレは>>980 あたりで。
152 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 23:47:26 ] お世話になります。 swingいじりしているのですが、根本がわかっていません。 JFrameのインスタンスを作ると、そいつは、自動的に別のスレッドで動いているのでしょうか? 関数main()は、最終行まで処理されて、その後ろはないのですが、 JFrameでつくったウィンドウやその上のコンポーネントは動作を続けています。 スレッドでなければ何なのか理解できません。 エスパーしていただけませんか。
153 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:04:25 ] 分かりません。教えてください。初心者です。エスパーしてください。
154 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:15:34 ] >>152 クラスは作成したとき一回だけ初期化用のメソッドを通る。
155 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 01:12:20 ] OSのシステムフォントを得る方法はありますか?
156 名前:デフォルトの名無しさん [2008/03/05(水) 01:28:07 ] Javaの質問とちょっとずれる気もしますが・・・ DBとのコネクションを確立する為に Connection con = null; con = DriverManager.getConnection(URL,USER,PASS) などと書きますよね。 この時、conはインスタンスと呼んで良いのですか? Connectionはインターフェースなのでインスタンスを生成することはできないはず。 インスタンスでないとしたら何なのでしょうか? ご教授下さい。
157 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 01:30:59 ] >>152 ThreadGroup#listでどんなスレッドが動作しているか見てみるといい。 思った以上にいろいろなスレッドが動いているのが分かる。
158 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 01:32:57 ] >>156 conはConnectionインタフェースを実装するクラスのインスタンスへの参照
159 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 01:35:38 ] 一応、正確を期すなら「conで参照しているインスタンス」みたいな言い方になる。 変数それ自体はインスタンスではない。
160 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 03:18:58 ] >>152 そう、SwingはEDTという別スレッドで動いている そして、ここ以外では動かしてはダメ、というのがルール
161 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 04:15:31 ] >>152 名前をわざわざ変えなければ、mainメソッドはmainという名前のスレッドで動作している。 Swing関係の機能を使うとさらに別のいくつかのスレッドが生成される。 その中には>>160 の言うEDTというGUI関係のイベント処理を一手に担うスレッドもある。 この新たに生成されたスレッド群によってウインドウやその上のコンポーネントが動作する。 mainメソッドが最後まで処理されるとmainという名前のスレッドは終了して無くなるが、 他のスレッドが終了するまでプログラム全体としては終了しない。
162 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:23:40 ] EDT自体はAWTにもあってSystem Queueっていう名前でマルチスレッドになってる。 Swingのイベント周りはシングルスレッドで動いててSwingコンポーネント生成を含めてSwingコードはEDTで動かさないといけない。 昔、Swing関連のスレッドにはバグがあるからSwingコンポーネントの生成もEDTで行うようにと作法が密かに変わってSwingのチュートリアルだけが変更されてまともなアナウンスはされてない。
163 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 12:10:15 ] >>152 の書き方だと >JFrameのインスタンスを作ると、そいつは自動的に別のスレッドで動いているのでしょうか? と訊いているのだから、コンストラクタの呼び出しのことで、それ自身はmainのスレッドで動いているでいいんじゃない? 全てのコンストラクタの呼び出しが終わらなければmain()には戻らないと… コンポーネントのイベント処理はまた別の話で。 もちろんSUNの推奨は >>162 の云うようにコンポーネントの作成もEDTで行うなのだろうが…
164 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 12:34:10 ] ボタンを作って、そのボタンを押すとthreadがnullになるように作っています。 run()メソッドの中に書かれている処理にかかる時間が短い場合(1ms以下)だと正常に止まってくれます。 しかし、処理にかかる時間が長い場合(100msくらい)だと何回もボタンを押さないと止まってくれません。 どうしたらいいですか? run()メソッドの中 while(thread != null) { 処理 thread.sleep(100); }
165 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 12:40:35 ] >>164 時間のかかる処理の途中で if(thread==null) break; とかしてみる。
166 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 12:49:12 ] コンストラクタってコンストラクタ自身がスレッド作ってその上で動いてなかったっけ?
167 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:35:10 ] えっ
168 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:50:35 ] >>166 試しちまったじゃねぇかよ。 public class ConstractaThreadName{ ConstractaThreadName(){ DisplayThreadsName(); } public static void main(String[] argv){ ConstractaThreadName ctn = new ConstractaThreadName(); System.out.println(); DisplayThreadsName(); } private static void DisplayThreadsName(){ int i, n; System.out.println("Display Threads Name"); Thread[] tarry = new Thread[Thread.activeCount()]; n = Thread.enumerate(tarry); for(i = 0; i < n; i++) System.out.println(tarry[i].getName()); } }
169 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:57:48 ] >>168 カレントスレッドがどれかも表示しないと意味なくない?
170 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 14:01:32 ] >166 スレッドの生成コストってフルGC並の糞思い処理だぜw
171 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 14:03:00 ] eclipse Europe 3 と日本語化をつかってるのですが バージョンアップするには何をダウンロードしてどうしたらいいですか?
172 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 15:48:54 ] >>171 Eclipse統合M24【Java/C/PHP/Ruby/Python/Perl】 pc11.2ch.net/test/read.cgi/tech/1200918324/l50 こっちで聞け
173 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:54:03 ] いやjavaのスレッドじゃなくてVM内部で別のスレッド走らせてるんじゃなかったけ? 言語違ったかなぁ・・・。
174 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:01:43 ] >>173 そんなわけのわからんことはしないよ そんな奇妙なことをする言語があるなら興味深い コンストラクタじゃなくてファイナライザか?
175 名前:デフォルトの名無しさん [2008/03/05(水) 19:50:02 ] 質問です。 GI プログラム中から 他のGUI プログラムを呼び出したときに 必ず呼び出したプログラムのウィンドウ(Frame)にフォーカスをあわせる方法 ってありますか? 呼び出すプログラム側でエンターキーで他のプログラムを呼び出すのですが、 エンターキーを連打したときなどに、どっちのプログラムもキーの受付をしてくれなくなります。 マウスでクリックしてやれば、アクティブになってキー操作を受け付けてくれるのですが。
176 名前:デフォルトの名無しさん [2008/03/05(水) 19:51:14 ] >GI プログラム中から GUI プログラム中から のミスです あと、 > 必ず呼び出したプログラム 呼び出された新しいプログラム という意味です。
177 名前:デフォルトの名無しさん [2008/03/05(水) 21:18:28 ] 詳しい方へ質問です。 『作成したプログラムを保存するフォルダを作る。コマンドプロンプトを起動したらそのフォルダがディレクトリになるように設定する(Cドライブのルートに「My Java」フォルダを作成し、ここをディレクトリにする)』 という作業をしたいのですが、「コマンドプロンプトのプロパティ」→「ショートカット」で「作業フォルダ」に“C:¥My Java”と入力すると、 「“C:¥My Java”フォルダは無効です。フォルダがあるか、またはパスが正しいか確認して下さい。」と出てしまいます。 他にフォルダを作った覚えもないのに、何度やっても同じ結果になってしまうのですが、どうしてなんでしょう? あ〜もう!自分で書いてて意味分からない‥
178 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:32:09 ] >>175 ttp://java.sun.com/javase/ja/6/docs/ja/api/java/awt/Window.html#toFront() >>177 "C:\My Java" と入れてみ。 C:\は全角で入力する必要があるし、 フォルダ名にスペースを含む場合は前後を"で囲む必要がある。
179 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:32:44 ] C:\は全角じゃない半角だった
180 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:44:13 ] >>177 質問の内容がJavaではない気がする・・・。 Javaのプログラム上からファイル出力をする為のディレクトリを生成して Javaからコマンドプロンプトを起動してカレントディレクトリを設定するって事ですか?
181 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:52:13 ] int a, b; System.ou.t.println(a + b); このaとbを外部からの入力で処理したいのですが、 PHPなんかのWebプログラミングでは、フォームから値を渡しますが、 Javaの場合どうやったらいいんでしょう? GUI画面を作ればいいのかな?とは思うのですが、やったことがなくてイメージわかないし、 Servlet+JSPなんかの場合、PHPと同じようなことができるんでしょうが、 まだ環境構築どころかJavaでのWebプログラミングのやり方もわからないので、 とりあえずコマンドプロンプトから入力してくださいみたいな感じで、 aとbを順に打ち込んで計算するようなものを作ってみたいと思っています。 どのへんのクラスを使えばいいのでしょうか?
182 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:56:07 ] >>181 いきなり2ちゃんかよ。 まずは本なり入門サイトに行けよ
183 名前:175 [2008/03/05(水) 22:21:26 ] >>178 最前面には来るんですけど、キー入力が受付ないんですよね。 クリックしてアクティブにしてやると受け付けるんですが
184 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:24:54 ] >>181 System.in から1行読めばいいんじゃないかね。
185 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:26:53 ] // >>181 public static void main(String[] args) throws IOException { // 標準入力ストリームから行単位で読み込めるようにBufferedReaderクラスのインスタンスを生成 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print(a: ); // 標準入力から1行読み込みint型に変換 int a = Integer.parseInt(br.readLine()); System.out.print(b: ); int b = Integer.parseInt(br.readLine()); System.out.println(a + b); }
186 名前:185 mailto:sage [2008/03/05(水) 22:34:02 ] 訂正 System.out.print(a: ); // × System.out.print("a: "); // ○ System.out.print(b: ); // × System.out.print("b: "); // ○ あと import java.io.*; も忘れないように。
187 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:38:28 ] >>155 たぶん見た目ネイティブにしたいんだろうが、 JavaでOSのシステム標準フォント設定を得る方法など聞いたことがない。
188 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:58:51 ] システムカラーなら取れるんだけどね
189 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:37:52 ] >>181 「Java Scanner」でググって見なよ
190 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 06:58:02 ] c言語に比べてjabaを初心者が先に学ぶメリットって何かありますか? 良かったら説明して下さい!
191 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 08:16:53 ] まずは英語を勉強する方が良いと思うぞw
192 名前:デフォルトの名無しさん [2008/03/06(木) 08:33:55 ] JAVAのテキストが一通り終わったのですが、 次は何をすればいいでしょうか?
193 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 08:44:29 ] ソフト会社にバイトに行って、いかに自分がダメダメかを思い知るw
194 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 09:45:48 ] Javaを「メモリ管理不要、C++」として見てしまいますが、 すべてのパッケージを勉強する必要がありますか?
195 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 10:05:04 ] > すべてのパッケージを勉強する必要がありますか? 必要なら。
196 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 10:18:27 ] com.sun.*とSwingの非公開クラスはいらんだろう。
197 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 10:28:31 ] >194 不要。 java.lang.* java.util.* は大雑把にでもいいから確認して、後は必要に応じて調べれば十分
198 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 10:32:50 ] >>196 非公開クラス? java.sun.com/j2se/1.5.0/ja/docs/ja/api/ ここで見てて涙目になりました;; 覚える事が多すぎます・・・
199 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 11:30:56 ] >>198 それは1つ前のバージョンのだな 最新はこっちだ java.sun.com/javase/ja/6/docs/ja/api/ 必要になったときに必要なものを調べて来られれば、全部覚える必要はない
200 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 11:31:56 ] >>198 java.ioはI/O系、java.sqlならJDBCまわりってレベルで十分。 あとは、必要に応じて調べるだけ。
201 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:52:12 ] Scannerでの質問なのですが import java.util.Scanner; public class TestPorb { public static void main(String[] args) { Scanner input = new Scanner (System.in); String gen = input.next(); int pt2 = input.nextInt(); int pt1 = input.nextInt(); //input.nextLine(); String name = input.nextLine(); int numOfGame = input.nextInt(); String pos = input.next(); } } name をとるときに inputMissmatchというエラーが出ます コメントを解除するとちゃんと動くのですが、 理由が分かる人がいれば教えてください。
202 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:01:47 ] >>201 nextLine は InputMismatchException を投げません。 入力次第なので、後は何とも。
203 名前:201 mailto:sage [2008/03/06(木) 13:11:36 ] >>202 入力は、 aaa 12 23 asd asd で試したところ、 InputMismatchException: at java.util.Scanner.throwFor(Unknown Source) at java.util.Scanner.next(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) at TestPorb.main(TestPorb.java:15) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) を投げてきて、次の入力に進めません 長くてすみません。
204 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:41:01 ] >>203 で、それは何処で止まってるのでしょうか、と。 // 一行ごとに直前の変数を出力して、 // 入力と解析後の対応部分を確かめつつ。
205 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:46:14 ] nextIntが23の後の改行も食ってるとか?
206 名前:201 mailto:sage [2008/03/06(木) 13:55:08 ] >>204 入力は一行づつで、 最後の asd asd を入力した時点でのエラーです。 その前に入力したデータは全て正常に入っています。 どうも入力した "asd asd" を nextLine() で Stringに入れることができていないようなんです。 String name = input.nextLine(); の実行前に一度 input.nextLine(); を実行することでエラーを回避できるので、 Bufferに何か残っているのかな、と予想しているのですが実際のところよく分かりません。
207 名前:201 mailto:sage [2008/03/06(木) 13:57:50 ] >>205 だとすれば、 無駄にinput.nextLine()を走らせて回避するしか方法はないのでしょうか・・
208 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 14:57:03 ] >>205 まあ、nextLine が、"23" の直後から改行までを、改行抜きで食ってるだけ。 よって、"23<改行>" なら、戻り値の列長はゼロ。 >>207 そうそう。無駄に nextLine を走らせてください。そういう仕様です。 細かく調整したいなら sikip というものもあります。
209 名前:201 mailto:sage [2008/03/06(木) 22:17:42 ] >>208 そうですか、分かりました skipの方も試してみます ありがとうございました
210 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 22:21:33 ] 今、自分のPCに Java SE 6 Update 3 がインストールされており、 ブラウザでアプレットなどが起動できるのですが、 Update 4 や Update 5 をインストールすると Update 3 で起動できていたアプレットが起動しなくなり、 ブラウザを閉じようとすると、固まってしまう状態になります。 ランタイムをアンインストールして Update 3 に戻すと正常に動作するようになるのですが、 Update 4 以上のバージョンで何か問題があるのでしょうか? コントロールパネルのJavaの設定で、 インターネット一時ファイルなどを削除してみても、 アプレットは動作しませんでした
211 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 22:40:16 ] リグレッションバグ踏んだとか
212 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:14:08 ] アプレットが元々バグってて、古いバージョンではたまたま動作してただけとか
213 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 08:29:09 ] お世話になります。 SwingでGUIのプログラム作ってみているのですが、 イベント動作(?)を設定できずに悩んでいます。 お力添えください。 (awtの?)ActionListener,ActionEvent,ActionPerformed()で、 イベント動作を記述したいです。 JPanel A ├JPane B |├JButton 1 (implements ActionListener) |└JButton 2 (implements ActionListener) └JTabbedPane ├JTextArea 1 └JTextArea 2 例えば、JFrame以下に、上記の構造のコンテナの階層があって、 各コンテナは、直上のコンテナでインスタンス化される。 以上としたときに、 ボタンのActionPerformed()にて、 テキストエリアの内容を保存したり、とにかくテキストエリアにアクセスしたいのですが、 その手段がわかりません。 ( 続く)
214 名前:213 mailto:sage [2008/03/07(金) 08:29:32 ] (続き) すべての変数をJPanel A 直上でインスタンス化して、 上記の構造をつくり、 JButtonは、内部クラスにすれば、動作の設定はできるのですが、 コンテナの数が多くなってきたときに、内容を読むのが辛い気がします。 また広域な変数を作ることでも可能なのでしょうが、あまり使いたくないです。 どのようにすればよいでしょうか。 最終的には、JMenuBar以下のメニューからのアクセスをしたい、 且つ、JMenuBar以下の構造は、クラスとして、 外部クラスか内部クラスとして宣言したいです。 また、JTabbedPaneは、メニューなどから、増加させたり、削除させたりしたいのですが、 「各コンテナは、直上のコンテナでインスタンス化される。」 のルールにのっとった記述ができなく、簡単化のため、上記の例を出しました。 よろしく御願いします。
215 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 10:36:36 ] >>213 ボタンとテキストエリアで行うことを仕様とし、その実装をクラスにする。 そのインスタンスをパネルAで生成し、パネルBとタブの生成時に渡す。
216 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 12:10:01 ] 数値a, b(long、doubleも含む)のどちらが大きいか比較し、 a<bなら負、a>bなら正、a==bなら0を返すような標準APIってありますか? 自分で作れというのが最もなのですが、割と頻繁に使う状況に遭遇するので、 標準でそのようなAPIは無いのか疑問になって質問しました。 Mathにはなかったようなのですが。
217 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 12:18:40 ] >>216 new BigDecimal(a).compareTo(new BigDecimal(b)) とか? 無限大やらNaNやらの場合は知らん。
218 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 12:27:43 ] >216 数値といっても型が違えば単純には比較でないだろ、常考 比較する為の一般に通用する仕様がないわけだから安直に標準APIじゃ提供しようがない
219 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 12:33:59 ] それくらい自分で作れ。
220 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:07:15 ] >>217 ありがとうございます。 取りあえずこれでいけそうですね。 >>218 説明不足でした。型はプリミティブ型でよいです。 System.out.print()のように引数タイプに全てのプリミティブ型を 用意しているクラスメソッドがあったので、数値比較についてもあるのかなと思ってました。
221 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:21:14 ] 同じ型どうしなら a-b でいいのだけど、それじゃダメってことだよね。
222 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:39:09 ] >>216 ×最も ○尤も (a==b)? 0: (a<b)? -1: 1;
223 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:39:31 ] >220 だからdouble と int をどうやって比較するのかと(ry
224 名前:デフォルトの名無しさん [2008/03/07(金) 13:40:42 ] パネルにコンポーネントをadd()してからそのコンポーネントをadd()の反対にすることはできますか?
225 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:45:31 ] ん?remove(Component)のこと?
226 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:59:21 ] >>223 値範囲で 217 に負けるけど、Double.compare(double, double) でも良いと思うのですが 変換で何か重要な問題があったっけ……
227 名前:216 mailto:sage [2008/03/07(金) 14:03:57 ] 本当に説明不足でした。 ぐだぐだですみません。 返す型は int。 型はプリミティブ型。 >>221 (int)(long型 - long型)すると、差がInteger.MAX_VALUEより大きい場合に 問題が起きそうなのでその方法はとりませんでした。 >>222 さんのように三項演算子で書く方法が一番スマートそうですね。 どうもでした。
228 名前:216 mailto:sage [2008/03/07(金) 14:08:05 ] >>226 読む前に投稿していました。 まさにこんな感じのを求めてました。 ありがとうございます。
229 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:10:20 ] >>226 int i = 0; double d = 0.0;
230 名前:226 mailto:sage [2008/03/07(金) 14:13:42 ] >>229 日本語での解説をお願いします。
231 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:14:32 ] (゜д゜) はぁ?
232 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:22:24 ] javadocよく嫁
233 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:23:29 ] 言い忘れた byte型の昇格じゃなきゃ特に演算時に気を付けることはない。
234 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:27:46 ] 嘘八百を並べた悪徳スレ
235 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:43:59 ] >>216 >>226 でもいいけど、long が 64ビットなのに対して double の仮数部は 53ビットしかない。 だから例えば System.out.println(Double.compare(0x20000000000000L, 0x20000000000001L)); //=> 0 System.out.println(0x20000000000000L == (double)0x20000000000001L); //=> true 逆に言うと、あらかじめ精度が必要ない事が判っていれば Double#compare(double, double) で構わない。
236 名前:226 mailto:sage [2008/03/07(金) 14:55:25 ] >>235 なるほど。これはお勧め出来なかったですね、申し訳ない。 Long.MAX_VALUE と (double) Long.MAX_VALUE ==> 9223372036854775807 ==> 9.223372036854776E18 // int と double についての方も、こういうことなのでしょうか?
237 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:58:14 ] >>236 int と float だと、float の方が精度低いので問題起きる可能性がある。
238 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 16:36:10 ] (・д・)
239 名前:デフォルトの名無しさん [2008/03/07(金) 16:54:44 ] MVCモデルについて質問です。 現在、MVCを使ってマインスイーパを作ろうというプロジェクトを行っています。 Mでは、m*nのテーブルを裏返したり、フラグを変更させる動作を持たせる事にします。 ここで問題なのですが、 この配列をVに描写してもらう時に、渡すのは数字の入った2次元配列です。 これを例えば1なら1と表示させるというようにすればいいように思えますが、 Vを作る人は、Mがどういう仕様かを知ってはいけないと思います。 つまり、Mで、1という数字を100という風に書こうが31という謎の値で書こうが関係ない設計にしなければならないと思います。 この場合、私の考える中で唯一これを満たす方法は、 Mに描画のメソッドを実装して、Vで委譲させる方法ですが、 MVCの原則として、Mは描画や出入力を行ってはいけない事になっています。 そもそも、View側でもm*nで待っていてくれている保証はないわけですが、 MとVの独立性を保つためにはどのように設計すればよいのでしょか?
240 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:07:46 ] >>239 >Vを作る人は、Mがどういう仕様かを知ってはいけないと思います。 いやいやいや。 ビューはモデルの仕様を知っている。 でなければ、何を描くのかすらわからんではないか。 ツリーモデルをマインスイーパービューに渡してどうしろというんだ。 ツリービューはツリーモデルを描く。 マインスイーパービューはマインスイーパーモデルを描く。 interface MinesweeperModel { int getWidth(); int getHeight(); boolean isFlagSet(int x, int y); boolean isOpen(int x, int y); boolean hasMine(int x, int y); void addChangeListener(ChangeListener l); void removeChangeListener(ChangeListener l); } こんなのでいいかと。 これをどう実装するか(二次元配列?)は、モデルの実装の詳細であって、ビューはそれを知る必要はない。 これをどう表示するか(JTable?)は、ビューの実装の詳細であって、モデルはそれを知る必要はない。 ただし両者とも、そのインタフェイス (MinesweeperModel) の仕様は知っている。
241 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:13:31 ] MVCってjava関係ないじゃん。 ゲーム作ってるならこっちの方が適切。 ttp://pc11.2ch.net/test/read.cgi/gamedev/1155209226/l50 ゲームにおけるデータ構造・クラス設計・パターン
242 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:15:00 ] クリックされたら配列に入力され、その後配列と対応する場所に四角を書きたいんですが うまくいきませんorz どこがだめなんでしょうか? import java.applet.*; import java.awt.*; import java.awt.event.*; /* <applet code="proto" width=200 height=200></applet> */ public class proto extends Applet implements MouseListener{ Point p; boolean bl[][] = new boolean[20][20]; public void mouseClicked(MouseEvent me) { p = me.getPoint(); bl[p.x/10][p.y/10] = true; repaint(); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g){ for(int x=0;x<20;x++){ for(int y=0;y<20;y++){ if(bl[x][y] == true){ g.fillRect(x*10,y*10,10,10); }}}}}
243 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:18:48 ] >>242 addMouseListener
244 名前:239 [2008/03/07(金) 17:22:15 ] >>240 プログラムが出来たら、うpするので その時に評価してもらおうと思います。 いろいろ考えると難しくて。実装じゃなくて、設計が。 設計やさんは優秀じゃなきゃ出来ませんね。 設計が腐ってるとすべてが終わる。 設計がしっかりしてれば 実装なんか中卒だろうが高卒だろうが 理系だろうが文系だろうが 関係なしに出来るのではないかと思えてきましたが、 実際のプログラミング現場ではやはり設計というのは一番優秀な人がするものなのでしょうか?
245 名前:242 mailto:sage [2008/03/07(金) 17:26:33 ] うわ・・恥 >>423 どうもありがとうございました
246 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:32:36 ] 実装をなめんなよ
247 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:38:34 ] >実際のプログラミング現場ではやはり設計というのは一番優秀な人がするものなのでしょうか? そういう話題はマ板向き
248 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:51:19 ] 設計する人が優秀とは限らないが、優秀でない人が設計すると火事になる
249 名前:239 [2008/03/07(金) 18:02:27 ] 今、ぼくは 「クラスが独立であるとは、クラスが単独でテスト可能である事と同値である」 という持論に基づいてプログラムしています。 これが正しいかどうかは置いといて、 テストが不可能、例えば乱数に寄ってしまっている設計はいけない設計ですか? 例えばマインスイーパなら、爆弾を仕掛けると思いますが、 爆弾を仕掛けるのを乱数に頼って、イニシャライザに組み込んでしまうと、 動作ごとにどこに爆弾が仕掛けられたか分からず、 「ここを押せばこういう状態に遷移する」 といったテストが行えません。 今作ってるプログラムはまさにこうなのですが、 これは失敗した設計ですか?
250 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 18:06:26 ] >>240 の書いているようなモデルインターフェースを作っていれば、そんなものいくらでも実装で変更できると思うんだけど。
251 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 18:13:59 ] >>249 乱数を元にしないNonRandomMinesweeperModelを使ってテストすればいいだけだ
252 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 18:17:45 ] 乱数に限定した話なら乱数シードを外から渡すようにすれば良いだけの話。 再現性が保てない設計は失敗と言っていい。