[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 05/18 20:39 / Filesize : 277 KB / Number-of Response : 1025
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

Java入門・初心者質問スレ Part.5



1 名前:デフォルトの名無しさん mailto:sageteoff [2017/09/29(金) 17:53:25.24 ID:XnizQSCA.net]
Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.4
mevius.2ch.net/test/read.cgi/tech/1498828456/

403 名前:デフォルトの名無しさん mailto:sage [2017/10/30(月) 13:52:19.55 ID:4hMzyEUs.net]
>>393
1ファイルに複数のクラスを書いてるんじゃない?

404 名前:391 mailto:sage [2017/10/30(月) 14:17:58.64 ID:6Zg8+NGr.net]
>>392
これがPHPというのがわかりました
スレ汚し失礼致しました。

405 名前:デフォルトの名無しさん mailto:sage [2017/10/30(月) 15:15:46.44 ID:y0GY6LFV.net]
>>393
インナークラスの悪寒…
$付いてない?

406 名前:デフォルトの名無しさん mailto:sage [2017/10/30(月) 15:50:40.06 ID:3rz3HBcW.net]
>>395,396
色々調べてみたらどうもシリアライズ可能なクラス?というのが原因みたいでした…
お手数おかけしました

407 名前:デフォルトの名無しさん mailto:sage [2017/10/30(月) 18:18:23.77 ID:sRaOGV/D.net]
>>363
final見逃してただけだった
それなら尚更コンストラクタだね

408 名前:デフォルトの名無しさん [2017/10/31(火) 08:25:04.95 ID:OmcraJl8.net]
>>360
範囲外の入力値エラーだろ

private、つまりクラス内では、戻り値でエラーを示すが、
public、つまりクラス外では、例外でエラーを示す

なぜなら、クラス内をコーディングしているのは、普通は同じ会社だから、
その会社内で規定したエラー値を使っても、見落としが少ない

でも、クラス外の場合は、クラスをコーディングした会社と、異なる会社が使うから、
そのクラス内で規定したエラー値を使っては、いけない。
なぜなら、他社の人は、クラスのドキュメントを読まずに、クラスを使うから

つまり、クラス外部の人に対しては、絶対にエラーが起こるように、例外を使う

クラス内をコーディングする人と、そのクラスを使う人は、
異なる会社を想定している。
他社の場合は、クラスのドキュメントを読まないことを想定すべき

「スッキリJava」にも書いてある。
クラスを使う側と、フレームワークなど、他社が使うクラスを作る側の、
コーディングの違い。
他社を想定している場合は、全く違う

この辺は、品質管理をやってないと知らないはず

409 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 08:35:40.63 ID:BBLfUUwS.net]
>>399
どうしてもスッキリの宣伝をしなきゃ気が済まないようだな
その一節がなけりゃいいのに

410 名前:398 mailto:sage [2017/10/31(火) 09:49:23.34 ID:OmcraJl8.net]
「スッキリJava」では、クラスの責務を、明確に分けている

前半は、クラスを使う側の知識で、
上級編はフレームワークなど、他社が使うクラスを作る側の知識

フレームワークを作る側では、検査例外を使って、コンパイルエラーにしないと、
ドキュメントを読まずに実行した客が、実行時エラーを起こして、
電話をかけてくるから、商売にならない

本を読んで、実行時エラーを起こした客が、出版社に電話をかけてくるだろ。
それと同じで、商売にならない

だから例外にして、その例外をキャッチしない人は、実行できないようにする

サポート契約をしない、無料相談の客をはじかないといけない。
無料で見積もりさせる客も

411 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 12:09:41.25 ID:QuyL7alo.net]
経営の話か



412 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 21:22:09.98 ID:BSBih/VQ.net]
javaでWebアプリ作ってるのですがグラフ表示をしたいです
jfreechartとかchart.jsとか出てくるんですがおすすめとかってありますか?

413 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 21:22:56.96 ID:BSBih/VQ.net]
質問スレと間違えましたすみません。

414 名前:デフォルトの名無しさん [2017/11/02(木) 02:18:26.07 ID:BShD5IWlq]
JavaでWEBアプリ作りたいんだが、やっぱJSP+サーブレットってやつをやるべき?
DBの処理(クエリとか)はサーブレットで、JSPは結果表示のみ、みたいに分ける方がいいの?

415 名前:デフォルトの名無しさん [2017/11/02(木) 15:08:48.76 ID:BShD5IWlq]
WEBプログラミング板ってのがあるんすね。すま

