我正在用Java编写游戏,并且在对其进行了编译和调试之后,唯一的错误是它在解析时已到达文件末尾。
我查看并确保所有括号都平衡。我意识到我错过了一个右括号,所以我在应有的地方添加了一个。再次编译后,甚至出现了更多错误,就好像放错了括号。
下面是第94行上没有括号的版本。我了解整个文件都不是理想的发布方式,但问题并非仅针对我所知道的几行代码。
import java.util.Scanner;
import java.util.Random;
public class NATO{
public static void main(String[] args){
float finalScore = 0;
float numberCompleted = 0;
float numberCorrect = 0;
int gameLength = 10;
boolean playing = true;
String A = "Alpha";
String B = "Beta";
String C = "Charlie";
String D = "Delta";
String E = "Echo";
String F = "Foxtrot";
String G = "Golf";
String H = "Hotel";
String I = "India";
String J = "Juliett";
String K = "Kilo";
String L = "Lima";
String M = "Mike";
String N = "November";
String O = "Oscar";
String P = "Papa";
String Q = "Quebec";
String R = "Romeo";
String S = "Sierra";
String T = "Tango";
String U = "Uniform";
String V = "Victor";
String W = "Whiskey";
String X = "Xylophone";
String Y = "Yankee";
String Z = "Zulu";
while(playing == true) {
try {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
System.out.println("Welcome to the NATO speed game! Press [ENTER] to start...");
}
catch (IOEXCEPTION ioe) {
System.out.println("Index out of bounds exception raised ^");
}
System.out.println("Game starting in 3...");
System.out.println("Game starting in 2...");
System.out.println("Game starting in 1...");
while(numberCompleted <= gameLength){
int rnd = Random().nextInt(args.length);
String word = args[rnd];
System.out.println(word.charAt(1));
System.out.println(": ");
String answerIncludingSpaces = System.in.nextLine;
String answerUncapitalized = answerIncludingSpaces.replaceAll("\\s+", "");
String answer = answerUncapitalized.charAt(1).toUpperCase;
if(answer != word) {
float numberCompleted = numberCompleted + 1;
}
else if(answer == word){
float numberCorrect = numberCorrect + 1;
}
else {
System.out.println("Something went wrong. Please restart the game.");
break;
}
}
float finalScore = (numberCorrect / numberCompleted);
System.out.println("Game over.");
System.out.println("Your score was " + finalScore + ". Would you like to play again? Y/N");
if(System.nextLine.toUpperCase == "Y") {
continue;
}
else {
system.out.println("Thank you for playing!");
break;
}
}
}
}
当我在第94行添加括号时显示的错误消息:
答案 0 :(得分:5)
您缺少InputStreamReader
和BufferedReader
的导入。 system
和IOEXCEPTION
的大小写不正确(正确拼写的IOException
将需要导入)。您有一些不需要在其后加上括号的方法(例如,第83行的nextLine
)。您需要在第57行的new
之前放置Random()
。
由于第7行的finalScore
已经被声明为float
,因此您需要在第79行的float
之前将其删除。只应在声明变量类型时声明正在创建它。在第79行的第二个float
声明中,它试图创建第二个finalScore
变量,但该变量失败了,因为您不能有两个具有相同名称的变量。删除该行上的float
声明将使其正确修改现有的finalScore
变量。同样的想法也适用于其他地方,例如第66行的numberCompleted
和第70行的numberCorrect
。
此外,在第63行上,您需要执行Character.toUpperCase(answerUncapitalized.charAt(1))
。当前,您正在尝试在toUpperCase
上调用char
,并且原语没有方法,因此不正确。
但是,实际上,您应该使用一个可以帮助您解决此问题的应用程序,例如Eclipse。我在Eclipse中复制并粘贴了此代码,它使查看问题的位置变得很容易,并针对其中的一些问题提出了适当的解决方案。
答案 1 :(得分:1)
如果问题是“ 为什么加一个括号会导致报告更多的编译错误?”,那么答案是存在语法错误(例如缺少括号)将导致编译器在甚至开始检测更多“复杂”错误之前就放弃。
将其视为两轮(或更多轮)的游戏:
等等。
动机是:如果我们甚至在语法级别上都不同意,那么任何进一步的错误都可能超出预期范围,即比帮助更令人困惑。