I keep encountering the error " Error: Syntax error, insert "}" to complete ClassBody"

I keep encountering the error " Error: Syntax error, insert "}" to complete ClassBody"

我知道还存在其他错误,但主要错误是应该关闭我的主要方法的括号。它要求我输入另一个括号以关闭 class 正文。我已经经历了很多次,正确地缩进并在括号中输入以关闭循环和方法,但它就是不想工作。有什么想法吗?

    import java.util.Stack;
    import java.util.Scanner;

    public class RPNApp{


      public static void main (String [] args)
      {
        /* Scanner object which takes user input and splits each element into an array of type String*/
        Scanner scan = new Scanner(System.in);
        System.out.println("Please enter numbers and operators for the Reverse Polish Notation calculator.");
        String scanner = scan.nextLine();
        String [ ] userInput = scanner.split(" ");
        Stack<Long> stack = new Stack<Long>();

        for (int i = 0; i <= userInput.length; i++) {

          if (isNumber()) {

            Long.parseLong(userInput[i]);
            stack.push(Long.parseLong(userInput[i]));
          }
        }
      }






      public static boolean isOperator (String userInput[i]) //userInput is the array.
      {
        for (int i = 0; i<userInput.length; i++) {

          if (!(x.equals("*") || x.equals("+") || x.equals("-") || x.equals("/") || x.equals("%"))) {
            return false;

          }else {
            return true;
          }
        }
      }






      public static boolean isNumber (String userInput[i]) 
      {
        for (int i = 0; i<x.length(); i++) {
          char c = x.charAt(i);
          if (!(Character.isDigit(c))) {
            return false;
          }


        } return true;
      }
    }

我做了很多更改,我知道还存在其他错误。但是我担心的是我的方法中没有正确的参数而遇到的错误。你提到仍然有问题,我是否倾向于你注意到的语法错误?

更新代码

import java.util.Stack;
import java.util.Scanner;

public class RPNApp{


  public static void main (String [] args){   
    /* Scanner object which takes user input and splits each element into an array of type String*/
    Scanner scan = new Scanner(System.in);
    System.out.println("Please enter numbers and operators for the Reverse Polish Notation calculator.");
    String scanner = scan.nextLine();
    String [ ] userInput = scanner.split(" ");
    Stack<Long> stack = new Stack<Long>();


    for (int i = 0; i < userInput.length; i++) {
      String current = userInput[i];

      if (isNumber(current)) {

        Long.parseLong(userInput[i]);
        stack.push(Long.parseLong(userInput[i]));
        System.out.println(stack.toString());
      }
    }     
  }
  public static boolean isOperator (String x) { //userInput is the array.

      if (!(x.equals("*") || x.equals("+") || x.equals("-") || x.equals("/") || x.equals("%"))) {
        return false;

      }else {
        return true;
      }
    }

  public static boolean isNumber (String x) {

    for (int i = 0; i<x.length(); i++) {
      char c = x.charAt(i);
      if (!(Character.isDigit(c))) {
        return false;
      }

    } return true;
  }
}

在您的函数参数中,您不能使用那样的 userInput[i]。摆脱 [i] 部分,然后修复其余的其他错误。

这段代码肯定不止几个问题。但是,如果您完全在脑海中编写它而没有编译它,那么它实际上非常好!它表明您以惊人的正确方式思考问题。我不明白一个人怎么会弄错这么多细节,但整体结构是正确的。有些语法错误并不是你的错:绝对不明显为什么它应该是 array.lengthstring.length() 但同时 arrayList.size(),这是完全不一致的混乱。

在这里,我稍微清理了一下:

import java.util.Stack;
import java.util.Scanner;

public class RPNApp {

  public static void main(String[] args) {
    /* Scanner object which takes user input and splits each element into an array of type String*/
    Scanner scan = new Scanner(System. in );
    System.out.println("Please enter numbers and operators for the Reverse Polish Notation calculator.");
    String scanner = scan.nextLine();
    String[] userInput = scanner.split(" ");
    Stack<Long> stack = new Stack<Long>();

    for (int i = 0; i <= userInput.length; i++) {
      if (isNumber(userInput[i])) {
        Long.parseLong(userInput[i]);
        stack.push(Long.parseLong(userInput[i]));
      }
    }
  }

  public static boolean isOperator(String userInput) {
    for (int i = 0; i < userInput.length(); i++) {
      char x = userInput.charAt(i);
      if (!(x == '*' || x == '+' || x == '-' || x == '/' || x == '%')) {
        return false;
      }
    }
    return true;
  }

  public static boolean isNumber(String s) {
    for (int i = 0; i < s.length(); i++) {
      char c = s.charAt(i);
      if (!(Character.isDigit(c))) {
        return false;
      }
    }
    return true;
  }
}

其他几点需要注意:

  1. 存在循环:检查if truereturn true循环,return false最后。
  2. Forall-loops:在循环中检查if falsereturn false,最后return true
  3. 字符和字符串不一样。字符用单引号括起来并通过 ==.
  4. 进行比较

还是错了。仔细想想为什么。并尝试不再 post 不可编译的东西。