実現したいこと
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曲目に入力した分数になっているのにこちらはうまく動作していて、
二つのパターンで何が原因で違う動作になっているのかがわかりません。
どうかご教授ください。
0 コメント