【Java】教授もフンガッフフ簡単な問題もOOPでイケ【宿題】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG前スレ
http://pc2.2ch.net/test/read.cgi/tech/1040552821/
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG確かに俺は立てたいって言ったさ
でもさ、ネタ ネタだったのにさぁー
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNGOOPを勘違いしてるやつにはできないコード見れるな
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNGこのスレの定義
どんなに簡単な問題であろうと、OOP的な解釈で問題を解く
どんなにクラスが多くなろうとOOP的な方向性で解く
そうすれば、回答者に対して突っ込みいれるときも
一部分ですむから、最終的にはレスの見通しもよくなる
教授がフンガッフフとなっってしまうようなコードが書ければお前の勝ちだ
//以上のテンプレをみなが忘れた頃に貼りなおしてください または 誘導
0010デフォルトの名無しさん
NGNGつっこまれてもいいじゃないか?
自分も初心者の気持ちでコードをうpし合おう
0011デフォルトの名無しさん
NGNGつっこみだけでコードを載せない、あるいはココがこうだからダメと
はっきり言わんやつは放置
そのような、お勉強にもならないレス帰してくるやつはクソ
001212
NGNGclass ValidateException extends Exception {
public ValidateException() {
super();
}
public ValidateException(String message) {
super(message);
}
}
class State {
private String message;
public State(String message) {
this.message = message;
}
public void print() {
System.out.println(message);
}
}
001312
NGNGimport java.io.IOException;
import java.io.InputStreamReader;
public class OOP1 {
private final int MIN = 0;
private final int MAX = 1000;
private final String HIT_PREFIX = "正解:";
private final String HIT_SUFFIX = "回目";
private final String LARGER = "より大きな数です";
private final String SMALLER = "より小さな数です";
private final String REQUESTNUMBER = "数値を入力してください";
private final String UNJUSTVALUE = "0以上1000以下の数値を入力してください";
private int count;
private int answer;
private boolean isContinue;
public void execute() throws IOException {
String inputNumber;
State state;
while (isContinue && (inputNumber = new BufferedReader(new InputStreamReader(System.in)).readLine()) != null) {
int input;
count++;
try {
input = validate(inputNumber);
state = new State(check(input));
}
catch (ValidateException e) {state = new State(e.getMessage());}state.print();}}
001412
NGNGpublic String check(int input) {
if (input > answer) {
return input + SMALLER;
}
else if (input < answer) {
return input + LARGER;
}
else {
isContinue = false;
return HIT_PREFIX + count + HIT_SUFFIX;
}
}
public int validate(String inputNumber) throws ValidateException {
int num;try {
num = Integer.parseInt(inputNumber);
if (num < MIN || MAX < num) {
throw new ValidateException(UNJUSTVALUE); }}
catch (NumberFormatException e) {
throw new ValidateException(REQUESTNUMBER); }return num;}
public OOP1() {
isContinue = true;count = 0;
answer = (int) (Math.random() * 1001);}
public static void main(String[] args) {OOP1 oop = new OOP1();
try {oop.execute();}catch (IOException e) {e.printStackTrace();}}}
0015デフォルトの名無しさん
NGNGオブジェクトそのものを理解していないだろ?
前スレで上げたが、ステージ(main)、司会者、問題提示者、回答者
の4つのクラスに分けてこそ、もんモノのOOPだよ。
こうすればネットワーク多人数同時プレイも容易に可能になるし。
文句ある? なら俺がサンプル載せてやるが。
0017デフォルトの名無しさん
NGNGお前、whileの内側にtry-catchを置くと激重になるぞ。
yrt-catchはwhileの外側で囲んどけ。
しかもcatchすべき例外にExceptionクラスも追加しておけよ。
001812
NGNG>お前、whileの内側にtry-catchを置くと激重になるぞ。
>yrt-catchはwhileの外側で囲んどけ
ええ、ですがこの場合、外に書くと
例外発生時におわっちゃいますので、・・・どう書きます?
関係ないのですがこのwhileループをどこに置くかもかなり迷いますね
で、>>15の言うように分けるのいいのですがこういうループが必須のプログラムの場合
難しいんですよね、延々と回すならまだいいのですが
当たったら、プログラム終了させないといけないので・・・
>>15さんがどういう風につくるのか楽しみです
>しかもcatchすべき例外にExceptionクラスも追加しておけよ。
コレが分からないのですが
前述の「外側に書いたとき」にExceptionクラスも追加するってことなのでしょうか?
それとも、「Exceptionクラスも追加」っていうのはtrycatchのお決まりなのですか?
また、その理由は?
0019どれどれ
NGNGpublic class NumGame {
ProblemPresentationPerson probPerson = new ProblemPresentationPerson();
Respondent resPerson = new Respondent();
Chairman chairman;
public static void main(String[] args) {
try {
new NumGame().run();
} catch (Exception e) {
e.printStackTrace();
}
}
public NumGame() {
chairman = new Chairman(probPerson, resPerson);
}
public void run() throws NumberFormatException, IOException {
chairman.statr();
}
}
0020どれどれ
NGNGimport java.io.IOException;
import java.io.InputStreamReader;
public class Respondent {
public int answer() throws NumberFormatException, IOException {
BufferedReader bw = new BufferedReader(new InputStreamReader(System.in));
return Integer.parseInt(bw.readLine());
}
}
0021どれどれ
NGNGstatic final int MAX_VALUE = 1000;
static final int MIN_VALUE = 0;
public static final int SMALL = 0;
public static final int LARGE = 1;
public static final int HIT = 2;
public static final int OUT_OF_RANGE = 3;
int answer;
public void genProblem() {
answer = (int) (Math.random() * MAX_VALUE);
}
public void presentation() {
System.out.println(MIN_VALUE + "から" + MAX_VALUE + "間の数を当ててください");
}
public int check(int answer) {
if (!(answer > MAX_VALUE || answer < MIN_VALUE)) {
if (this.answer == answer) {
return HIT;
} else if (this.answer > answer) {
return SMALL;
} else if (this.answer < answer) {
return LARGE;
}
}
return OUT_OF_RANGE;
}
}
0022どれどれ
NGNGpublic class Chairman {
ProblemPresentationPerson probPerson;
Respondent resPerson;
Counter counter = new Counter(1);
private final String HIT_PREFIX = "正解:";
private final String HIT_SUFFIX = "回目";
private final String LARGER = "より大きな数です";
private final String SMALLER = "より小さな数です";
private final String UNJUSTVALUE = "0以上1000以下の数値を入力してください";
public Chairman(ProblemPresentationPerson probPerson, Respondent resPerson) {this.probPerson = probPerson;this.resPerson = resPerson;}
public void statr() throws NumberFormatException, IOException {
probPerson.genProblem();
probPerson.presentation();
int result = 0;
int answer = 0;
while ((result = probPerson.check((answer = resPerson.answer())))
!= ProblemPresentationPerson.HIT) {
switch (result) {
case ProblemPresentationPerson.LARGE :
System.out.println(answer + SMALLER);
break;
case ProblemPresentationPerson.SMALL :
System.out.println(answer + LARGER);
break;
case ProblemPresentationPerson.OUT_OF_RANGE :
System.out.println(UNJUSTVALUE);
break;
}
counter.incr();
}
System.out.println(HIT_PREFIX + counter.get() + HIT_SUFFIX);}}
0023どれどれ
NGNGpublic class Counter {
int count = 0;
public Counter(int count) {
this.count = count;
}
public Counter() {
}
public void incr() {
count++;
}
public void decr() {
count--;
}
public int get() {
return count;
}
public void reset(int count) {
this.count = count;
}
public void reset() {
this.count = 0;
}
}
002412
NGNGなるほどそう言うことですか
ほんとのOOPっていうきがします
しかしコレでは
NumberFormatExceptionでプログラムが
終了してしまいます
その辺が難しいのですよねコレ
このコードでもうチョイ考えて見ます
なにかあればかいてください
0025どれどれ
NGNG002615
NGNGしばらく時間クレ。
出題者&司会者=サーバー
回答者=クライアント
という形。
サーバーは起動後、問題を製作しクライアントからの接続を待つ。
クライアントから接続要求がくると現在の問題をクライアントへ送る。
クライアントから回答を受け付ける。
正解者が出ると現存の他のクライアントをすべて蹴り、
新規に問題を製作、再び接続待ちにする仕組み。
リスト中にOOPぽくない部分があるけど勘弁してや
0027デフォルトの名無しさん
NGNG今は一人用の数当てゲームなんだからさ?
0028デフォルトの名無しさん
NGNGたとえば、ひとつのHelloWorldやるにしても
JavaSpaceからオブジェクト持ってきそうなやつ出てこられてもかなわんな
OOPが主体なんだから・・・だ、だれがネットワークなんて・・・
Javaの技術を使いまくるのが目的じゃないよ、OOPでやればいいのよ
ま、いいけど
0029どれどれ
NGNGpublic static void main(String[] args) {
new HelloApp().run();
}
public void run() {
HelloPrinter.print();
}
}
class HelloGenerator {
static final String HELLO = "Hello world";
public String execute() {
return HELLO;
}
}
class HelloPrinter {
public static void print() {
System.out.println(new HelloGenerator().execute());
}
}
OOのHello world… これくらいが妥当??
0030デフォルトの名無しさん
NGNG月曜から金曜までの講義のコマ数をint型の配列変数にいれ、繰り返しを用いて「○曜日は○コマの講義があります」と
表示せよ。また1週間のコマ数の合計と1日平均コマ数を計算し、表示せよ。そして合計コマ数が12未満であれば、「コマ数は少ないです」
と表示、12以上15未満であれば「コマ数は数は普通です」と表示し15以上なら「コマ数は多いです」と表示する、プログラムをお願いします。
こんなの
月曜は1コマの講義があります。
火曜は3コマの講義があります。
水曜は3コマの講義があります。
木曜は5コマの講義があります。
金曜は2コマの講義があります。
全部で14コマの講義があります。
1日平均2.8コマの講義があります。
コマ数は普通です。
寂れてきてるので次のネタ!
0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNGおいこの問題は、「繰り返しを用いて」ってかいてるので
もうこの時点でOOP的にやるにはちょっと難しいよな
0033が@Mたんちゅき p3204-ipad12fukuokachu.fukuoka.ocn.ne.jp
NGNGおおまかな設計を書いてみた。
まず一週間分の講義データを格納しておくテーブルクラスを作成。
つぎに講義を数え上げるカウンタークラスを作成。
あとは、カウンターをテーブルの中に放り込んで、
「繰り返し」などをつかってカウンターに講義のコマ数などを数え上げさせて、
「○曜日は○コマの講義があります」などの課題中で指定された文を表示させる。
// この処理はVisitorパターンっぽくすると、おもしろいかも。
もちろん、テーブルクラスに格納する講義データも「講義クラス」としてクラス化。
この講義クラスには、講義をする担当教員や、受講生や、教室などの情報を格納。
さらに、教員クラスや、教室クラスというのも作ったりするとよさそう。
ついでに受講生ひとりひとりもオブジェクト化しておくと、
受講生の出席簿とか、成績の一覧表とかも、いろいろと生成できそうで便利。
// とりあえず、これらは抽象的なクラスにしておくとしても。
なお出題文自体には「月曜から金曜までの講義のコマ数をint型の配列変数にいれ」ともあるので、
int型の配列も、テーブルクラスなどに持たせておく必要がありそう。
ちょっと無理矢理だけど、テーブルクラスに新たな講義を格納したり、取り除いたりすると、
このint型の配列もこれに連動して、自動的に配列内の値を増減させればいいかな。
// int型の配列変数はカウンタークラスに持たせておくという解決法もあるとはおもうけど。
0034山崎 渉
NGNG0035時代は個人主義
NGNGhttp://osaka.yomiuri.co.jp/new_feature/kokoro/jyuku06.htm
社会福祉法人「いのちの電話」の斎藤友紀雄事務局長は、「『いじめ』は
世界中で起きていますが、日本の場合、その一番大きな原因は、異質なも
のを認めないという精神文化に根ざしていると思います。偏差値教育や核
家族化によって孤独を強いられた子どもたちは、必死に自分の居場所を求
めるのですが、性格や能力が集団と調和しない子は、集団から排除されて
しまう。つまり、村意識が働いて、村八分にされてしまうのです」と語る。
<差別いじめをなくそう>
日本国憲法(国のあり方を定めた法)は、個人主義を定めています。
それは、戦前、全体主義だったわが国が、悲惨な戦争に突入し敗戦したと
いう苦い経験の反省に基づきます。
別にみなが一緒じゃなくてもいいでしょ?
みなが一緒じゃないと安心できない集団がいて、その集団が
異質分子を排斥しようとする。
0036時代は個人主義
NGNGA型は仲間を作ろうとする時、自分と価値観やリズムが同じ人ばかりを引
き寄せて、波長の合わない人々を避けてしまう傾向があります。そこには、A型
の、周囲に波風を起こしたくない、できるだけ安定した環境を作っておきたい、と
いう思いが働くからです。そんな風にしているうちに、気がついてみたらA型ば
かりの集団になっていた、ということはよくあります。
価値観がある程度同じ方向に向かっていることは大切なことですが、あまり同じ
ような考えの人ばかりが集まることは危険です。和気合いあいのムードにすっ
かり慣れて、「井の中の蛙」になってしまう恐れがあるからです。
A型は、周囲と協調して現状を安定させたい面と、常に向上心を持って現状を
脱皮したい面の両方を、バランスよく保っていくことで、上手に成長していくので
す。
自分と違う考えの人は、衝突も激しく起こるけれど、自分に良い刺激を与え、視
野を広げることにもなるということを考えてみて下さい。
また、人間関係にもけじめをつけようとするA型は、お客と店員など、立場で態
度を大きく変えたりすることがありますが、行き過ぎれば、やはり好ましくない行
動表現に見えます。
0037デフォルトの名無しさん
NGNG「Javaの鉄則」を読め
0038デフォルトの名無しさん
NGNGおまえ、話になってる問題読んでないだろ?
鉄則に当てはめられないから困ってる
0039山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNG0044ところてん
NGNG方法を教えてください。読み込む画像は、GIFかJPEGです。
一応ネットで調べてみましたが、全部アプレットでの表示でした。
すごい初歩的な質問ですが、お願いしますm(_ _)m
0045デフォルトの名無しさん
NGNGそれをmain()でnewするだけでよろしい。
0046デフォルトの名無しさん
NGNGに見えた
■ このスレッドは過去ログ倉庫に格納されています