こんにちは、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つになっても構いません。
よろしくお願い致します。
こちらは参考になるでしょうか。前回のを雛形にしました。
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(); } }
「最初の三行は一人目の身長を出力しない、次は二人目・三人目と順に…」という事でよろしいでしょうか?
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];
}
「エラーになった」とのことですが、具体的にどのようなエラーでしょうか?
(コンパイル時エラー OR 実行時エラー、出力されたエラーメッセージなど。)
また、もう一点バグがあったので修正です。
System.out.println(name[j] + ":" + ( ( i != j ) ? (height[j] + "cm") : "" ));
私の手元の環境では、これで正常に動作しました。
ありがとうございます、うまくいきました!
こちらは参考になるでしょうか。前回のを雛形にしました。
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(); } }
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"); }
ありがとうございます!うまくいきました(^^;)
Disp()のとこだけ次のように書き換えるのはどうでしょうか。
2018/10/24 21:54:49ありがとうございます!うまくいきました(^^;)
2018/10/27 09:15:47