【问题标题】:Syntax error on token "makeMiddle", @ expected before this token [duplicate]令牌“makeMiddle”上的语法错误,此令牌之前应为@ [重复]
【发布时间】:2014-03-30 16:56:27
【问题描述】:

我通常用 Python 编写代码,这个错误对我来说毫无意义。我无法理解我在这里做错了什么。我检查了具有相同错误消息的类似线程无济于事。

我认为这个错误与 Java 中调用的相同类和方法有关。尝试切换调用方法的方式,但没有这样做。有什么想法吗?

public class test2 {


    public int[] makeMiddle(int[] nums){

        int[] l1 = {nums[(nums.length/2)-1], nums[(nums.length/2)]};
        return l1;

    }

    public static void main(String[] args){
        makeMiddle({1,2,3,4});
        makeMiddle({5,6,2,1,7,6,3,4,0,1});
    }   

}

【问题讨论】:

    标签: java


    【解决方案1】:

    您的代码有几个问题。

    public int[] makeMiddle(int[] nums){
    
        int[] l1 = {nums[(nums.length/2)-1], nums[(nums.length/2)]};
        return l1;
    
    }
    

    main 是一个静态函数。这意味着可以在不实际实例化该类的对象的情况下调用它。静态函数不能引用任何成员变量(因为不能保证这些变量已经实例化),因此只能调用标记为静态的成员函数。将您的方法定义更改为:

    public static int[] makeMiddle(int[] nums){
    

    您还有语法错误(重复两次)。

    makeMiddle({1,2,3,4});
    makeMiddle({5,6,2,1,7,6,3,4,0,1});
    

    应该是

    makeMiddle(new int[]{1,2,3,4});
    makeMiddle(new int[]{5,6,2,1,7,6,3,4,0,1});  
    

    【讨论】:

    • 所以,如果我理解正确的话; 1)如果 main 是静态的,那么它只能调用静态方法,并且 2)我需要在 Java 中输入类型转换甚至参数
    • @chopperdrawlion4 1) main 可以调用非静态方法,前提是您为其提供调用它们的对象,例如@dafi 的答案。 2)如果您将makeMiddle的参数类型设置为int...,则可以消除new int[] { ... },如我的回答。
    • Main 总是需要是静态的。如果要调用对象的非静态方法,则必须在 main 中实例化该对象,然后使用它来调用其方法。
    【解决方案2】:

    如果你把makeMiddle的参数类型从int[]改成int...,那么你可以很简单地调用它,如下:

    makeMiddle(1,2,3,4);
    

    您仍然可以使用显式数组调用它,例如:

    makeMiddle(new int[] { 1,2,3,4 });
    

    该方法也应该是static,因为它是从静态 main 调用的。

    【讨论】:

      【解决方案3】:

      您必须使用构造 new int[] {a,b, ...};

      public static void main(String[] args){
          test2 t2 = new test2();
          t2.makeMiddle(new int[]{1,2,3,4});
          t2.makeMiddle(new int[]{5,6,2,1,7,6,3,4,0,1});
      }   
      

      【讨论】:

      • 所以每次我将参数传递给一个方法时,我总是需要输入'new'这个词和类型?
      • 如果传递原始类型数组,则需要使用该构造分配它们
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      相关资源
      最近更新 更多