- PR -

入力するメソッド、表示するメソッドについて

投稿者投稿内容
のん
会議室デビュー日: 2005/10/23
投稿数: 4
投稿日時: 2005-11-13 14:22
いつもお世話になっています。
現在独学でJavaを勉強していて、私は文系なので、プログラミングのことを質問できる友達や先輩がいないので、皆様にご教授おねがいします。

私の使っている本の演習問題
名前(String name[20])、性別(boolean man)、年齢(int age)、身長(float height)をフィールドとして持ち、それらを入力するメソッド、表示するメソッドを持つクラスPersonを定義し、オブジェクトに名前、性別、年齢、身長を入力して表示するプログラムを作成せよ。ただし、main()メソッドはPersonクラスに持たせる。

入力するメソッドと表示するメソッドがよく分からないのですが・・・
一応キーボードから読み込みして表示するプログラム作てみたのですが、これだと入力するメソッドと表示するメソッドが・・・

import java.io.*;
class Person
{
String name; //名前
boolean man; //性別
int age; //年齢
float height; //身長

public static void main(String args[]) throws IOException{
Person p1 = new Person();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("名前を入力してください。");
p1. name=br.readLine();

System.out.println("性別を入力してください。man or woman");
String str=br.readLine();
if(str.equals("man")){
p1.man = true;
}
else{
p1.man = false;
}


System.out.println("年齢を入力してください。");
String str3 =br.readLine();
p1.age=Integer.parseInt(str3);

System.out.println("身長を入力してください。単位:m");
String str4=br.readLine();
p1.height = Float.parseFloat(str4);


System.out.println("名前:"+p1.name);
if(p1.man == true){
System.out.println("性別:男性");
}
else{
System.out.println("性別:女性");
}
System.out.println("年齢:"+p1.age);
System.out.println("身長:"+p1.height);
}
}



[ メッセージ編集済み 編集者: のん 編集日時 2006-03-10 21:27 ]
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2005-11-13 16:39
A1. たぶんそうでしょうね。本当にJavaの本なのかあやしい誤植ですね。
A2. 「入力する部分」と「表示する部分」は書けているので、別メソッドに分けましょう。
さて、別メソッドの作り方はその問題以前に習っているでしょうか ? main()とはどのような情報をやりとりしましょうか。考えてみてください。

プログラムの文章について http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=25915&forum=12
と同じ問題ですよね ? 「本の演習問題」ということでしたら書名を紹介していただけますか ? そのほうが、その問題の出題意図とかがよく伝わるのですが...。
# 本当に「String name[20]」のような誤植があるのでしたらそしてその本は「買ってはいけない本」リスト入りですね。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-13 16:42
引用:

のんさんの書き込み (2005-11-13 14:22) より:

Q1.名前(String name[20])で配列になっていますが、これって間違えですよね?


ひどい間違いですね。

引用:

Q2.入力するメソッドと表示するメソッドがよく分からないのですが・・・
一応キーボードから読み込みして表示するプログラム作てみたのですが、これだと入力するメソッドと表示するメソッドが・・・


入力するメソッド -> メソッドの引数にフィールドを示す値を持ち格納する
表示するメソッド -> 戻り値でこれらのフィールドを示す値を "出力" する

という考えの方が判りやすいでしょう。
今の状態はフィールドに直接値を渡しています。
フィールドを隠蔽化して、メソッド越しに渡すようにしてみると判るでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
のん
会議室デビュー日: 2005/10/23
投稿数: 4
投稿日時: 2005-11-13 18:21
>>びしばし様
返信ありがとうございます。


>>じゃんぬねっと様
またまた返信ありがとうございます。
入力の
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
p1. name=br.readLine();
は違う本など参考にしてやっと先ほどのプログラムができました。

先ほどの問題の次の問題が、
Personクラスに名前、性別、年齢、身長をパラメータとしてもつコンストラクタPerson()を付け加えて作動することを確認せよ。
という問題があり、この問題を先に解いたのですが、
class PersonKai{
String name;
boolean man;
int age;
float height;

void Man(){
man = true;
}

void Woman(){
man = false;
}

void menOrWomen(){
if( man == true )
System.out.println("性別: male");
else System.out.println("性別: female");
}

void setName(String newName){
name = newName;
System.out.println("名前: " + name);
}

void setAge(int newAge){
age = newAge;
System.out.println("年齢: " + age);
}

void setHeight(float newHeight){
height = newHeight;
System.out.println("身長: " + height + " m");
}
}
class TestPeson{

public static void main(String[] args){
PersonKai p1 = new PersonKai();

p1.setName("non");
p1.Woman();
p1.menOrWomen();
p1.setAge(21);
p1.setHeight(1.55f);
}
}
先ほどの問題もこのように考えれば良いのでしょうか?






