実現したいこと
while(条件式)を用いて正常に動作するようにしたい
前提
プログラミング初心者です。
Javaを使ってCDに収録できるかを判定するプログラムを作成しています。
CDの最大収録時間は74分です。
1~20までの曲数を入力し、それぞれ何分、何秒かを数字で入力します。
その合計が74分未満なら収録可能、74分以上なら収録不可と出力するプログラムです。
発生している問題・エラーメッセージ
例えば、曲数が2曲で1曲目を1分、1秒と入力。
2曲目を入力しようとすると、while(true)とbreakを用いたコードではうまく動作するのですが、
while(条件式)を用いて記述すると、1曲目で入力した数字を2曲目でそのまま受け取ってしまっている
みたいでうまく動作しません。
while(true)はbreakを記述し忘れると無限ループに入ってしまうためそのリスクを避けるために
while(条件式)を用いてコードを書きたいのですが、どうしてもうまくいきません。
該当のソースコード
Java
1import java.util.Scanner; 2 3public class CD { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 //最大収録時間を秒に変換した定数 7 final int max = 74 * 60; 8 //CDに入れる曲数の変数 9 int n = 0; 10 //曲の長さの(分)の変数 11 int m = 0; 12 //曲の長さ(秒)の変数 13 int s = 60; 14 //分を秒数に変換した値を入れる変数 15 int ms = 0; 16 //トータルの分数を入れる変数 17 int totalMinutes = 0; 18 //トータルの秒数を入れる変数 19 int totalSeconds = 0; 20 //最終トータル時間を入れる変数 21 int total = 0; 22 //曲数を取得 23 while (n <= 0 || n > 20) { 24 try { 25 System.out.print("収録する曲数を入力してください:"); 26 n = sc.nextInt(); 27 28 if (n <= 0 || n > 20) { 29 System.out.println("\r\n1曲以上20曲以内で入力してください"); 30 } 31 } catch (Exception e) { 32 System.out.println("\r\n整数で入力してください"); 33 sc.next(); 34 } 35 } 36 System.out.println("収録数は" + n + "曲です"); 37 System.out.println("\r\n曲の長さを分と秒に分けて入力してください"); 38 39 for (int i = 0; i < n; i++) { 40 //while(true)&breakだとうまくいく 41 while (true) { 42 try { 43 System.out.print("\r\n" + (i + 1) + "曲目の(分)を入力してください:"); 44 m = sc.nextInt(); 45 if (0 <= m) { 46 ms = m * 60; 47 break; 48 } 49 50 } catch (Exception e) { 51 System.out.println("\r\n整数で入力してください"); 52 sc.next(); 53 } 54 } 55 56 totalMinutes += ms; 57 //条件式をいれるとうまく動作しない 58 while (s >= 60) { 59 try { 60 System.out.print((i + 1) + "曲目の(秒)を入力してください:"); 61 s = sc.nextInt(); 62 if (s >= 60) { 63 System.out.println("\r\n秒数は60未満で入力してください"); 64 }else { 65 break; 66 } 67 } catch (Exception e) { 68 System.out.println("\r\n整数で入力してください"); 69 sc.next(); 70 } 71 72 } 73 74 totalSeconds += s; 75 76 } 77 total = totalMinutes + totalSeconds; 78 m = total / 60; 79 s = total % 60; 80 System.out.println("\r\n曲のトータル時間は" + m + "分" + s + "秒" + "です"); 81 if (total <= max) { 82 System.out.println("収録可能です"); 83 } else { 84 System.out.println("収録不可です\r\n時間がオーバーしています"); 85 } 86 sc.close(); 87 } 88}
試したこと
s = 1曲目に入力した秒数になっていて2曲目の秒数が入力できないということは分かったのですが、どのように調べればよいのかわかりません。
while(true)の方もs = 1曲目に入力した分数になっているのにこちらはうまく動作していて、
二つのパターンで何が原因で違う動作になっているのかがわかりません。
どうかご教授ください。
回答2件
あなたの回答
tips
プレビュー