首页 > 解决方案 > 由于括号,程序无法编译

问题描述

我正在用 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

标签: javajavac

解决方案


您缺少InputStreamReader和的导入BufferedReadersystem并且IOEXCEPTION没有正确大写(并且IOException拼写正确时需要导入)。您有一些方法没有在后面加上括号(例如nextLine在第 83 行)。您需要将newbeforeRandom()放在第 57 行。

由于finalScore已经float在第 7 行声明为 a,您需要float在第 79 行删除它之前的。您应该只在创建变量时声明它的类型。在第 79 行的第二个float声明中,它试图创建第二个finalScore失败的变量,因为你不能有两个同名的变量。删除该float行上的声明将使其正确修改现有finalScore变量。同样的想法也适用于其他地方,例如numberCompleted第 66 行和numberCorrect第 70 行。

此外,在第 63 行,您需要执行Character.toUpperCase(answerUncapitalized.charAt(1)). 目前您正在尝试调用toUpperCasea char,而原语没有方法,所以这是不正确的。

但实际上,您应该使用可以帮助您解决此问题的应用程序,例如 Eclipse。我在 Eclipse 中复制并粘贴了它,它可以很容易地查看问题所在,并建议对其中一些问题进行适当的修复。


推荐阅读