QA@IT

javaのプログラミングに関する質問です。

3444 PV
/* クラスの出席番号順に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; //値を返す
   }
}

この方法で名前が表示されるようになったのですが、この表示を戻り値無しで表示する場合、どのようなプログラムになるでしょうか?思いつく事をしては見たものの、全く表示されず困っています。丸投げに近い形で非常に無様ではあるのですが、どなたか助けていただけないでしょうか?

  • 回答に追記しました。 -

回答

戻り値なしというのは、saikouindやsaiteiindをvoidにしてプログラムを作るってことですかね?
saikouindとsaiteiindにscoreだけでなくnameも一緒に渡せば、
名前と得点を各メソッド内で出力できますね。

returnしないでそこで出力してしまえばいいです。


この手の質問に、あまりそのものを書くのは良くないとは思うんですが前回ヒントだけでかけたという事で、今回だけ。

試してみてダメだったのであればできるだけそれを提示して欲しかったですね。たとえコンパイルエラーだとしても。

新しいメソッドを用意ししたので、mainから以下の様に呼んでください。

    saitei_out(score, name);
  public static void saitei_out(int[] score, String[] name) {
    int ind = 0;
    int min = score[0];
    for (int i = 1; i < score.length; i++) {
      if (score[i] < min) {
        ind = i;
        min = score[i];
      }
    }
    System.out.println("min");
    System.out.println(name[ind]);
    System.out.println(score[ind]);    
  }

こんな感じに書けるんじゃないでしょうか。実行はしてみていません。
エラーでて自分で直せない様ならコメントできいてください。
出力部分はあえて単純な出し方にしてます(3回 println)。

インデックスとるのはできてたので出力したのと、引数増やしたのと、voidにしたぐらいです。

何がダメだったかに気づけたらそれをコメントしておいてください。
(教える上で気を付けるポイントの参考になるので)

編集 履歴 (1)
  • flied_onion様、回答ありがとうございます。考え方としてはその通りで御座います。nameも一緒に渡すと言う事は、saikouind(score);の所にnameも引数として入れてやる、という事でいいのでしょうか?
    もし宜しければですが、saikouindかsaiteiindかどちらかのメソッド内で、名前と点数を出力して頂けないでしょうか?図々しくて申し訳ありません。
    -
  • flied_onion様の回答と自分のミスを照らし合わせてみて、System・・・で出力する時、maxとminに惑わされて、ひたすら点数の方を出力しようとしていたようです。我ながら、こんなバカバカしい事で質問してしまって。。。という感じです。しかし次回からはよく確認して、このようなミスをしないようにしていこうと思います。今回は本当にありがとう御座いました。 -
  • ミスは誰にでもあるのでしょうがないですね。ある程度、慣れやパターンといった部分もあります。ゆくゆくはミスに気づきやすい(読みやすい)コードがかけるようになるといいですね。 -

最高得点・最低得点が複数人いた場合は抜けてますのでそこは頑張ってやってみましょう。


おまけです。
私が参考コードを書くとしたらこんな感じになります。
まぁ、これパクったら先生は気づくでしょうから載せてみます。
偉そうに書くほどきれいなコードではないですが参考までに。

細かいところは置いといて、早い段階から newすることをやってみるといいですよ。

public class MethodAddFO {

    public static void main(String[] args) {
        String[] name = { "大悟", "琴音", "勇輝", "葵", "綾乃", "和樹", "凛", "愛花", "結愛",
                "孝太郎" };

        int[] score = { 74, 70, 88, 82, 96, 64, 80, 61, 72, 79 };

        // メソッドの呼び出し
        MethodAddFO ma = new MethodAddFO(score, name);
        ma.printMaxScoreStudents();
        ma.printMinScoreStudents();     
    }

    // ここにメソッドを追加してください
    private int[] scores;
    private String[] names;

    public MethodAddFO(int[] scores, String[] names){
        this.scores = scores;
        this.names = names;
    }

    public void printMaxScoreStudents(){
        int max = getMaxScore();        
        System.out.println("Highest Score:" + max);
        printSpecifiedScoredStudents(max);
    }

    public void printMinScoreStudents(){
        int min = getMinScore();        
        System.out.println("Lowest Score :" + min);
        printSpecifiedScoredStudents(min);
    }

    private void printSpecifiedScoredStudents(int score){
        for(int i=0; i < this.scores.length; i++){
            if(this.scores[i] == score){
                System.out.println("  " + names[i]);
            }
        }       
    }

    private int getMinScore(){
        int min = scores[0];

        for(int i=0; i<scores.length; i++){
            if (min > scores[i]) min = scores[i];
        }
        return min;
    }

    private int getMaxScore(){
        int max = scores[0];

        for(int i=0; i<scores.length; i++){
            if (max < scores[i]) max = scores[i];
        }
        return max;
    }
}
編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。