[ メッセージ編集済み 編集者: のん 編集日時 2006-01-15 16:23 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-13 19:25
引用:

のんさんの書き込み (2005-11-13 18:21) より:

Personクラスに名前、性別、年齢、身長をパラメータとしてもつコンストラクタPerson()を付け加えて作動することを確認せよ。


これは、こういう意味です。

コード:

    Person p = new Person("中博俊", enumSex.Male, 29, 183);


これらを引数として持つコンストラクタがないようですね。

それと、set_ と同様に get_ も実装したいところですね。(^-^*)
もう少しですから、頑張ってください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Cafe
会議室デビュー日: 2005/09/10
投稿数: 12
投稿日時: 2005-11-13 19:46
失礼します。

引用:

私の持っている本は、間違えが本当に多いです。
章問題なのにまだやっていない章がでてきたり、サンプルナンバーが間違っているのは日常茶飯事、説明文なども間違っていたり、全く信用できません。
『はじめてのJavaプログラミング』著 三浦憲二郎 朝倉書店 です。



φ(.. )メモメモ
その本、ブラックリストに入れておきます。(^^;;;


私の場合、このような演習問題は基本的に好きではないので(何通りも答えが考えられる為、JAVAに詳しくない人間からすれば、模範解答=正(=それ以外の答えを思いつかなくなる)になる為)、すぐに答えを見てしまう人間なのですが、一応、私なりに解釈を入れるとこうでしょうか・・

・以下の要件を満たすPersonクラスを作成せよ。
1.Personクラスはmainメソッドを持つ。
2.Personクラスのフィールドには、名前・性別・年齢・身長の変数を持たせる。
3.名前はString型、性別はboolean型、年齢はint型、身長はfloat型の変数とする。
4.それぞれのフィールドに対応したsetterメソッドを作成する。
5.フィールドに設定された値を表示する為のメソッド(仮にshowメソッドとします)を作成する。
その際、性別は「true」の場合はman、「false」はwomanと表示する。

6.mainメソッド内では、
a.自身(Personクラス)のオブジェクト生成を行う。
b.それぞれのsetterメソッドを呼び出す。(値はコードに直接記入で良い)
c.showメソッドの実行。

以上。


・・・と解釈して作成すると良いかもしれません。

(@IT先輩方、「いや、それ違うだろ!」というチェックありましたらお願いしますm(_ _)m)


// 追記ここから
後で上の書き込みを見返して、本来の質問と多少論点がずれてたみたいで申し訳ないです。
そして後で気が付いたのですが、
引用:

のんさんの書き込み (2005-11-13 18:21) より:

Personクラスに名前、性別、年齢、身長をパラメータとしてもつコンストラクタPerson()を付け加えて作動することを確認せよ。
という問題があり



作動することを確認せよ。」って・・・
確認って事は、特に変更せずに値を渡すコンストラクタを作成すれば動作可能ってことですよね・・・全部staticで作成しろってことでしょうか・・・
なんていうか・・すごい課題だな〜と・・・(^^;;;

なので、全てのメソッドとフィールド変数をstaticとして、コンストラクタの処理でsetterメソッドを呼び出して値を設定するようにしてあげると良い(=その問題の回答)のかもしれないですね。

// 追記ここまで

それでは、のん様、頑張ってください!

[ メッセージ編集済み 編集者: Cafe 編集日時 2005-11-13 22:36 ]

[ メッセージ編集済み 編集者: Cafe 編集日時 2005-11-13 22:36 ]
まいるどきゃっと
大ベテラン
会議室デビュー日: 2004/08/12
投稿数: 135
お住まい・勤務地: 群馬
投稿日時: 2005-11-14 12:54
悪書で勉強するのは時間の無駄なので、ぽいっと捨てちゃいましょう

引用:

のんさんの書き込み (2005-11-13 14:22) より:

現在独学でJavaを勉強していて、私は文系なので、プログラミングのことを質問できる友達や先輩がいないので、皆様にご教授おねがいします。



ということでしたら、私は以下の本をお勧めします。単なる文法の説明で終始していないのがいいところです。
・「改訂版 Java言語プログラミングレッスン(上)(下)」結城 浩著 ソフトバンククリエイティブ
さる
ぬし
会議室デビュー日: 2005/07/14
投稿数: 276
お住まい・勤務地: 実家戻ったw
投稿日時: 2005-11-14 13:05
失礼します。

引用:

a.自身(Personクラス)のオブジェクト生成を行う。



ちょっと疑問に思ったので、
オブジェクトの生成と
インスタンスの生成って言葉の意味って同じでしたっけ?

スキルアップ/キャリアアップ(JOB@IT)