Программа не будет компилироваться из-за скобок - PullRequest
1 голос
/ 25 мая 2019

Я пишу игру на 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 ]

5 голосов
/ 25 мая 2019

Вам не хватает импорта для InputStreamReader и BufferedReader. system и IOEXCEPTION не пишутся с заглавной буквы правильно (и IOException потребует импорта, если написано правильно). У вас есть несколько методов, которые вы не ставите после скобок (например, nextLine в строке 83). Вам нужно поставить new перед Random() в строке 57.

Поскольку finalScore уже объявлено как float в строке 7, вам нужно удалить float перед ним в строке 79. Вы должны объявлять тип переменной только при ее создании. Со вторым объявлением float в строке 79 он пытается создать вторую переменную finalScore, которая завершается неудачно, потому что вы не можете иметь 2 переменные с одинаковым именем. Удаление объявления float в этой строке приведет к корректному изменению существующей переменной finalScore. Эта же идея применима и к другим местам, таким как numberCompleted в строке 66 и numberCorrect в строке 70.

Кроме того, в строке 63 вам нужно сделать Character.toUpperCase(answerUncapitalized.charAt(1)). В настоящее время вы пытаетесь вызвать toUpperCase для char, а у примитивов нет методов, поэтому это неправильно.

Но на самом деле вам следует использовать приложение, которое поможет вам в этом, например Eclipse. Я скопировал и вставил это в Eclipse, и было очень легко увидеть, где находятся проблемы, и предложил соответствующие исправления для некоторых из них.

1 голос
/ 25 мая 2019

Если вопрос «, почему добавление одной скобки вызывает так много сообщений об ошибках компиляции? », тогда ответ заключается в том, что наличие синтаксических ошибок (например, отсутствие скобки) заставит компиляторыпрервать, даже не начав обнаруживать более «изощренные» ошибки.

Думайте об этом как об игре в два (или более) раунда:

  • Можем ли мы (компилятор и программист) согласиться с тем, чтоэто синтаксически правильная Java?
    • если ответ «нет», прервать.
    • если ответ «да», мы продолжаем.
  • Можем ли мы согласиться с тем, что все именаразрешимы?
    • если ответ «нет» ...

И т. Д.

Мотивация такова: если мы не согласны даже суровень синтаксиса, чем любые дальнейшие ошибки, вероятно, не на должном уровне, т. е. больше сбивает с толку, чем помогает.

...