Как я могу продолжить эти циклы, основываясь на пользовательских данных? В Явском затмении
Когда я запускаю этот код, это меню с множеством различных опций. он состоит из множества петель. Некоторые из которых мне еще предстоит сделать. У меня проблемы с симулятором подбрасывания монет. Хотя у меня есть цикл for, цикл циклически повторяется только один раз, а не до тех пор, пока пользователь не выберет "0" для выхода из программы и возврата в главное меню, но также моя другая проблема заключается в том, что симулятор не вернется в главное меню, если 0 выбран. Что здесь происходит??? вот пример моих неприятностей.
Введите начальное значение: 3
===== CS302 BOX TOOL =====
T> СИМВОЛ
G > Оценщик оценки
C > ЦВЕТ ВЫЗОВ
Q > Выйти Введите код буквы на ваш выбор: т
МОДЕЛИРОВКА ТОССОВ МОНЕТЫ
Введите 0, чтобы выйти. Сколько бросков? 4
3,0 головы и 1,0 хвоста означает, что 75,0% были головы
Тогда симулятор не спрашивает "введите 0, чтобы выйти. Сколько бросков?" снова. на самом деле, если я нажму другой номер, скажем 3, я получу это. Также ноль не завершает симулятор и снова выводит главное меню.
3 не является правильным выбором.
===== CS302 BOX TOOL =====
T> СИМВОЛ
G > Оценщик оценки
C > ЦВЕТ ВЫЗОВ
Q > ВЫЙТИ
System.out.println("");
System.out.println( "===== CS302 TOOL BOX =====\nT > COIN TOSS SIMULATOR\nG > GRADE ESTIMATOR\nC > COLOR CHALLENGE\nQ > QUIT");
{
Scanner anotherScanner = new Scanner(System.in);
boolean usersSelection = false;
String c;
while (!usersSelection)
{
{
System.out.print(""+ "Type code letter for your choice: ");
}
if (anotherScanner.hasNext("q|Q"))
{
c = anotherScanner.next();
usersSelection = true;
System.out.println(""
+ ""
+ "Good-Bye");
break;
}
if (anotherScanner.hasNext("t|T")){
c = anotherScanner.next();
usersSelection = true;
System.out.println("");
System.out.println("COIN TOSS SIMULATOR");
System.out.println("");
System.out.println("Enter 0 to quit. How many tosses?");
Random rand = new Random();
Scanner insideScanner = new Scanner(System.in);
int feeble = insideScanner.nextInt();
double heads = 0;
double tails = 0;
boolean headsvsTails;
headsvsTails = rand.nextBoolean();
for (int i =0; i < feeble; i++)
{
headsvsTails = rand.nextBoolean();
if (headsvsTails == true){ heads++;}
else {tails++;}
}
System.out.println(heads + " heads and " + tails + " tails means " + (heads/(heads+tails)*100 + "% were heads"));
}
if (anotherScanner.hasNext("g|G"))
{
c = anotherScanner.next();
usersSelection = true;
System.out.println("");
System.out.println("GRADE ESTIMATOR");
Scanner gradeE = new Scanner(System.in);
double exam1;
double possiblePts;
double programPts;
double programPossible;
double avg;
double avge;
double avrg;
System.out.print("Enter exam points earned (int): ");
exam1=gradeE.nextDouble();
if (exam1<0)
{System.out.print("Enter exam points earned (int): ");
exam1=gradeE.nextDouble();}
System.out.print("Enter exam points possible (int): ");
possiblePts=gradeE.nextDouble();
if (possiblePts<0) {System.out.print("Enter exam points possible (int): ");
possiblePts=gradeE.nextDouble();}
System.out.print("Enter program points earned (int): ");
programPts=gradeE.nextDouble();
if (programPts<0) {System.out.print("Enter program points earned (int): ");
programPts=gradeE.nextDouble();}
System.out.print("Enter program points possible (int): ");
programPossible=gradeE.nextDouble();
if (programPossible<0) {System.out.print("Enter program points possible (int): ");
programPossible=gradeE.nextDouble();}
avge = exam1+programPts;
avrg = possiblePts+programPossible;
avg = avge/avrg*100;
if (avg<60)
System.out.println("Grade estimate for " +avg+ "% is a F");
else if (avg<70)
System.out.println("Grade estimate for " +avg+ "% is a D");
else if (avg<80)
System.out.println("Grade estimate for " +avg+ "% is a C");
else if (avg<90)
System.out.println("Grade estimate for " +avg+ "% is a B");
else if (avg>=90)
System.out.println("Grade estimate for " +avg+ "% is a A");
}
1 ответ
Хорошо, приятель, в твоем коде много неправильного. Вы постоянно объявляете новые сканеры. Интервалы несовместимы, и части вашего кода отделены друг от друга морем белого пространства на протяжении Тихого океана.
Вот исправление:
if (anotherScanner.hasNext("t|T")){
c = anotherScanner.next();
usersSelection = true;
System.out.println("");
System.out.println("COIN TOSS SIMULATOR");
System.out.println("");
System.out.println("Enter 0 to quit. How many tosses?");
Random rand = new Random();
Scanner insideScanner = new Scanner(System.in);
int feeble = insideScanner.nextInt();
double heads = 0;
double tails = 0;
boolean headsvsTails;
headsvsTails = rand.nextBoolean(); // This is Worthless
while ( feeble != 0 ) { //Pay attention to this while loop
for (int i =0; i < feeble; i++) {
headsvsTails = rand.nextBoolean();
if (headsvsTails == true){ heads++;}
else {tails++;}
}
System.out.println(heads + " heads and " + tails + " tails means " + (heads/(heads+tails)*100 + "% were heads"));
System.out.println("Enter 0 to quit. How many tosses?"); //I ask the question again
heads = 0;
tails = 0;
feeble = insideScanner.nextInt();//I get new input
}
}
Ключевым моментом здесь является цикл while. Я использую вашу слабую переменную в качестве условия. Он будет работать до тех пор, пока пользователь не предоставит 0.
Пожалуйста, уделите время тому, чтобы познакомить друга или профессора с вашим кодом. Объясните им это, поощрите их задавать вопросы.
Также я считаю обязательным прочитать это. Не расстраивайся. Когда я смотрю на код, который написал 3 года назад, это выглядело примерно так. Вы получите лучше.
* исправлен код, так что головы / хвосты не являются аддитивными на основании комментариев.