416 名前:350です mailto:sage [2017/11/03(金) 17:28:51.99 ID:AmIWbkAj.net]
>>381
しばらく2ちゃんを見れない状況だったので亀レスとなってしまいましたが、コンストラクタで例外投げるのが良くない理由をできれば聞きたいです

417 名前:デフォルトの名無しさん [2017/11/03(金) 17:36:15.65 ID:lQ0XoM3e.net]
>>407
責務の分離ができてない証拠だから

418 名前:デフォルトの名無しさん [2017/11/03(金) 17:39:40.36 ID:lQ0XoM3e.net]
コンストラクタっていうのはオブジェクトを初期化する特別な処理を書くところ
渡された値をそのまま何の加工もせずにフィールドにお納めするのが義務なんです

419 名前:デフォルトの名無しさん [2017/11/03(金) 17:42:31.79 ID:lQ0XoM3e.net]
どうしても例外を投げたいならtryCreateというスタティックメソッドを作って
例外投げますよ作れないかもしれないですよということをメソッド名で
陽に示すべきだ、この処理は検証も含んでいますよと示すべきだ
なぜならば検証も含むからだ、オブジェクトを作るメソッドなのにだ

420 名前:デフォルトの名無しさん [2017/11/03(金) 18:39:37.30 ID:lQ0XoM3e.net]
FileStreamもコンストラクタで例外を投げるが
あの設計も大間違いだから

コンストラクタでリソース確保しようとするのが完全に間違ってる
closeの処理でリソースを解放するならばリソースを確保するのはopenだ
openの責務をFileStreamは持つべきでそれはオブジェクトを初期化する
コンストラクタとは役割が根本的に100憶パーセント異なるわけ

421 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 19:04:39.65 ID:9CXEo34m.net]
>>409
何もしなかったら意味ないだろ……
直通のゲッターセッターと同じただのお飾り



422 名前:デフォルトの名無しさん [2017/11/03(金) 19:18:22.44 ID:lQ0XoM3e.net]
>>412
フィールドを初期化するという大事な処理がある
セッターは代入だから、初期化じゃないから

423 名前:デフォルトの名無しさん [2017/11/03(金) 19:40:27.12 ID:lQ0XoM3e.net]
UI -> アプリ(バリデータ) -> ドメイン -> DAO
レイヤーはこのように分けてドメインから先にバリデーションのコードを持ち込んではいけない
オブジェクトをクリーンに保つためのベストプラクティス

424 名前:デフォルトの名無しさん [2017/11/03(金) 19:47:48.30 ID:lQ0XoM3e.net]
バグがないように引数をチェックするという目的でやるなら
アサートを使うべきだ
ただしアサートを使うのは開発時のみで本番コードには含めない
本番コードで引数チェックが必要になるようならそれは
業務要件として抽出するべきだ

425 名前:350です mailto:sage [2017/11/03(金) 20:10:50.22 ID:AmIWbkAj.net]
なるほど
405~410まではなんとなくわかりました
411, 412は私の経験or勉強不足でいまいち理解できませんでした
でも、解説してくれてありがとう

426 名前:デフォルトの名無しさん [2017/11/03(金) 20:17:00.78 ID:lQ0XoM3e.net]
>>416
ありがとうの後にはございますだ
それが礼儀だ

427 名前:デフォルトの名無しさん [2017/11/03(金) 20:19:43.27 ID:EWAV0hJA.net]
なるほど。わかった。スレが過疎って来たらコンストラクタで例外の話を出せば書き込みで溢れてスレが活性化するのだな。
時折反論を書きありがとうの後にございますを付けなければなお良いと。

428 名前:デフォルトの名無しさん [2017/11/03(金) 20:21:29.16 ID:lQ0XoM3e.net]
僕が活性化しちゃうおおお

429 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 21:17:51.19 ID:xnvXDnsB.net]
またキチガイか

430 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 21:35:59.49 ID:Ro85MhDs.net]
コンストラクタに不正なもの渡された場合に例外を出すことが
なぜいけないのかについては1ミリも説明されてなくて草

431 名前:デフォルトの名無しさん [2017/11/03(金) 21:41:52.50 ID:lQ0XoM3e.net]
>>421
責務の分離ができてない証拠だから
100ミリくらい説明してますけど
10メートルですよ



