1 名前:デフォルトの名無しさん [2016/06/17(金) 08:16:55.52 ID:442rGUo0.net] プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作管理 pc11.2ch.net/hp/ Webプログラミング pc11.2ch.net/php/ をご利用下さい。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 (p)ttp://www.wikiroom.com/java/?path,classpath ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 ・String に == は使うな。equals() を使え。※ 質問時の心得 ・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。 ・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。 前スレ ★★Java質問・相談スレッド177★★©2ch.net echo.2ch.net/test/read.cgi/tech/1458033246/
496 名前:デフォルトの名無しさん mailto:sage [2016/08/19(金) 20:37:11.37 ID:tsEZzAHj.net] >指定した値に一番近い要素の番号を得たいと思ってます これが一回だけなのか、複数回なのかがわからないのに効率の良いアルゴリズムなんて答えられるわけがない
497 名前:デフォルトの名無しさん mailto:sage [2016/08/19(金) 20:58:16.30 ID:59AD2ZKx.net] >>491 10万回だとした場合の効率よいアルゴリズム示してみたら?
498 名前:デフォルトの名無しさん mailto:sage [2016/08/19(金) 21:04:57.74 ID:CkYJIhBp.net] >>491 何らかの値が指定される都度、一番近い要素の番号を返す その処理を、10万回繰り返すものとなります
499 名前:デフォルトの名無しさん mailto:sage [2016/08/19(金) 21:14:41.84 ID:WMQnppU0.net] とりあえず二分探索する 二分探索で我慢できなくて配列aの最大値が数万くらいなら配列を展開する int[] a = {1, 6, 9}; int[] b = {0, 0, 0, 0, 1, 1, 1, 1, 2, 2} 配列aの最大値が24万程度なら、展開した配列bに必要なメモリは2^(18+2)で1MB弱
500 名前:デフォルトの名無しさん mailto:sage [2016/08/19(金) 23:12:34.89 ID:ZqQW0r9G.net] >>494 二分探索と配列の展開、情報ありがとうございます 展開した配列を用意するためのプログラムが必要そうですが、こちらの方が性能は良さそうですね ありがとうございました
501 名前:デフォルトの名無しさん mailto:sage [2016/08/20(土) 00:08:07.91 ID:BMoP1SdH.net] 作り方がおかしいかご意見をお聞かせください。 通信関連モジュールを作成しているのですが ・通信前のデータチェックでのエラー ・通信結果の解析結果のエラー これら2つの結果を返すコールバック用のメソッドを分けて作っていたのですが 「そんなイレギュラーな作りをするな!同じメソッドで引数を変えろ!」 と言われました。 エラーが発生するタイミングが違うので同一インターフェースの中で分けたのですが、 「イレギュラー」といわれるほど変な作りなのでしょうか?
502 名前:494 mailto:sage [2016/08/20(土) 00:15:39.59 ID:BMoP1SdH.net] 関連モジュールは他にないので、「他のモジュールと比較しておかしい」というわけではありません。 あくまでもJAVAの一般論として「イレギュラー」と言われてます。
503 名前:デフォルトの名無しさん mailto:sage [2016/08/20(土) 06:53:27.62 ID:B6Zc+FaI.net] その情報だけでは必ずしもおかしいとは思わない。 メソッドを分けることで、利用者はその二種類のエラーを区別することを強制される。 だから、その二種類の区別が利用者にとって重要だと想定されるのであれば一つで分岐するより分けた方がいい。 そうでもない(利用側の処理に違いがない)なら一つでいい。
504 名前:デフォルトの名無しさん mailto:sage [2016/08/20(土) 11:38:21.48 ID:hWaMH8VG.net] >>496 MyConnector con = new MyConnector(); con.setCallback1(callback1) con.setCallback2(callback2) con.connect() みたいに必要なcallbackを追加していけるならいいけど、 con.connect(callback1, callbak2) ならまとめてもいいかな
505 名前:デフォルトの名無しさん mailto:sage [2016/08/20(土) 15:20:42.65 ID:D7SVWed1.net] まぁ俺だったらひとつにするな それで定数intとかでエラーIDを作ってそれを渡すとかするわ >>496 の考えだと今回は2件だけど3件、4件と行程が増えた数だけメソッドを作ることになる。 そもそもそれは実装する側も使用する側も手間になる。 例えばどのエラーでも同じことをしたかったとしても使用する側は、その分のコールバックメソッドを立てて、メソッド化して複数箇所で呼び出したりする必要がある。 それって手間にじゃん >>496 が作ったモジュールと実際にモジュールを使う側の関係が1:多の関係であるなら、なるべく使う側に汎用性をもたせてやるほうがいい。 今回の汎用性というのはエラーを分けるか分けないかってことね 1つまりモジュール側は必要になった時に判断できる手段を用意してあげることだとおもう
506 名前:デフォルトの名無しさん mailto:sage [2016/08/20(土) 17:44:13.96 ID:s0elS7/F.net] 10万回を前半5万回と後半5万回に分けて マルチスレッド化
507 名前:デフォルトの名無しさん mailto:sage [2016/08/20(土) 18:30:31.94 ID:06sBBxjU.net] 10万スレッド作っ(ry
508 名前:デフォルトの名無しさん mailto:sage [2016/08/20(土) 19:52:31.00 ID:maedJSZM.net] parallel入れて最適化したとしても 10万件程度では速度向上は期待できない気もする https://paiza.io/projects/N1anFUeXUTdILH0sJnwl5g
509 名前:デフォルトの名無しさん [2016/08/20(土) 21:26:00.33 ID:6io4DnXk.net] 今や求人はJavaやC#だらけですが、どうしてもJavaやC#になじめず 悩んでいます。派遣PGです。 自分なりになじめない原因を考えてみるとどうもJavaやC#に限らず ネイティブで動作していない言語に拒否感があります。 C/C++やアセンブラにはない「気持ち悪さ」とでもいうのでしょうか… もうエンジニアとして終わりなのかなとか、必要とされていないので は?という悲観的な気持ちです。 どうすれば乗り越えられるでしょうか?
510 名前:デフォルトの名無しさん mailto:sage [2016/08/20(土) 21:32:20.77 ID:DlK5hCub.net] コ ピ ペ
511 名前:494 mailto:sage [2016/08/20(土) 21:35:28.10 ID:BMoP1SdH.net] ご意見ありがとうございました。 >> 498さんのご意見が特に参考になりました。 確かに今後拡張していくと面倒なことになりますね。 良かれと思って分割したのが裏目になりそうです。 ありがとうございました。
512 名前:デフォルトの名無しさん mailto:sage [2016/08/20(土) 21:39:00.90 ID:DlK5hCub.net] 仕様がわかんねーからどうでもよさげ
513 名前:デフォルトの名無しさん mailto:sage [2016/08/20(土) 21:41:08.87 ID:DlK5hCub.net] つーか、設計が間違ってたということね
514 名前:デフォルトの名無しさん [2016/08/20(土) 22:04:50.30 ID:SbaSzAw8.net] >>504 JIT
515 名前:デフォルトの名無しさん mailto:sage [2016/08/20(土) 23:56:34.43 ID:UumqURVq.net] >>504 マジなのかコピペか釣りか知らないけど、まず板名や>>1 すら読めてないから、多分馴染めない原因は他にもあると思うよ ネイティヴじゃないとか意識する以前にね もし本当にネイティヴ非ネイティヴを意識して馴染めないのであれば残念だけどこの先やっていくのはつらいからくぎりをつけたほうがいいよ
516 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 08:57:32.48 ID:IUzncNpZ.net] 縦書きフォント使いたいんだが、フォント読み込みから自力実装するしかない?
517 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 10:12:08.48 ID:duM5Lppi.net] お前どこでフォントを使いたいのか 環境も書かずに答えられると思ってんの?
518 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 10:49:45.26 ID:MeZyvK3R.net] ホント
519 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 11:28:59.60 ID:IUzncNpZ.net] >>512 JNI等を使用しないWindowsのjava.awt.Graphics2Dで。 レイアウトとか自分でやるんで、truetype/opentypeフォントに含まれる縦書き用グリフや配置情報送り幅等を取得したい。
520 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 12:08:10.04 ID:MeZyvK3R.net] JDKのフォント周りはホントにイミフ
521 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 12:16:19.38 ID:xQ8AfaVf.net] @つきのフォント読み込んで90度回転で書けばいいんじゃなかったっけか? 等幅フォントなら横書き用フォント使って縦に一文字一文字書いてくのもありかもだが。 句読点や括弧をちゃんと処理せんといかんけど。
522 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 12:46:54.85 ID:IUzncNpZ.net] @付きとかそんなものはないのです… MS 明朝等に@をつけてFont作っても存在しないフォントはDialogが使われるだけなのです… import java.awt.Font; import java.awt.GraphicsEnvironment; public class FontTest { public static void main(String[] args) { // @付きフォントなんて無い for (Font font : GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts()) { System.out.println(font); } // @付きで指定しても存在しないフォントはDialogになる Font font = new Font("@MS 明朝", Font.PLAIN, 12) System.out.println(font.getFontName()); } }
523 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 14:06:54.91 ID:xQ8AfaVf.net] >>517 あらごめん。 Windows7あたりからかフォントの扱い変わったらしいから、それが原因かも。
524 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 15:02:21.58 ID:rOj1s/df.net] ろくにテストもしてないのだろう
525 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 15:14:29.45 ID:rOj1s/df.net] oracleのやる気のなさ
526 名前:デフォルトの名無しさん [2016/08/21(日) 15:53:29.38 ID:hSejVSNi.net] >>490 , >>501 , >>503 ローカルでJITコンパイル切ってやってみたらコア数まではスケールするみたいよ おっぱいざだとJITコンパイルがあってよくわからん https://paiza.io/projects/wTqOKtC_yCz4-2Z5xCkPAw シングルスレッドでも20ミリ秒だからマルチスレッドにする意味ないかも
527 名前:デフォルトの名無しさん [2016/08/21(日) 18:00:10.89 ID:hSejVSNi.net] >>490 配列よりは遅いけどTreeMapを使うやり方もあるよてことで https://paiza.io/projects/rqnLcs9ZehOWZgOIo-WHOA
528 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 18:12:19.70 ID:dUfPoSxX.net] javaって10万スレッドも同時に実行出来るの? メモリー量とか、そういうのは別にして。 同時に実行出来るスレッド数に上限は無い?
529 名前:デフォルトの名無しさん [2016/08/21(日) 18:20:43.74 ID:hSejVSNi.net] >>523 CPUとメモリが潤沢にあれば行けるんじゃないかな 俺の環境ではi7のCPUがフル稼働でWindowsがフリーズしかけた 必死こいてプロセス殺した >>502 みなさん2chのデマに気を付けてください
530 名前:デフォルトの名無しさん [2016/08/21(日) 19:07:34.19 ID:i9hjM3oz.net] そういや Windows 以外のXやiOSではどうなってんだろうね。
531 名前:デフォルトの名無しさん [2016/08/21(日) 19:10:29.74 ID:i9hjM3oz.net] 523はリロードしてなくて上の方のフォントの話へのレスだったが、もうどうでもよい。
532 名前:デフォルトの名無しさん [2016/08/21(日) 19:11:22.55 ID:i9hjM3oz.net] >>524 試す人がいるとは思わなかったw
533 名前:デフォルトの名無しさん [2016/08/21(日) 22:35:26.83 ID:M72PC28j.net] >>524 こちらで>>490 のやつをaが2000件bが10万件で10万スレッド作ってやるのを作ってみたが特に問題なく数秒で終わったぞ? スレッドなしのストレートなやつはもっと速く終わったけどな。w そういや>>490 のやつは数秒だったとしても時間掛かりすぎでまずいぐらいの高速性求めてたのかな?
534 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 22:37:07.19 ID:M72PC28j.net] あ、bって指定される値の方ね。
535 名前:デフォルトの名無しさん mailto:sage [2016/08/21(日) 22:43:19.76 ID:M72PC28j.net] >>490 のやつってこんなんでいいんだよなあ?(Thread使わないストレートなやつ) https://paiza.io/projects/6k1S75kySYEpB-6n7ntBRw とても速く終わるんだが。
536 名前:デフォルトの名無しさん [2016/08/21(日) 23:16:05.19 ID:hSejVSNi.net] >>528 コードがマズかったかな そちらの10万スレッドのコード教えて もっかいやってみる 俺のi7の力を見せてやる
537 名前:デフォルトの名無しさん [2016/08/21(日) 23:50:43.54 ID:M72PC28j.net] >>531 https://paiza.io/projects/xmOg-JbIQdMhaEt9mtNy-A ただしこのサイトの実行環境ではメモリ上限を超えるようで OutOfMemoryError になる。
538 名前:デフォルトの名無しさん [2016/08/21(日) 23:55:48.92 ID:hSejVSNi.net] >>532 あざーす
539 名前:デフォルトの名無しさん [2016/08/22(月) 00:09:39.70 ID:4FCeXfXX.net] 10万スレッドで5秒だった 生のスレッド使えばいいのか マジかー
540 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 10:01:26.36 ID:MdBT+DeE.net] ネタでやるのはいいけど コア数(HT含む)を超える数のスレッド作っても意味無いからね
541 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 10:55:58.54 ID:C6WXEgXb.net] 酷いループを用意しても2,000×100,000で時間かかりすぎる場面が発生しない 前提条件そのものに問題がある(根本的に勘違いしている)が濃厚
542 名前:530 [2016/08/22(月) 12:51:08.04 ID:mEg9CMpU.net] >>535 いやわかってる。 530のプログラムもループさせてスレッド作った直後にすぐスタートさせてるのですぐ終わるやつは多分ループ抜ける前に終わっちゃってて同時に10万スレッドが動いていない。 同時10万を本当にやるとしたらスタート直後に待たせてメインスレッドが全体を同時に動かさせるようにする必要があるが、今のところやる気はない。w
543 名前:デフォルトの名無しさん mailto:sage [2016/08/22(月) 20:36:07.09 ID:G2Ad46dy.net] https://ideone.com/7BUuq3 バーチャルマシンにオプション付けてスレッドのスタックを 調整すると沢山同時に起動実行出来ることが分かった。 -Xss128k とか。数字は小さい方がいいみたい。ウィンドウズのタスクマネージャで 見ているとスレッド数が増えていくのが分かる。ある程度のところで java.lang.OutOfMemoryError: unable to create new native thread となった。
544 名前:デフォルトの名無しさん mailto:sage [2016/08/24(水) 19:46:51.49 ID:xJCgpC1z.net] Winで動かす場合はJavaのVM自体がいくつもスレッド使っているから Windowsの制限よりは少なくなるだろ。 https://technet.microsoft.com/ja-jp/windows/mark_04.aspx
545 名前:デフォルトの名無しさん mailto:sage [2016/08/24(水) 23:43:57.21 ID:3vGB/zKb.net] synchronized使って10万スレッドやってみたらフリーズしたw 最初何回かは大丈夫だったんだけどな。eclipseで3回目は何分待ってもマウスカーソルが動かなくてしょうがないから電源切った。w
546 名前:デフォルトの名無しさん mailto:sage [2016/08/25(木) 02:23:50.28 ID:l83TC/zZ.net] build.gradleでライブラリをcompileに書くときにバージョン番号を省略すると最新版が入りますが、入ったライブラリのバージョンを確認するにはどうすればよいですか?またライブラリはどこにダウンロードされますか?
547 名前:デフォルトの名無しさん mailto:sage [2016/08/25(木) 03:12:32.19 ID:s1NjE0Yt.net] Javaの質問と言えるのか分からんが gradle dependencisで依存関係表示 インストール先は大抵$HOME/.m2の下
548 名前:デフォルトの名無しさん mailto:sage [2016/08/25(木) 03:18:39.81 ID:l83TC/zZ.net] >>542 ありがとうございました。.gradle以下ばかり探してました。
549 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 22:05:16.01 ID:Pr4GF7QY.net] 画像を表示するときビット配列から生み出す方法とImageオブジェクトのクラスから生み出す方法があるみたいだけど どう使い分ければいいの?ってかどう違うの?
550 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 22:10:44.30 ID:ev9L5f83.net] 表示することを聞いてるのか生み出すことを聞いてるのか曖昧だ
551 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 22:19:04.46 ID:ev9L5f83.net] Javaで画像っていうとBufferdImageを直にインスタンス化するか ImageIO#readメソッドを使うかだと思うけどどっちのことを言ってるん
552 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 22:25:03.92 ID:Pr4GF7QY.net] ImageIconクラスのことです!!!!! 曖昧ですいません、始めたばっかで画像表示しようとしてるんだけどいまいちよく分かんなくて
553 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 22:25:34.77 ID:wVJbbEHi.net] java.awt.Toolkit#createImage() ってのもあるな。
554 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 22:29:31.96 ID:wVJbbEHi.net] >>547 んなもん使いやすい方使えばいいじゃないか。内容が同じなら最終的には違いはない。 途中の内部処理が違うだけ。
555 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 22:35:09.24 ID:ev9L5f83.net] ソースコードによると https://github.com/frohoff/jdk8u-dev-jdk/blob/master/src/share/classes/javax/swing/ImageIcon.java Imageを受け取る方は直接loadImageというプライベートメソッドを呼んでる byte[]を受け取る方はToolkit.getDefaultToolkit().createImageでImageにしてからloadImageを呼んでる
556 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 22:36:34.64 ID:ozGx3CHe.net] 出た後だし、泰山雷同して鼠一匹、でした
557 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 22:40:40.16 ID:Pr4GF7QY.net] なるほどつまり内部構造的な違いができるだけで結果は同じなのね すいません助かりましたありがとう!
558 名前:デフォルトの名無しさん [2016/08/29(月) 00:03:21.66 ID:Y/vqlQ//.net] >>551 d.hatena.ne.jp/mkusunok/about
559 名前:デフォルトの名無しさん [2016/08/29(月) 17:24:53.93 ID:AcWh2Iym.net] こんにちは。 趣味でJava用ゲームライブラリlibGDXを利用してゲームプログラミングをしている者なのですが、アプリケーションの配布について質問させてください。 Java製のアプリはjar形式にて配布されることが普通かと思いますが、私はWindows向けにはexe形式にて配布したく思っております。 そのためにはlanch4jやexewrapといったツールを用いることができるかと思いますが、その際、実行環境がインストールされていないPCでも実行できるようにJREを同梱し配布することにライセンス上問題はありますでしょうか? 因みにアプリケーションは有償での配布を予定しております。 論拠などもお示し頂けると嬉しいです。 よろしくお願いします。
560 名前:デフォルトの名無しさん [2016/08/29(月) 17:53:07.10 ID:IWCj2egw.net] >>554 ライセンスは知らんがJRE配布ってどれだけ巨大になると思ってるの? 実行環境のインストールとかインストーラー起動するだけで出来るのに
561 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 18:03:18.33 ID:C9HSRABQ.net] >>554 特に問題ないよ www.oracle.com/technetwork/java/javase/terms/license/index.html www.oracle.com/technetwork/jp/licenses/javase-dev-license-2595998-ja.html
562 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 18:03:51.24 ID:C9HSRABQ.net] あとこれ https://www.java.com/ja/download/faq/distribution.xml
563 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 18:07:41.39 ID:HSXk2xhn.net] 有償なら絶対にJRE配布の方がいい 動かんやないか金返さんかいボケェ!!!(JREが入ってない) 動かんやないか金返さんかいアホォ!!!(JREが古い) 動かんやないか金返さんかいドァホ!!!(JREが新しい) 動かんやないか金返さんかいコラァ!!!(JREのインストール失敗) 確実にこうなるから
564 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 18:12:22.12 ID:C9HSRABQ.net] 経験談やめろ
565 名前:デフォルトの名無しさん [2016/08/29(月) 18:27:28.96 ID:IWCj2egw.net] >>558 そんな無能いるのか?
566 名前:デフォルトの名無しさん [2016/08/29(月) 18:28:17.44 ID:IWCj2egw.net] 動かんから金返せは動作チェック含めた体験版をWEB配布すればいいし
567 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 18:40:23.84 ID:HSXk2xhn.net] ユーザーのITリテラシーを舐めてはいけない 機械音痴なお前の母ちゃんにプレイしてもらうくらいのつもりで丁度いい 体験版なんて「ジャカアしいわそんなもん知らんがなエエから金返せやワレェ!!!」で終わり
568 名前:デフォルトの名無しさん [2016/08/29(月) 18:44:32.90 ID:IWCj2egw.net] 購入ページに64pxくらいの赤文字で 「動作チェックの為に体験版で遊んでから購入して下さい。返金には一切応じません」って書いておけばいいやん それか体験版で遊んだら認証コードGET出来て認証コードないと買えないとか
569 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 20:08:55.85 ID:BlZeW1Wo.net] >>553 何これ?
570 名前:デフォルトの名無しさん [2016/08/29(月) 21:14:26.99 ID:jQ52lz2j.net] JRE付きとなしを両方配布して、金はライセンスキーを売る形式にして、それは起動後に入力する事になるので多分苦情は減る。 ライセンスキー買ってくれなくても制限付きで少しは動くようにしといてそれを体験版ということにすれば良い。
571 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 21:54:17.38 ID:ACcJrIRQ.net] 様々なご意見やご提案ありがとうございます! 大変参考になりました。 以前、同じくJavaで作ったゲームを公開した際に、フリーであるにも関わらず動作しない旨の苦情を多数頂いたもので、有償の場合どうなってしまうのかと考えたらJREを同梱してしまうのが良いのかなと思い相談させて頂きました。 これから公開方法については皆様から頂いたご意見を参考に決めたいと思います。 また、ライセンス絡みについて参考にするため、すでに公開されているJava製のゲームにJREが同梱されている例が無いか調べたところ、Windows環境下にも関わらずOracleのJREでは無くOpenJDK(?)が同梱されている例が見つかりました。 OpenJDKの理由や違いについては私の知識不足によりまだ分かっていませんが、皆様から頂いたアドバイスやURLによるとOracleのものでも全く問題はなさそうに思えるのでまた調べていきたいと思います。 ありがとうございました。
572 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 23:00:52.88 ID:WaGPxa3J.net] 商品の管理するプログラムを考えてます 商品をオブジェクト、そのフィールドにpriceがあり、例えば日本円での価格をsetPrice()で設定したとして、 ・ある商品A、B、C は、ドルでの価格を知る必要がある ・ある商品A、 C、Dは、ユーロでの価格を知る必要がある ・それぞれのメソッドは、どの商品についても同じ処理 こういった場合のクラスの設計について、よい指針を教えてください ・商品クラスを継承したA、B、C、Dクラスに対し、A、B、CにgetDollarPrice()を、A、C、DにgetEuroPrice()をコピペで実装する ・商品クラスを継承したAC商品クラスにgetDollarPrice()、getEuroPrice()を実装。同じくB商品クラスにはgetDollarPrice()のみ、D商品クラスにはgetEuroPrice()のみを実装 ・基底の商品クラスにgetDollarPrice()、getEuroPrice()を実装する。継承したクラス側では、使わないメソッド(例えばDのgetDollarPrice())は何もしない処理でオーバーライド ・Public static calcDollar()、同calcEuro()といったメソッドを作成し、必要時に計算する 上ではドル・ユーロとしましたが、他にも元とかウォン等色々種類があり、そして商品ごとに必要な機能が不規則に異なっているので、 どう設計したらよいか悩んでいます ちなみの元のソースは、C++の多重継承を用いて実装されていました
573 名前:デフォルトの名無しさん [2016/08/30(火) 00:00:27.21 ID:vWqGzECl.net] >>567 デフォルトメソッドで多重継承できるよ 商品ごとにインタフェース実装しまくることになるから どのインターフェースを実装するか商品を階層的に分類できないときついかも すでに多重継承で実装できてるのならいけるかも!? Java9の標準ライブラリではJoda Moneyをもとにしたものが使われるんだって 中身の実装はこれとか https://java.net/projects/jjug/pages/Adopt-a-JSR-JavaSE9 www.joda.org/joda-money/
574 名前:デフォルトの名無しさん mailto:sage [2016/08/30(火) 00:00:29.88 ID:vcGs2dWd.net] >>567 getPriceがPriceクラスのオブジェクトを返す PriceクラスはasDollerやasEuroなど一通りの表現を実装するイミュータブルなクラスにする
575 名前:デフォルトの名無しさん mailto:sage [2016/08/30(火) 01:47:09.82 ID:TaoYiOtt.net] RPGのモンスタークラスと同じだろ 数百種類のモンスター型の、switch文を書きたくない場合、 数百種類のクラスを作って、自動的に各クラスが適切な処理をする つまり、仮想関数
576 名前:デフォルトの名無しさん mailto:sage [2016/08/30(火) 08:26:54.20 ID:agWpAPx4.net] getPrice(rate) return price * rate じゃだめ? 後はそれぞれの価格が欲しいところでレートを設定するだけでいいし商品クラスは常に同じ動きするし
577 名前:デフォルトの名無しさん mailto:sage [2016/08/30(火) 09:01:09.43 ID:vcGs2dWd.net] >>571 それはない それ呼び出す側がメソッド内で何やってるかを明らかに意識してるだろ 全く抽象化になってない、掛け算だけメソッド内でやる意味がない せめて変換メソッドを定義したCurrencyクラスのインスタンスを渡すとかするべき
578 名前:デフォルトの名無しさん mailto:sage [2016/08/30(火) 09:04:39.92 ID:qpyuPRUS.net] レスどうもありがとうございます >>568 interfaceの嵐になるのだろうなぁ、それでいいのかなぁ、と 悩みました リンク先など見て考えます >>569 なるほど Priceクラスもよいですね >>570 RPGは作ったことないですが、そんな風に実装されてるのですね ソースの大半がモンスタークラスの実装になりそうですね >>571 レートを換算するだけなので、実はそれでもよいです ただ、オブジェクトに換算後の値も持たせたいなぁ、と思ってます 換算すれば求まるデータならオブジェクトに持たせる必要ない、のかな?
579 名前:デフォルトの名無しさん [2016/08/30(火) 11:17:45.70 ID:vwHt2PHp.net] >>567 それ全通貨のレートを保持するクラス作っておいて、そのクラス経由で他の通貨への換算やれば良いだけでは?
580 名前:デフォルトの名無しさん mailto:sage [2016/08/30(火) 11:31:09.72 ID:xgpTgq7w.net] 個々の商品が同じレートで計算って事は現実的に無いと思うので、 void setPrice(Currency currency, String price) String getPrice(Currency currency) みたいなIFにして、内部ではHashMapで管理すれば、通貨が増えたらCurrencyのenum増やせばいいんじゃね?
581 名前:デフォルトの名無しさん [2016/08/30(火) 11:56:26.35 ID:vwHt2PHp.net] それだ
582 名前:デフォルトの名無しさん mailto:sage [2016/08/30(火) 19:05:48.03 ID:vv6Q96L1.net] javaで動いているプログラムを監視する目的で、JVMTIのMethodEntryイベントやMethodExitイベントを使って遊んでます JDIでも同じことが出来るみたいなのですが、こういったデバッガの拡張をeclipseなんかのIDEのプラグインで実装するにはどうすれば良いですか? 例えばIDEのエディタでブレークポイントを
583 名前:セットして、そのIDEでデバッグを実行したらBreakpointイベントで自分が実装した処理が行われる(ログが吐き出されるとか) 的なことがやってみたい [] [ここ壊れてます]
584 名前:デフォルトの名無しさん mailto:sage [2016/08/30(火) 19:31:07.82 ID:q9MYe/9f.net] まずは例えばで挙げられているソースコードを読んでみるのはどうですか
585 名前:デフォルトの名無しさん [2016/09/01(木) 18:07:14.17 ID:isvppOQZ.net] これを実行すると出力が1になるのですが、何故でしょうか。 @Integer inti = new Integer(0); AInteger intj = new Integer(1); Binti = intj; Cintj = 2; DSystem.out.println(inti); 自分の考えだと、 @intiが、値0のインスタンスを参照 Aintjが、値1のインスタンスを参照 Bintiが、intjが参照しているインスタンスを参照するように変更 Cintjが参照するインスタンスに値2を設定 Dintiもintjも同じインスタンスを参照してるはずなので出力は2 になるはずなんですが、1になります。
586 名前:デフォルトの名無しさん [2016/09/01(木) 18:17:12.59 ID:JZugZEHC.net] >>579 Integerは不変 もし不変じゃなかったとしても Cの所で intj.value=2;になる @intiに、値0のインスタンスの参照を代入 Aintjに、値1のインスタンスの参照を代入 Bintiに、intjのインスタンスの参照を代入(intj==intiになる) Cintjに、値2のインスタンスの参照を代入(自動ボックス化。コンパイラがnew Integer(2)に変換している) Dintiとintjは違うインスタンスを参照しているので値は1
587 名前:デフォルトの名無しさん [2016/09/01(木) 20:27:01.67 ID:K7BE+EFW.net] >>579 4の所は intj = new Integer(2); って書いてるのと同じだから。
588 名前:デフォルトの名無しさん [2016/09/01(木) 20:28:01.03 ID:K7BE+EFW.net] ってよく見たら既に書いてあるじゃないか。とほほ。
589 名前:デフォルトの名無しさん mailto:sage [2016/09/01(木) 20:52:55.20 ID:qC9ojyjS.net] ドンマイ、ガンバ
590 名前:デフォルトの名無しさん mailto:sage [2016/09/01(木) 20:53:01.09 ID:wr8HVpEY.net] とほほsan?
591 名前:デフォルトの名無しさん mailto:sage [2016/09/01(木) 21:15:27.70 ID:52Zd8aZn.net] 浦和レッズ、じゃじゃじゃじゃん
592 名前:デフォルトの名無しさん [2016/09/02(金) 10:23:18.49 ID:KWQoOgI3.net] Javaのゴミっぷりが酷い Java作ってる奴らって日本で言うところの小卒相当じゃね? 開発者とは名ばかりのゴミ集団なんだろうなJava開発団 JavaでAES暗号化したものがOpenSSLで復号できないとかJavaマジで糞すぎ まともに暗号化すらできないゴミ言語なら暗号化機能付けるな 暗号化関連のリファレンスとかあったら騙されて時間をドブに捨てる奴がいるだろうが プログラマを平均の数倍給料もらってる程有能でスキルある人材をなのにその騙して時間を無駄にした罪は重い 本当にJava作ってる奴等は頭のが馬鹿しかいないんだろうな 低機能を隠すために嘘リファレンス用意するとか人間的にも腐ってる
593 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 11:07:29.18 ID:OcjKSC/i.net] ならば使わなければいいだけの話 選択肢色々あるので
594 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 12:15:47.07 ID:Do4GNfXI.net] 小学生レベルだと勤め先に事欠くので選択肢はないよ
595 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 12:37:29.73 ID:OcjKSC/i.net] そう感じるヤツがjavaを使わなければいいだけの話 利用するプログラミング言語の選択肢は色々あるので
596 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 12:57:20.18 ID:7JZUO+bM.net] 感じる感じないではなく、無能には選ぶ権利などないってことでしゃろ それは無能なのが悪いのさハハハ