来自另一个类的调用方法不成功

时间:2015-04-05 17:27:01

标签: java eclipse

我有一个名为Main.java的主类,另一个名为Movements.java的类

我尝试将Movements.java中的方法调用到Main.java中,但这不是我所期望的。

Main.java:

package game;

public class Main {

Movements shift = new Movements();

public void main String(String[] args) {

   while (true){
//body here//
   }
}

public static void startProgram {
//body here//
}

public static int variableName {
//body here//
}

public static boolean isInputValid {
//body here//
}

public Chess(){
shift.analyzeInput();
shift.makeTurn();
}

}

Movements.java:

package game;
public class Movements {

    public static void analyzeInput(String info){
    StringTokenizer token = null;
    EasyWriter show = new EasyWriter();

    int tally = 0;
    info = info.toLowerCase();
    info = info.trim();

    String[] array = new String[100]; 

    token = new StringTokenizer(info);

    while (token.hasMoreTokens()) {
        array[tally] = token.nextToken();
        tally++;
    }

    if (tally > 0 && tally < 4){
        if (tally == 1){
            if (array[0].equals("resign")){
                if (Main.timeForWhitePlayer){
                    show.println("Black wins");
                    System.exit(1);
                }else{
                    show.println("White wins");
                    System.exit(1);
                }

            }else if (array[0].equals("draw")){
                if (Main.drawRequest == true){
                    show.println("It's a draw");
                    System.exit(1);
                }else{
                    show.println("You must ask the opponent if they are willing to call the game a draw first.");
                }
            }else{
                show.println("Invalid input. Please try again. ");
            }
        }else if (tally == 2) {
            Main.presentPosition = array[0];
            Main.nextPosition = array[1];
            if (Main.presentPosition.length() == 2 && Main.nextPosition.length() == 2 ){

                makeTurn();
            }else{
                show.println("Invalid input. Please try again.");
            }
    }

    Main.presentPosition = null;
    Main.nextPosition = null;
    Main.thirdArgument = null;
    }

    public static void makeTurn() {
    //body in here//
    }
}

我正在使用Eclipse IDE,它声明令牌“makeTurn”上的语法错误,此标记后的标识符。我做错了什么?

4 个答案:

答案 0 :(得分:1)

您不需要创建实例,因为该方法是静态的。您只需拨打Movements.makeTurn()即可。而且,如果您没有Movements mv = new Move();课程,我想您的意思是将Movements mv = new Movements();更改为Move。如果这样做,则必须扩展类型Movements

答案 1 :(得分:0)

我的猜测是,你在课堂上裸露任何方法或构造函数之外的shift.makeTurn();。如果是这样,你不能这样做,因为你必须进行方法调用,而不是在方法或构造函数或类似的块(例如静态初始化块)中初始化变量。

例如,为了简化,假设您有一个类似的Movements类:

public class Movements {
   // looks like this should not be static
   public void makeTurn() {

   }
}

和Main类一样:

public class Main {
   Movements shift = new Movements();
   shift.makeTurn();  // you can't call this here!

   public Main() {
      shift.makeTurn();  // but you can do it here!
   }

   public static void main(String[] args) {
      Movements shift = new Movements();       
      shift.makeTurn();  // or you can do it here!
   }
}

编辑:我的假设是正确的 - 你在任何方法或构造函数之外进行方法调用,解决方案很简单:不要这样做。将这些调用放在它们所属的任何方法或构造函数中。

其他问题:

  • 您的代码有静态过载 - 过度使用静态修饰符,使其成为非OOP程序。
  • 你在另一个类的字段中引用了太多的直接引用,这导致代码有很多连接(称为高度耦合代码)。这可能导致很难调试错误。

答案 2 :(得分:0)

不要为您的班级Main命名。这令人困惑。 main就是我们称之为程序入口点的方法。

shift.makeTurn()不在任何方法,构造函数或初始化程序中,因此您需要移动它。您还需要确定makeTurn()是否需要访问在Movements的不同实例(您称为shift)中不同的任何属性。如果是这样,你就不能让它变得静止。

如果您想使用

进行通话
shift.makeTurn();

然后转过来:

public static void makeTurn() {

进入这个:

public void makeTurn() {

否则做@TameHog告诉你的事情。

静态方法未绑定到shift之类的实例。它与Movements之类的类绑定在一起。这完全取决于makeTurn()需要访问的内容。虽然非静态被认为更灵活。如果你明白你应该能够自己决定做什么。

答案 3 :(得分:0)

您无法在class定义中调用方法。相反,您必须在方法或初始化程序中调用该方法。

使用方法

package game;

public class Main {
public void main String(String[] args) {
   shift.makeTurn();
   while (true){
//body here//
   }
}

public static void startProgram {
//body here//
}

public static int variableName {
//body here//
}

public static boolean isInputValid {
//body here//
}

Movements shift = new Movements();
}

或者,通过函数中的实例化,

package game;

public class Main {
public void main String(String[] args) {
   Movements shift = new Movements();
   shift.makeTurn();
   while (true){
//body here//
   }
}

public static void startProgram {
//body here//
}

public static int variableName {
//body here//
}

public static boolean isInputValid {
//body here//
}
}

或使用初始化

package game;

public class Main {
public void main String(String[] args) {

   while (true){
//body here//
   }
}

public static void startProgram {
//body here//
}

public static int variableName {
//body here//
}

public static boolean isInputValid {
//body here//
}

Movements shift = new Movements();
{ shift.makeTurn();}
}