432 名前:デフォルトの名無しさん [2017/11/03(金) 21:42:46.79 ID:lQ0XoM3e.net]
違うわ1,000ミリの間違いね

433 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 21:52:44.52 ID:9CXEo34m.net]
むしろ初期化の異常で例外を投げるのは
コンストラクタの責務だろ

なぜならコンストラクタの引数で渡されたデータから
インスタンス変数(やクラス変数)を初期化するわけだから
情報エキスパートの原則からして
データの処理はデータを持ってるオブジェクトが行うのが原則

ただ処理を全部抱え込むと肥大化するから
他に委譲することは構わない
newの代わりにファクトリを使ったりするのと同じ
しかしそれは「newを使うな」ではない

「外部に委譲してもいい」のであって
「コンストラクタで例外を投げてはいけない」ではない

434 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 22:00:57.69 ID:Ro85MhDs.net]
>>422
責務を理解できてない典型だね
君がそういう規約で開発するのは勝手だけど
それをベストプラクティスだからとか言って
他人に押し付けるのはよくないよ

435 名前:デフォルトの名無しさん [2017/11/03(金) 22:01:56.36 ID:lQ0XoM3e.net]
>>424
ベストプラクティスってそういうものだよ
こういう実装もできるけどこっちの方が好ましいよねっていうものだから
そういう意味で言ってるわけよ
たとえばModel View ControllerのアーキテクチャがあるけどViewに
Modelのコードも全部書きまくっちゃってもいいわけよ
でも分離するのが好ましいだろ、そういう意味で言ってるわけよ
その真意をくみ取って欲しいわけよ
コンストラクタでデータチェックヤラナイのが好ましいわけよ
え?ヤラナイの?なんていうふしだらな誘いに乗らないで欲しいわけよ

436 名前:デフォルトの名無しさん [2017/11/03(金) 22:02:38.01 ID:lQ0XoM3e.net]
>>425
理解できてないことを1ミリも説明してないじゃん
話にならないよ

437 名前:デフォルトの名無しさん [2017/11/03(金) 22:03:47.06 ID:lQ0XoM3e.net]
自分の考える責務の分離はこうっす
自分こう思うっすとはきはきと説明できないかね
若さが感じられない

438 名前:デフォルトの名無しさん [2017/11/03(金) 22:42:06.17 ID:lQ0XoM3e.net]
説明を求められたら言葉を失ってしまうみなさん

439 名前:デフォルトの名無しさん [2017/11/03(金) 22:47:53.53 ID:L9/pWClM.net]
どんなに外部でチェックしてもインスタンス生成に失敗することはあるわけで、
そういうときに失敗を通知する手段は例外しかないわけで、
コンストラクタで例外を投げてはいけないとする方が問題だ。

440 名前:デフォルトの名無しさん [2017/11/03(金) 22:49:18.72 ID:lQ0XoM3e.net]
モデルに存在するべきコードがコントローラに存在するものをファット・コントローラと言うけれども
バリデータに存在するべきコードがコンストラクタに存在するものをファット・コンストラクタと呼んで
クラスの生活習慣病に位置付けるのはどう?
徐々にシステムを蝕んでいきます
コーディングの習慣を見直しましょう

441 名前:デフォルトの名無しさん [2017/11/03(金) 22:52:55.66 ID:lQ0XoM3e.net]
>>430
どんなに外部でチェックしてもインスタンス生成に失敗するときは例外投げて良い
そんなのケースバイケースだろ、柔軟に対応しろよ



442 名前:デフォルトの名無しさん [2017/11/03(金) 22:53:28.36 ID:lQ0XoM3e.net]
ベストプラクティスっていうのは柔軟っていう意味もありまぁす!

443 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 00:31:14.87 ID:FdHKGPou.net]
入力値チェックは、MVC のビューでやるけど、

ドラクエ10 の記事によると、
通信データの500バイトに、1バイトは間違っているから、
通信データは、絶対に信用しちゃいけない。
必ずサーバー側でも、チェックすべき

途中のルーターが、データが間違っていても、データを破棄せず、
間違ったデータで、パリティを再計算して送ってくるから、
正常なデータのように見える

444 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 01:00:49.14 ID:O0AU1SEY.net]
サーバーが受け取ったデータが外部入力なんだから
それをチェックするのは当たり前
ユーザー入力と同じ

