if文とオブジェクト指向についての質問

このQ&Aのポイント
  • 質問者は、テストの点数を表すクラスを作成しているが、if文の使い方やコンストラクタ内でのif文の配置、if文とelse文の内容について疑問を持っている。具体的には、コンストラクタ内にif文を配置することはできるか、if文の中身やelse文の中身はどのようにすればいいかわからないということである。
  • 質問者は、プログラムの出力が「平均点は40点です」となっているが、その後の処理がわからず困っている。どのような処理が必要なのか、具体的にはif文内の条件や出力の内容について教えてほしいということである。
回答を見る
  • ベストアンサー

if文とオブジェクト指向についての質問

テストの点数を表すクラスを作成していて、 ・フィールド(field) – private int math: 数学の点数 – private int eng: 英語の点数 – private int prog: プログラミングの点数 •・メソッド(method) – public void setMath(int m): 数学の点数を設定する. – public void setEng(int e): 英語の点数を設定する. – public void setProg(int p): プログラミングの点数を設定する. – public int getMath(): 数学の点数を取得する. – public int getEng(): 英語の点数を取得する. – public int getProg(): プログラミングの点数を取得する. – public double getAve(): 3 科目の平均点を取得する. ・コンストラクタ(constructor) – private ExamScore(): 点数を全て0 にする. – public ExamScore(int m, int e, int p): 点数を設定する. •・クラスが持つべき機能(required function for class) – 点数は全て0~100 点の間とする.(Each score should be set from 0 to 100.) それ以外の点数を指定しようとした際,「点数が範囲外です.」と表示 し,そのフィールドを0 とする.(If setting score is improper, the message ”Out of range.” should be shown and 0 is set as score.) プログラムは,上記クラスを利用して,以下の動作を行う. 点数を指定してオブジェクトを生成する. (Each score is set on each object.) 数学の得点(Math score):-50 点 英語の得点(Eng score):80 点 プログラミングの得点(Prog score):90 点 平均点を取得する.(Get the average score of three subjects.) 平均点を表示する.(Show the average score.) という問題で、 コンパイル成功したのですが 平均点を調べます. 数学の点数を調べます. 英語の点数を調べます プログラミングの点数を調べます. 平均点は40点です. という出力になり、ここから先がわかりません if文はpublic ExamScore(int m, int e, int p)の中に入れていいのでしょうか? また、if文の中身は if(m<0 && e<0 && p<0){ System.out.println(""); System.out.println("WARNING! 点数が範囲外です."); System.out.println(""); でよいのでしょうか? また、elseの中身もわかりません・・・ 疑問点につきまして、ご教授いただけると幸いです。 よろしくお願いいたします。

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • akouryy
  • ベストアンサー率100% (3/3)
回答No.2

「m<0 && e<0 && p<0」だと、「全てが0未満のとき」になります。 正しくは「m<0 || e<0 || p<0」だと思います。 あと、System.out.println を使って改行を出力したいなら、「System.out.println("")」より「System.out.println()」の方が良いです。もしくは、"\n"を使って一行でprintlnしましょう。

参考URL:
http://java.sun.com/javase/ja/6/docs/ja/api/java/io/PrintStream.html#println%28%29
nymnym
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

> if文はpublic ExamScore(int m, int e, int p)の中に入れていいのでしょうか? 入れてよいです。そういう判断をしたのなら。 入れない場合は、点数についての入力値チェックをどこで行うかを別途考える必要があります。そして、ExamScoreで行った場合と比較して、どちらが適切かを評価してみるとよいです。 そういった判断の積み重ねがプログラミングの要となります。

nymnym
質問者

お礼

ありがとうございました。

関連するQ&A

  • 至急!java オブジェクト指向

    昨日、質問させていただいた者です。おかげさまで、試合の状況を出力するプログラムが完成しました。あとはこれをオブジェクト指向のプログラムにしたいので、BSO()、Runner()、Score()のメソッド等を別々のクラスに記述して動作させるようにしたのですが、エラーばかりで起動できませんでした。インターフェースや継承などを使っていただいて構わないので、できれば改良のほうをお願いします。 import java.io.*; public class test1 { public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); int sc=0,bc=0,oc=0,rc1=0,rc2=0,rc3=0,tenA=0,tenB=0,i=0; BSO(sc, bc, oc); Runner(rc1,rc2,rc3); Score(tenA,tenB,i); while(true){ i++; while(true){ System.out.println("ピッチャー、投げた!"); String str=br.readLine(); char hantei=str.charAt(0); if(hantei=='s'){ System.out.println("ストライク!"); sc++; }else if(hantei=='b'){ System.out.println("ボール!"); bc++; }else if(hantei=='o'){ System.out.println("アウト!"); oc++; bc=sc=0; }else if(hantei=='h'){ System.out.println("ヒット!"); bc=sc=0; }else if(hantei=='x'){ System.out.println("ホームラン!"); bc=sc=0; }else{ System.out.println("入力が違います。"); continue; } if(sc==3){ System.out.println("ストライク!バッターアウト!"); oc++; sc = bc =0; }else if(bc==4){ System.out.println("フォアボール!"); sc = bc =0; } if(oc >= 3){ System.out.println("スリーアウト!"); break; } System.out.println("走者は出たか、又は進塁したか?"); String str6=br.readLine(); char kakuninn=str6.charAt(0); if(kakuninn=='y'){ System.out.println("一塁は"); String str2=br.readLine(); char r1=str2.charAt(0); if(r1=='y'){ rc1=1; }else if(r1=='n'){ rc1=0; }else{ System.out.println("入力が違います。"); continue; } System.out.println("二塁は"); String str3=br.readLine(); char r2=str3.charAt(0); if(r2=='y'){ rc2=1; }else if(r2=='n'){ rc2=0; }else{ System.out.println("入力が違います。"); continue; } System.out.println("三塁は"); String str4=br.readLine(); char r3=str4.charAt(0); if(r3=='y'){ rc3=1; }else if(r3=='n'){ rc3=0; }else{ System.out.println("入力が違います。"); continue; } }else{ } System.out.print("得点は? :"); String str7=br.readLine(); int tokuten=Integer.parseInt(str7); if(i%2==1){ tenA=tenA+tokuten; }else{ tenB=tenB+tokuten; } BSO(sc, bc, oc); Runner(rc1,rc2,rc3); Score(tenA,tenB,i); } oc=0; rc1=rc2=rc3=0; BSO(sc, bc, oc); Runner(rc1,rc2,rc3); Score(tenA,tenB,i); if(i==6){ System.out.println("ゲームセット!"); break; }else{ } } Score(tenA,tenB,i); } public static void BSO(int sc, int bc, int oc){ System.out.println("---- BSOカウント ----"); System.out.print("B "); for(int i=1;i<=bc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("S "); for(int i=1;i<=sc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("O "); for(int i=1;i<=oc;i++){ System.out.print("〇"); } System.out.println("\n------------------"); } public static void Runner(int rc1,int rc2,int rc3){ System.out.println("***走者の有無***"); if(rc2==1){ System.out.println(" ▲ "); }else if(rc2==0){ System.out.println("  △ "); } if(rc3==1){ System.out.print("▲  "); }else if(rc3==0){ System.out.print("△  "); } if(rc1==1){ System.out.println("▲"); }else if(rc1==0){ System.out.println("△"); } System.out.println("***************"); } public static void Score(int tenA,int tenB,int i){ if(i==0||i==1||i==2){ System.out.print("1回"); }else if(i==3||i==4){ System.out.print("2回"); }else if(i==5||i==6){ System.out.print("3回"); } if(i==0||i%2==1){ System.out.println("表"); }else{ System.out.println("裏"); } System.out.println(tenA+" "+"-"+" "+tenB); } }

    • ベストアンサー
    • Java
  • if文の実行結果について

    public class Pass02 { public static void main(String[] args) throws IOException { /*入力の準備 */ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); /* 点数の入力 */ System.out.print(\"点数を入力>\"); int tensu = Integer.parseInt(br.readLine()); /* 合格判定 */ if (tensu >= 70) { System.out.println(\"合格です\"); } if (tensu >= 50) { System.out.println(\"再試験です\"); } else { System.out.println(\"不合格です\"); } } } 70点以上が合格、70点未満50点以上が再試験、50点未満は不合格と実行したいのですが、 70点を入力すると合格、再試験と実行されます。 どこが間違ってるのでしょうか?

    • ベストアンサー
    • Java
  • javaプログラムについて

    クラスの出席番号順にString型配列nameに名前が、 * int型配列scoreにテストの点数が格納されています。 * * 出席番号1 大悟 74点 * 出席番号2 琴音 70点 * 出席番号3 勇輝 88点 *       ・ *       ・ *       ・ *       ・ *       ・ * * このクラスの最高得点者の名前と、最低得点者の名前を * 表示するメソッドを作成してください。 * */ public class MethodAdd8 { public static void main(String[] args){ String[] name = {"大悟", "琴音","勇輝","葵","綾乃","和樹","凛","愛花","結愛","孝太郎"}; int[] score = {74,70,88,82,96,64,80,61,72,79}; //メソッドの呼び出し score("綾乃",1); score("愛花",2); } //ここにメソッドを追加してください public static void score(String name,int score){ if(score==1){ System.out.println("綾乃"); }else{ System.out.println("愛花"); } } } この配列から、最高得点者と最低得点者は分かるので上記のようにしたところ、 score配列の中から最高得点者と最低得点者を探すように、と言われました。 考え方やヒントなどをお願いします。

  • Javaプログラムについての質問です。

    * クラスの出席番号順にString型配列nameに名前が、 * int型配列scoreにテストの点数が格納されています。 * * 出席番号1 大悟 74点 * 出席番号2 琴音 70点 * 出席番号3 勇輝 88点 * ・ * ・ * ・ * ・ * ・ * * このクラスの最高得点者の名前と、最低得点者の名前を * 表示するメソッドを作成してください。 * */ public class MethodAdd8 { public static void main(String[] args){ String[] name = {"大悟", "琴音","勇輝","葵","綾乃","和樹","凛","愛花","結愛","孝太郎"}; int[] score = {74,70,88,82,96,64,80,61,72,79}; int maxind = saikouind(score); System.out.println(name[maxind]); int minind = saiteiind(score); System.out.println(name[minind]); } //ここにメソッドを追加してください public static int saikouind(int[] score) { int ind = 0; int max = score[0]; for (int i = 1; i < score.length; i++) { if (score[i] > max) { ind = i; max = score[i]; } } return ind; //値を返す } public static int saiteiind(int[] score) { int ind = 0; int min = score[0]; for (int i = 1; i < score.length; i++) { if (score[i] < min) { ind = i; min = score[i]; } } return ind; //値を返す } これで名前は表示されるようになったのですが、 これをreturnを返さず表示するにはどうすればよいでしょうか? 色々試しているんですが、何故か名前が表示されなくなります。 丸投げしてしまうのですが、どうか知恵をお貸しください。 よろしくお願い致します。

  • javaプログラムについて

    * クラスの出席番号順にString型配列nameに名前が、 * int型配列scoreにテストの点数が格納されています。 * * 出席番号1 大悟 74点 * 出席番号2 琴音 70点 * 出席番号3 勇輝 88点 *       ・ *       ・ *       ・ *       ・ *       ・ * * このクラスの最高得点者の名前と、最低得点者の名前を * 表示するメソッドを作成してください。 * */ public class MethodAdd8 { public static void main(String[] args){ String[] name = {"大悟", "琴音","勇輝","葵","綾乃","和樹","凛","愛花","結愛","孝太郎"}; int[] score = {74,70,88,82,96,64,80,61,72,79}; //メソッドの呼び出し int max=saikou(score); //最高得点メソッドへ System.out.println(max); int min=saitei(score); //最低得点メソッドへ System.out.println(min); } //ここにメソッドを追加してください public static int saikou(int[] score){ //最高得点者メソッド int max=score[0]; for(int i=1; i<score.length; i++){ if(score[i]>max) max=score[i]; } return max;//値を返す } public static int saitei(int[] score){ //最低得点メソッド int min=score[0]; for(int i=1; i<score.length; i++){ if(score[i]<min) min=score[i]; } return min;//値を返す } } これで最高得点と最低得点は表示されるのですが、ここからどうやって最高得点者「綾乃」と最低得点者「愛花」を表示するのか分かりません。どなたか御教授お願い致します。

    • ベストアンサー
    • Java
  • javaのプログラムについて

    以下のプログラムを実行するとエラーが起こるのですが原因はなんですか? class Tokuten { private String name; private int eng; private int math; private int sci; public void setData(String n, int e, int m, int s) { if(g>0 && g <1000){ name = n; eng = e; math = m; sci = s; } void show() { System.out.println("受験生の名前は" + name + "です。"); System.out.println("英語は" + eng + "点です。"); System.out.println("数学は" + math + "点です。"); System.out.println("理科は" + sci + "点です。"); } } class TokutenMain { public static void main(String[] args) { Tokuten jukensei = new Tokuten(); jukensei.setData("Hanako",81,67,78); jukensei.show(); } }

  • クラスとインスタンスについて

    入社1年目のプログラミング経験0のSEです! Javaのクラスとインスタンスについてぜんぜん理解できません! 下のソースをどうしたらいいのかわからないです。 import java.io.*; class SumAndAvgMain{ public static void main(String argv[]){ BufferedReader r = new BufferedReader(new InputStreamReader(System.in),1); try{ //3教科の得点を入力しintに変換 //SumAndAvgクラスのインスタンスを作成 //合計点及び平均点を出力する。 }catch(IOException e){ System.out.println("例外発生"+e); } } } class SunAudAvg{ public static void main(String args[]){ //各教科の得点用のフィールド int kokugo; int suugaku; int eigo; //SumAndAvgクラスのコンストラクタ SumAndAvg(int kokugo,int suugaku,int eigo){ //フィールドに国語の点数を代入 //フィールドに数学の点数を代入 //フィールドに英語の点数を代入 } //3教科の合計点を求める int getGoukei(){ } //3教科の平均点を求める double getHeikin(){ } }

  • 文が指定されていませんエラーについて

    public class Stack2 { private static int[] stack = new int[50]; private static int ip = -1; //スタックポインター, -1ならデーターなし public static int push ( int inData ) { // データー格納 if (ip == (stack.length - 1)) { System.out.println(\"スタックがいっぱいです\"); } else { stack[++ip] = inData; } } public static int pop ( ) { // データー取り出し if ( ip < 0 ) { System.out.println (\"スタックにデーターがありません\"); return -2147483648; } else { return stack[ip]; } } } 「Stack2.java:10:return 文が指定されていません」コンバイルエラーになります。 どのようにデバックすれば良いのか教えてください。

  • continue文以外で・・・

    以下はcontinue文を使用したソース片なのですが、このソースをcontinue文以外の方法で表現することは出来るのでしょうか? もし他にも表現方法があれば、教えていただきたいのですが・・・。 int[] score = {71, 90, 10, 84, -7, 99}; int sum = 0; for (int i=0; i<score.length; i++){ if (score[i] < 0){ continue; } sum += score[i]; } System.out.println("合計は" + sum "です。");

    • ベストアンサー
    • Java
  • java for文、if文を使っての三角形

    例:1 23 456 78910 ・・・・・・のようにひょうじさせるプログラムを作成するのに、for文とIf文を使っての三角形を   作成したいのですが、If文の条件式が分からないのとどうしたら、上記のようなプログラムが   出来るのか教えてください。お願いします。 public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ // 行に表示させる個数を表現するための変数がないため今回、新たに変数を用意する。 int a = 1; //行の終わりを改行して1増やすための変数がないため今回、新たに変数を用意する。 int b = 1; // 1~100までの数字を用意する。 for (int i = 1; i <= 100; i++) { //変数iをSystem.out.printを使って変数iをコンソールの中に出力させる。 System.out.print(i); //System.out.println("")を使って改行する。 System.out.println(" "); //変数iに1増加して数字を順番にする。 i++; if(a <= i){ System.out.print(a);

専門家に質問してみよう