程序由于括号而无法编译

时间:2019-05-25 02:07:48

标签: java javac

我正在用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行添加括号时显示的错误消息:

https://pastebin.com/6E9DNdkA

2 个答案:

答案 0 :(得分:5)

您缺少InputStreamReaderBufferedReader的导入。 systemIOEXCEPTION的大小写不正确(正确拼写的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)

如果问题是“ 为什么加一个括号会导致报告更多的编译错误?”,那么答案是存在语法错误(例如缺少括号)将导致编译器在甚至开始检测更多“复杂”错误之前就放弃。

将其视为两轮(或更多轮)的游戏:

  • 我们(编译器和程序员)可以同意这在语法上是正确的Java吗?
    • 如果答案为“否”,则中止。
    • 如果回答是“是”,我们继续。
  • 我们可以同意所有名称都是可解析的吗?
    • 如果答案为“否” ...

等等。

动机是:如果我们甚至在语法级别上都不同意,那么任何进一步的错误都可能超出预期范围,即比帮助更令人困惑。