境界の外から入ってきたデータを
どのレイヤーでチェックしてエラーハンドリングするかということと
モデルレイヤーのコンストラクタが事前条件に反した不正値を受け取った場合に
例外を投げるかどうかは関係はしてるが種類の違う問題
という話をしてる

445 名前:デフォルトの名無しさん [2017/11/04(土) 02:59:59.82 ID:Wr8YwoWe.net]
できれば不正値はコンパイル時にエラーになって欲しいものではあるな。
不正な値を引き渡せるようにプログラミングできること自体がなくなった方が良い。
I/O絡みのエラーは実行時じゃないとわからないから別としてね。
(指定したファイルがなくて読み出しオープンでエラーとかは仕方がない)

446 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 08:21:09.10 ID:4V8ohWTX.net]
javaってできることが多すぎて勉強しんどい

447 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 08:35:59.26 ID:32ZzWJzG.net]
>>434
へー、チェックサムも独自に仕込むのかな

448 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 08:37:10.99 ID:32ZzWJzG.net]
>>435
事前条件ってまさにアサートの領分じゃん

449 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 08:49:44.67 ID:die+TITB.net]
>>437
C++より楽

450 名前:デフォルトの名無しさん [2017/11/04(土) 08:55:38.30 ID:KxJ3WBAq.net]
モデルの引数を間違えてるっていうのはバグなのでー
開発時に分かればよいことなのでー
アサート使うべきだよねー

コンストラクタをぶくぶくと太らせる理由にはならぬよ
メタボリッククラスから脱却してスマートクラスにしよう

451 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 13:21:03.20 ID:O0AU1SEY.net]
>>439
Javaの場合はアサートって言うとビルトインのassertをさすからね
事前条件なら自動的にアサート使えとはならないよ

それともコンストラクタでは
ExceptionではなくErrorを投げるべきって言いたいのかな?



452 名前:デフォルトの名無しさん [2017/11/04(土) 13:36:25.85 ID:KxJ3WBAq.net]
>>442
何言ってんだおめー
assert使うべきで
例外を投げるべきじゃない

453 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 15:21:29.77 ID:1M0jr43T.net]
javaなら、コンストラクタで例外スローでいいでしょ。

454 名前:デフォルトの名無しさん [2017/11/04(土) 17:10:27.14 ID:KxJ3WBAq.net]
>>444
でも設計的に大間違いですよそれ
コンストラクタの使い方完全に間違ってますよ

455 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 20:42:41.33 ID:cKuNjw8p.net]
>>445
あほ

456 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 13:12:43.81 ID:z+9Dn5/C.net]
以下のコードをideoneで実行できません。(ブラウザとしてエラーが発生)
どなたか理由を教えてもらえないでしょうか?

import java.lang.reflect.*;
class RefSamp {
public int times = 0;
public RefSamp(int t) {
this.times = t;
}
public void hello(String msg) {
this.hello(msg, this.times);
}
public void hello(String msg, int t) {
System.out.println("Hello, " + msg + " x " + t);
}
}

public class Main {
public static void main(String[] args) throws Exception {
Class clazz = RefSamp.class;
Constructor<?> cons = clazz.getConstructor(int.class);
RefSamp rs = (RefSamp) cons.newInstance(256);
Field f = clazz.getField("times");
f.set(rs, 2);
System.out.println(f.get(rs));
Method m = clazz.getMethod("hello", String.class, int.class);
m.invoke(rs, "refrection!", 128);
boolean pubc = Modifier.isPublic(clazz.getModifiers());
boolean finm = Modifier.isFinal(m.getModifiers());
}
}

457 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 14:11:12.97 ID:0YSHLKzk.net]
初心者じゃないんだろ35歳
自分で調べろ

458 名前:遊園地 mailto:sage [2017/11/05(日) 14:27:53.28 ID:FPjW0d5Z.net]
読むの面倒だから、エラー文も上げて。

459 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 14:34:37.57 ID:k/LyUYN/.net]
ideoneは知らんけどリフレクションはjavaセキュリティマネージャ動いてたら実行できないからそれじゃねーの

460 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 17:40:17.18 ID:2ZrTuY5p.net]
35歳に親切にすると君の職場に現れて付きまとわれるぞw

461 名前:444 mailto:sage [2017/11/05(日) 18:22:30.39 ID:z+9Dn5/C.net]
>>448
決めつけるなよ。それに初心者認定したのはあんたらだろ?

>>450
レスありがとうございます。
ideoneではなにかしらそういう安全装置が働いているということですね。



