我有一个名为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”上的语法错误,此标记后的标识符。我做错了什么?
答案 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!
}
}
编辑:我的假设是正确的 - 你在任何方法或构造函数之外进行方法调用,解决方案很简单:不要这样做。将这些调用放在它们所属的任何方法或构造函数中。
其他问题:
答案 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();}
}