編輯:我最近發生的編譯程序,我知道無法編譯導致我相信我同時有一個問題與我的編譯器。毫無疑問,由於我在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