462 名前:デフォルトの名無しさん [2017/11/05(日) 18:54:33.30 ID:qSskq3Yv.net]
釣りでエラーが発生と言ってるだけだろ
https://ideone.com/yLwAJh

463 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 18:59:33.63 ID:0YSHLKzk.net]
まず質問の仕方がおかしいんだよなぁ
ここは学校じゃないし、相手は先生じゃない
質問者の言わんとしてることを一生懸命に汲み取ってくれる人なんてほとんどいない
もっと相手に伝わるように質問しろ

464 名前:444 mailto:sage [2017/11/05(日) 19:41:51.63 ID:z+9Dn5/C.net]
>>451
たひんで

>>453
OSなど実行環境の違いによるんですかね…。

>>454
それはその通りだと思うけど、あんたは親切な人だったの?

465 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 19:45:10.05 ID:/i0gfJYB.net]
何この変なの?
どっかのコテハンか?

466 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 19:46:54.84 ID:PoYQIzOm.net]
>>453のリンク見てもエラーが出てるんだよな?
正直エスパーしようにも限界

467 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 20:07:50.04 ID:2ZrTuY5p.net]
もうそいつに触れるのはよせ

468 名前: []
[ここ壊れてます]

469 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 21:21:54.00 ID:0YSHLKzk.net]
>>455
なんで質問が分かりにくいって指摘に対
し、
俺が親切な人だったのか聞かれてるの?
全然意味分かんないんですけど

470 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 21:30:31.08 ID:2ZrTuY5p.net]
理解を越えているから考えては駄目

471 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 21:31:07.85 ID:0YSHLKzk.net]
そもそももっと答えの得られやすい質問が出来るようになれば解決なんだけど、
なぜ君は指摘に対してわざわざ「じゃああんたはごにょごにょ」とわざわざ全く関係ない事持ち出して喧嘩売ってきてるの?
中学生なの?反抗期なの?
自分の行動を振り替えって恥ずかしくない?



472 名前:デフォルトの名無しさん [2017/11/06(月) 00:46:04.60 ID:OjznruUj.net]
以前お世話になりました >>201です。課題の上から二つ目の"(ここを作成)"がわからないです。
まあ上のほうも自信ないのですが...誰か教えていただけませんか?
https://imgur.com/a/niyx6 
https://imgur.com/a/ehrkB 
https://imgur.com/a/5X3tQ

473 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 00:47:27.68 ID:1qhCOQ98.net]
宿題スレへ

474 名前: mailto:sage [2017/11/06(月) 00:49:04.71 ID:Lce8rfVs.net]
今実行したら出来ました。何でさっきは出来なかったんだろ…。
https://ideone.com/KdavqO

>>456
プログラマー板のコテハンです。

>>457
いや、リンクをたどるのは大丈夫でした。

>>459
ただ冷たくあしらわれたと思ったら、アドバイスをくれたので。

>>461
えっ?褒めてるのに?

475 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 02:26:46.28 ID:tjV5ukzM.net]
>>462
前回はみんなが教えちゃったけど
正直ためにならないと思うんだよね

でも一個だけヒント言うなら一行ずつ処理を追ってみ(2番目の)
「この変数にはどんな値が入っているか(入るべきか)」意識しながら

現状インプットからアウトプットまで線でつながってない
インプットの仕方は「Java コマンドライン 入力」でググれ

476 名前:デフォルトの名無しさん [2017/11/06(月) 03:38:31.02 ID:2Q/sT7xS.net]
ヤフーブログの https://blogs.yahoo.co.jp/kamyu_2010 にデザパタ解説を発見した。

477 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 06:09:30.85 ID:sonxQjeP.net]
>>464
ごめんなさい、褒められてると思ってなかった
字面で反応してしまったのは俺も同じでした
反省してきます

478 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 07:06:32.63 ID:efUB4xY4.net]
>>465
ありがとうございます。時間かけてやって見ます

479 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 07:25:39.44 ID:kblaZiQ3.net]
>>462
5月の宿題を今やってんじゃねーよ

せっかくお金払って学びに行ってるんなら先生に聞きな

480 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 08:51:22.52 ID:f5Hwp3Jw.net]
課題の内容および詳細がバッドノウハウの固まりだな
やっぱ学校はCかLispでいいと思うよ

481 名前:デフォルトの名無しさん mailto:age [2017/11/06(月) 10:47:13.47 ID:CLk5jCwv.net]
マウンティングするスレじゃないんですよ!



