Javaでfor文を書き換えて出力を変更する


こんにちは、Javaについて質問です。
https://gist.github.com/AuroraNorthernQuarter/196c7a8fb85fe967f5a5ecacf6a5d50e
に、コードがあります。
現状、コードを実行して得点を入れると、

------------------
得点を入力してください: 76
もう少し頑張りましょう。
橋本:166.3cm
高杉:159.1cm
佐藤:177.4cm
・・・
------------------

のような結果が返されると思います。
この結果が出てくるのは、

for (int i = 0; i <= 2; i++) {
System.out.println(name[i] + ":" + height[i] + "cm");
sum = sum + height[i];

と、for文で定義されているからだと思いますが。
このfor文を書き換えて、

------------------
得点を入力してください: 76
もう少し頑張りましょう。
橋本:
高杉:159.1cm
佐藤:177.4cm
橋本:166.3cm
高杉:
佐藤:177.4cm
橋本:166.3cm
高杉:159.1cm
佐藤:
・・・
------------------

のような出力結果は出せないでしょうか。
for文に出てくる変数が、今は"i"だけですが、2つになっても構いません。
よろしくお願い致します。

回答の条件
  • 1人20回まで
  • 登録:
  • 終了:2018/10/27 09:16:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rsc96074 No.2

回答回数4503ベストアンサー獲得回数437

ポイント400pt

 こちらは参考になるでしょうか。前回のを雛形にしました。

package testprogramm;

import java.util.Scanner; 

public class Sample { 

    static void Disp(String[] name, double[] height){
        int n = name.length;
        double sum = 0;
        for (int i = 0; i < n; i++) { 
            for (int j = 0; j < n; j++){
                System.out.println( name[j] + ":" + ((i==j)? "" : height[j] + "cm") ); 
            }
            sum = sum + height[i];
        }
        System.out.println("平均:" + sum/n+ "cm");
    }
    
    public static void main(String args[]) {

        Scanner scan = new Scanner(System.in); 

        while (true) { 
            System.out.print("得点を入力してください: "); 
            // キーボードから整数の入力を受け取る 
            int score = scan.nextInt(); 

            if (score > 90) { 
                System.out.println("おめでとう! 合格です"); 
                String name[] = new String[3]; 
                double height[] = new double[3]; 
                double sum = 0; 
                name[0] = "鈴木"; 
                name[1] = "杉山"; 
                name[2] = "田中";  
                height[0] = 168.7; 
                height[1] = 173.4; 
                height[2] = 155.8; 
                Disp(name,height); 
                break; 
            } else if (score >= 60) { 
                System.out.println("もう少し頑張りましょう。"); 
                String name[] = new String[3]; 
                double height[] = new double[3]; 
                double sum = 0; 
                name[0] = "橋本"; 
                name[1] = "高杉"; 
                name[2] = "佐藤";  
                height[0] = 166.3; 
                height[1] = 159.1; 
                height[2] = 177.4; 
                Disp(name,height);
                break; 
            } else if (score < 0) { 
                break; 
            } 
        }
        scan.close(); 
    }
}
他1件のコメントを見る
id:rsc96074

 Disp()のとこだけ次のように書き換えるのはどうでしょうか。

    static void Disp(String[] name, double[] height){
        int n = name.length;
        double sum = 0;
        for (int i = 0; i < n; i++) { 
            System.out.println(name[i]); 
            for (int j = 0; j < n; j++){
                if (i==j) continue;
                System.out.println(height[j] + "cm"); 
            }
            sum = sum + height[i];
        }
        System.out.println("平均:" + sum/n+ "cm");
    }
2018/10/24 21:54:49
id:moon-fondu

ありがとうございます!うまくいきました(^^;)

2018/10/27 09:15:47

その他の回答1件)

id:cdaotg No.1

回答回数123ベストアンサー獲得回数35

ポイント200pt

「最初の三行は一人目の身長を出力しない、次は二人目・三人目と順に…」という事でよろしいでしょうか?
for文を二重にすればできそうです。

for (int i = 0; i <= 2; i++) {

for (int j = 0; j <= 2; j++) {

System.out.println(name[i] + ":" + ( ( i != j ) ? height[i] : "" ) + "cm");

}
sum = sum + height[i];

}

他2件のコメントを見る
id:cdaotg

「エラーになった」とのことですが、具体的にどのようなエラーでしょうか?
(コンパイル時エラー OR 実行時エラー、出力されたエラーメッセージなど。)

また、もう一点バグがあったので修正です。
System.out.println(name[j] + ":" + ( ( i != j ) ? (height[j] + "cm") : "" ));

私の手元の環境では、これで正常に動作しました。

2018/10/24 09:22:14
id:moon-fondu

ありがとうございます、うまくいきました!

2018/10/24 20:35:06
id:rsc96074 No.2

回答回数4503ベストアンサー獲得回数437ここでベストアンサー

ポイント400pt

 こちらは参考になるでしょうか。前回のを雛形にしました。

package testprogramm;

import java.util.Scanner; 

public class Sample { 

    static void Disp(String[] name, double[] height){
        int n = name.length;
        double sum = 0;
        for (int i = 0; i < n; i++) { 
            for (int j = 0; j < n; j++){
                System.out.println( name[j] + ":" + ((i==j)? "" : height[j] + "cm") ); 
            }
            sum = sum + height[i];
        }
        System.out.println("平均:" + sum/n+ "cm");
    }
    
    public static void main(String args[]) {

        Scanner scan = new Scanner(System.in); 

        while (true) { 
            System.out.print("得点を入力してください: "); 
            // キーボードから整数の入力を受け取る 
            int score = scan.nextInt(); 

            if (score > 90) { 
                System.out.println("おめでとう! 合格です"); 
                String name[] = new String[3]; 
                double height[] = new double[3]; 
                double sum = 0; 
                name[0] = "鈴木"; 
                name[1] = "杉山"; 
                name[2] = "田中";  
                height[0] = 168.7; 
                height[1] = 173.4; 
                height[2] = 155.8; 
                Disp(name,height); 
                break; 
            } else if (score >= 60) { 
                System.out.println("もう少し頑張りましょう。"); 
                String name[] = new String[3]; 
                double height[] = new double[3]; 
                double sum = 0; 
                name[0] = "橋本"; 
                name[1] = "高杉"; 
                name[2] = "佐藤";  
                height[0] = 166.3; 
                height[1] = 159.1; 
                height[2] = 177.4; 
                Disp(name,height);
                break; 
            } else if (score < 0) { 
                break; 
            } 
        }
        scan.close(); 
    }
}
他1件のコメントを見る
id:rsc96074

 Disp()のとこだけ次のように書き換えるのはどうでしょうか。

    static void Disp(String[] name, double[] height){
        int n = name.length;
        double sum = 0;
        for (int i = 0; i < n; i++) { 
            System.out.println(name[i]); 
            for (int j = 0; j < n; j++){
                if (i==j) continue;
                System.out.println(height[j] + "cm"); 
            }
            sum = sum + height[i];
        }
        System.out.println("平均:" + sum/n+ "cm");
    }
2018/10/24 21:54:49
id:moon-fondu

ありがとうございます!うまくいきました(^^;)

2018/10/27 09:15:47

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません