РЕДАКТИРОВАТЬ: Недавние события, когда я компилировал программу, которую я не мог скомпилировать, привели меня к мысли, что у меня одновременно возникла проблема с моим компилятором. Без сомнения, из-за того, что я запустил его в WINE на Mac, в отличие от нативного приложения. Спасибо за ваши ответы. Я правильно протестирую все ответы и внесу все изменения, когда исправлю указанную ошибку с помощью компилятора или переместил компьютеры на один с рабочим.
Я относительно новичок в программировании, а также на этом сайте, поэтому, пожалуйста, потерпите меня. Я получаю сообщение об ошибке с моими двумя из моих утверждений If и одним «делом / пока», которое мне не удается устранить.
Вся программа работает так, как задумано, но два блока приведены ниже. Проблема заключается в том, что когда я ввожу символ «у», все работает как положено, и («Results =» + Arrays.toString (row)) печатает, как я и ожидал. Это также продолжается, чтобы продолжить через оригинальный цикл For и запустить программу снова.
Однако, когда я ввожу любой другой символ (т.е. не 'y' или 'n'), код не печатает «Ввод должен быть либо« y », либо« n »», а просто ждет другого ввода. Даже когда вводится «n», он не следует из цикла, как я хотел, он просто продолжает цикл и не переходит к другому, если я думал, что так и будет. Он делает это бесконечно, не принимая никаких других входных данных, кроме 'y', чтобы продолжить проходить цикл, так что я никогда не смогу получить отпечаток "негатив".
У кого-нибудь есть мысли о том, почему это происходит?
Хотя технически это не домашнее задание, я пометил его так, как я хочу знать, если возможно, что происходит, а не просто как это исправить.
do {
ans = input.next().charAt(0);
if (!ans.equals('y') || !ans.equals('n')) {
System.out.println ("Input must be either 'y' or 'n'");
}
} while (!ans.equals('y') || !ans.equals('n'));
и
if (ans.equals('y')) {
for (Object[] row : prevResults) {
System.out.println("Results = " + Arrays.toString(row));
}
} //
else if (ans.equals('n')) {
System.out.println("Negative");
//System.exit(0);
}
Полный код указан ниже
import java.util.*;
public class Averages {
public static void main (String [] args) {
//declare variables
int course, exam, average = 0;
char ans;
String pass;
//creating objects
Scanner input = new Scanner(System.in);
List<Object[]> prevResults = new ArrayList<Object[]>();
//full loop
for (int i = 0; i < 5; i++ ) {
System.out.println ("Loop " + (++i) + " out of 5");
//Course loop
do {
System.out.println ("Please enter a course mark out of 100");
course = input.nextInt();
if (course > 100) {
System.out.println ("Number entered is over 100");
}
} while (course > 100);
//Exam loop
do {
System.out.println ("Please enter an exam mark out of 100");
exam = input.nextInt();
if (exam > 100) {
System.out.println ("Number entered is over 100");
}
} while (exam > 100);
average = (course + exam)/2;
// Final Grade
System.out.println ("The average mark is " + average);
if ( average >= 50 && course > 40 && exam > 40) {
System.out.println ("The final grade is pass");
pass = "Pass";
}
else {
System.out.println ("The final grade is fail");
pass = "Fail";
}
//add to array
prevResults.add(new Object[] { "Course mark: " + course, "Exam mark: " + exam,"Average: " + average, "Grade: " + pass});
System.out.println ("Would you like to see previous results? y/n");
//'Previous results' question loop
do {
ans = input.next().charAt(0);
if (!ans.equals('y') || !ans.equals('n')) {
System.out.println ("Input must be either 'y' or 'n'");
}
} while (!ans.equals('y') || !ans.equals('n'));
// Close or Array if statement
if (ans.equals('y')) {
for (Object[] row : prevResults) {
System.out.println("Results = " + Arrays.toString(row));
}
} //
else if (ans.equals('n')) {
System.out.println("Negative");
//System.exit(0);
}
}// end for
}//end main
}//end class
РЕДАКТИРОВАТЬ 2: У меня есть переключение компьютеров и все предложенные ответы действительно работают. Они существо
while (ans != 'y' && ans != 'n');
И
while (!(ans.equals('y') || ans.equals('n')));
И
Создание отдельного метода, предложенного Крисом Брауном.
В интересах всех, кто читает это, эти решения работают замечательно, хотя у меня не было времени взглянуть на BufferedReader, предложенный Грегом Хьюгиллом, я, скорее всего, реализую его, потому что он кажется лучшим вариантом из того, что он заявил .