482 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 13:56:05.08 ID:Ql637c4l.net]
javapro wwww
前に安易に答え教えたせいか変数の使い方すらろくに理解してなくてひでぇな・・
金ドブだからもうやめた方がいいぞマジで

483 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 14:05:17.27 ID:Ql637c4l.net]
問題も毎回酷すぎてガチでビックリすんだけど学校の名前教えてくれよ
こんなゴミみたいな問題できても全く勉強にならんレベルの酷さだぞ

484 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 14:39:48.25 ID:Ql637c4l.net]
public class Month {
int hi;
int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

Month(int num){
hi = days[num-1];
}

public int getDays(){
return hi;
}
}

public class Calendar{
public static void main(String[] args) {

int tsuki = Integer.parseInt(args[0]);

if(tsuki >= 1 && tsuki <= 12){
Month m = new Month(tsuki);
System.out.println(tsuki + "月は" + m.getDays() + "日あります。");
}
else{
System.out.println("1〜12月を指定してください。");
}
}
}

485 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 14:53:59.17 ID:FN/Llmne.net]
days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

month = 2
puts days[month] #=> 28

Ruby では、これだけ。
ただし、days[0]は使わない

画像などを貼るな!
paiza.io, codepad などのサイトに、ソースコードを貼って、質問しろ

486 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 14:56:54.74 ID:PEro5dbb.net]
>>474
何で教えるんだ?
1,2,3,4,5の配列から3番目の値を得る方法を教えろよ。
そうすれば月から日数得る方法も分かるだろ。

考え方が分かって無い人には答えを教えるべきじゃない。

487 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 15:10:14.26 ID:Ql637c4l.net]
>>351
上級Javaグラマーアカデミー一般命令・規約

規約6第23項18節
パラメータとして渡される値に関して
クラスの不変式を破っているオブジェクトの生成を防ぐため一般原則の特殊な場合として
メソッドおよびコンストラクタは後で使用されるパラメータの正当性を検査すべき
非公開メソッドに関しては一般に、アサーションを用いて検査すべき
上記規約に対する例外として、正当性検査のコストが高いか現実的でなく、かつ
正当性検査が計算の処理の中で暗黙的に行われる場合はこれに該当しない
また暗黙的検査によって誤った例外がスローされる場合はエラーアトミック性が失われることになるため
このような状況下においては抽象概念に適した例外をスローできるようにイディオムを使用すべき

488 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 15:21:23.29 ID:Ql637c4l.net]
クソな問題は逆に頭を悪くするので、すぐに答えを教えるべき

489 名前:デフォルトの名無しさん [2017/11/06(月) 15:37:21.27 ID:VIJ1bqUv.net]
だいたいハードコーディングというところがもうダメなのに。

490 名前:デフォルトの名無しさん [2017/11/06(月) 16:59:11.52 ID:V0vtn4gd.net]
こういう場合は月の値がおかしかったら例外投げるのが良さそうに思うが、そうすると今話題のコンストラクタで例外になる。
かといってそれをしないならどのタイミングで例外投げるのが良いのか?
(まあそもそもこんなもんクラスにすべきではないのかも知れんが)。

さて、このネタでまたスレが活性化するかな・・・

491 名前:デフォルトの名無しさん [2017/11/06(月) 17:19:53.91 ID:f1KpQ6jU.net]
最近Javaを始めた者です。
質問させてください。

質問1)
店から客が弁当を買うような仕組みのプログラムを作りたいのですが、
用意するクラスは「店」「商品の弁当」「客」「実行するためのメインクラス」で良いのでしょうか?
変数は「店と客の所持金」、「客の腹の空き具合」、「弁当によって満たされる満腹度」のようなものを考えています。

質問2)
この様なプログラムの場合、売買のメソッドはどのように作ればいいのでしょうか?
「店が売る」メソッドか「客が買う」メソッドのどちらかだけ必要なのか、両方必要になるのかが分かりません。
現実的に考えれば客が居なければどんなに商品があっても意味が無いので、「店は商品を用意する」それを「客が買う」ような設計になると思うのですがどうでしょうか?

質問3)
現実的には客が弁当を買えば店の在庫は減り、客が所持する弁当が増えます。
このようにオブジェクトの中のオブジェクトが違うオブジェクトに移動するようなプログラムはどのように書けばいいのでしょうか?

