编辑:我最近发生的编译程序,我知道无法编译导致我相信我同时有一个问题与我的编译器。毫无疑问,由于我在Mac上运行WINE而不是原生应用程序。谢谢你的回复。我会正确地测试出所有的回应,并且在我用编译器解决了所说的错误时进行了所有更改,或者我已经将计算机移到了一个有效的计算机上。其他如果和做虽然不按预期工作
我对编程相对比较陌生,所以请耐心等待。我的两条If语句出错,另外一条出现/我无法解决的错误。
整个程序按预期工作,但下面有两个块。问题是,当我输入字符'y'时,一切都按预期工作,并按照我的预期打印(“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')));
和
制作一个单独的方法,由克里斯·布朗的建议。
为了读者的利益,这些解决方案非常有效,尽管我没有时间看看Greg Hewgill建议的BufferedReader,我很可能会实现它,因为它似乎是更好的选择说明。
您对'Scanner'的使用很容易出现错误和意想不到的结果,特别是对于交互式程序。你必须使用'扫描仪'?你有没有考虑替代品?例如,['BufferedReader'](http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html)有一个'readLine()'方法。 – 2012-03-09 10:48:12
我没有意识到有任何替代品是诚实的。有人告诉我,这个方法对于教程讲师的阅读很有帮助,所以我没有考虑太多选择。正如我所说,我对编程相当陌生。我将研究BufferedReader以查看它是否提供解决方案。 – 2012-03-09 10:58:43