-1

我前段时间写过这段简短的代码:

public class Check {
public static int gold, silver;
public int level=1;

public static void main(String[] args) {
    System.out.println("You are now level " + level + "!");
    String num1 = JOptionPane.showInputDialog("Enter a positive number:");
    int num2 = Integer.parseInt(num1);
    if (num2 < 0) {
        next();
    } else {
        main();
    }
}
public void next() {
    System.out.println("Thank you!");
}

}

我对这段代码有 3 个问题:

  1. 如果我创建一个公共静态整数变量,我不能在声明它时为其设置一个数字。而且我必须在声明时设置一个数字。已编辑:我的错,可以在声明时为其分配一个数字。

    如果我创建一个公共整数变量,我可以声明它并为其设置一个数字,但由于某种原因,我不能在公共静态 void Main 中使用它,我也必须这样做。

  2. 由于 next() 不是静态 void,我不能从 main(String[] args) void 调用它。我不想让 next() 成为静态的,因为那样我将无法使用非静态的公共整数。

  3. 我不能从 main() 本身返回(调用) main()。当检测到无效输入时,它是必需的。

我能做些什么来解决这些问题?

4

4 回答 4

2

如果我创建一个公共静态整数变量,我不能在声明它时为其设置一个数字。

是的你可以。

如果我创建一个公共整数变量,我可以声明它并为其设置一个数字,但由于某种原因,我不能在公共静态 void Main 中使用它

那是因为静态方法不能使用非静态属性。

我不能从 main() 本身返回(调用) main()。当检测到无效输入时,它是必需的。

是的,你可以,但你需要传递参数。

于 2013-10-04T15:51:25.777 回答
2

如果您不想使用静态方法,则必须在 main 方法中创建一个类对象并使用它来调用 next() 方法。

Check obj = new Check();
obj.next();
于 2013-10-04T15:47:53.830 回答
1
  1. 你确实在某个地方弄错了。
  2. 您无法从静态方法( main 是 static )访问非静态静态成员。
  3. 你忘了参数

试试这个变种:

public class Check {
    public static int gold, silver;
    public static int level = 1;

    public static void main( String[] args ) {
        System.out.println( "You are now level " + level + "!" );
        String num1 = JOptionPane.showInputDialog( "Enter a positive number:" );
        int num2 = Integer.parseInt( num1 );
        if( num2 < 0 ) {
            next();
        }
        else {
            main(args);
        }
    }

    public static void next( ) {
        System.out.println( "Thank you!" );
    }
}
于 2013-10-04T15:53:55.770 回答
0

几条评论。

1)如果我创建一个公共静态整数变量,我不能在声明它时为其设置一个数字

为什么?

您应该可以很容易地声明它:

public static int level = 1;

然后你的代码就可以正常工作了。

2) 避免静态- 不要从 调用您的程序逻辑main,用于main引导您的应用程序:

public int gold, silver;
public int level = 1;

public static void main(String[] args) {
    new Check().read();
}

public void read() {
    System.out.println("You are now level " + level + "!");
    String num1 = JOptionPane.showInputDialog("Enter a positive number:");
    int num2 = Integer.parseInt(num1);
    if (num2 < 0) {
        next();
    } else {
        read();
    }
}

public void next() {
    System.out.println("Thank you!");
}

因此,您将所有实例设置为范围,然后创建in的实例Checkmain

我还要注意,您正在使用 EDT 之外的 Swing GUI 类,这会破坏 Swing 的单线程模型,因此该代码存在根本缺陷。

于 2013-10-04T15:55:51.990 回答