質問4)
「客が買った弁当を食べる」という行為を行った場合、客が所持している弁当が無くなるわけですが、この様な仕組みはどのように書けばいいでしょうか?

以上、長くなりましたが良い方法があればご教授ください。
よろしくおねがいします。



492 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 18:19:33.27 ID:f5Hwp3Jw.net]
空腹度なんて抽象的すぎてゲームの中でしか成立しないぞ

493 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 18:43:48.98 ID:Ql637c4l.net]
ひっでぇ質問の内容w
何したいのかさっぱりわからん

494 名前:デフォルトの名無しさん [2017/11/06(月) 18:52:01.06 ID:KtrOSJPo.net]
>>483
君は読解力なさすぎでは?

495 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 18:53:07.65 ID:kblaZiQ3.net]
>>481
教授するような時間はないな

496 名前:デフォルトの名無しさん [2017/11/06(月) 19:13:07.93 ID:T+apbet3.net]
>>481
そのシステムの軸がどれなのか?

店、客、弁当を眺めるシステム?

497 名前: mailto:sage [2017/11/06(月) 19:30:58.35 ID:/hMSyilp.net]
>>481
売買を真面目に考えると面倒くさい。
弁当のクラス以外に、店と客が「持ってる弁当のリスト」を持つか、
弁当リストクラスを別に作って、弁当に持ち主「店」「客」を持つとか、そんなんじゃないの?
どこにも属してない弁当が存在し得れば後者だと思うし、今回はどこにも属してない弁当があったほうが便利。
食った=無くなった=オブジェクトをリストから削除するか、弁当の満たされる満足度を食ったら残り0にするかじゃないかな。
腹の空き具合と弁当の容量のコンバート関数でももたせりゃ便利じゃねえの?後々。
その空き弁当箱は、捨てるときに、持ち主無しにしといて、たまに持ち主無しの弁当箱をバサッと消したほうが楽かも。

客が来たら作る、となるとまた面倒くさい。
店の方の在庫数で、負在庫に突入しそうなら補充とか、残り○個になったら補充、そういう風にするんじゃないの?

業務アプリみたい。

498 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 20:04:51.42 ID:tjV5ukzM.net]
>>481
いかにも初心者らしい疑問だけど
同時にどれももっともな質問だね

>質問1)
>用意するクラス
ソフトの規模の大きさに応じて
クラスは細分化していく

>「店」「商品の弁当」「客」「実行するためのメインクラス」
でもまあ小規模な前提なら
それで大筋でおかしくないと思う

もし規模が大きくなるなら
「金」とか「(弁当の)具」とか「客の行列」とか
クラス化する場合もあるかも

>「客の腹の空き具合」
ゲームなの?
業務アプリとゲームだとかなり考え方が違う

499 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 20:10:14.21 ID:tjV5ukzM.net]
>>481
>質問2)
>売買のメソッド
これは二者関係だから
複雑になりがちなんだよね

まず話を簡単にするためゲームだとして
店視点の販売目的のゲームなのか
客視点の満腹目的のゲームなのかで違う

小規模ソフトならプレイヤー視点の方に
メソッドをつければOK


じゃあもっと複雑な場合どうするか?

客の買うメソッドから
店の売るメソッドを呼ぶという
二重呼び出しもありうるし

第三者が「売買」メソッドを
持って仲介するケースもありうる

「デザインパターン」とか学ぶと
そういう複雑な関係のさばき方が分かってくる

500 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 20:13:40.02 ID:tjV5ukzM.net]
>>481
>質問3)
店の弁当を減らす処理と
客の弁当を増やす処理を同時に行う

>質問4)
客クラスの変数で弁当の所有数を表現して
食事メソッドなどで消費したら減らす

店側で帳簿をつけていて
客側でも家計簿をつけているとイメージして
それをプログラムで表現すると
何をすればいいか分かりやすいかも

501 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 20:27:33.35 ID:tjV5ukzM.net]
なお今回は弁当だから店と客の所有数の増減の
つじつま合わせだけやればいいと思うけど

組織間の社員や会員の移動みたいに
個体識別が必要なものが移動する場合は
参照したりIDを振ったりやはり複雑になる



502 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 20:31:16.29 ID:1qhCOQ98.net]
まず図を書いたほうがいいと思う

503 名前:デフォルトの名無しさん [2017/11/06(月) 20:33:36.39 ID:T+apbet3.net]
やろうとしていることがシミュレーションゲームだよな。






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

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

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