簡體   English   中英

方法和變量調用問題

[英]Methods & Variables Calling Questions

我之前寫過這段簡短的代碼:

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. 如果我創建一個公共靜態Integer變量,則在聲明它時不能為其設置數字。 我必須在聲明時設置一個數字。 編輯:我不好,聲明時可以給它分配一個數字。

    如果我創建一個公共Integer變量,則可以對其進行聲明並為其設置一個數字,但是由於某些原因,我不能在公共靜態void Main中使用它,我也必須這樣做。

  2. 由於next()不是靜態void,所以無法從main(String [] args)void調用它。 我不想將next()設為靜態,因為那樣我將無法使用非靜態的公共Integer。

  3. 我無法從main()本身返回(調用)main()。 當檢測到無效輸入時,這是必要的。

這些問題我該怎么辦?

如果不想使用靜態方法,則必須在main方法中創建一個類對象,然后使用它來調用next()方法。

Check obj = new Check();
obj.next();

如果我創建一個公共靜態Integer變量,則在聲明它時不能為其設置數字。

是的你可以。

如果我創建一個公共Integer變量,則可以對其進行聲明並為其設置一個數字,但是由於某些原因,我不能在公共static void Main中使用它。

那是因為靜態方法不能利用非靜態屬性。

我無法從main()本身返回(調用)main()。 當檢測到無效輸入時,這是必要的。

是的,可以,但是您需要傳遞參數。

  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!" );
    }
}

幾條評論。

1) 如果我創建一個公共靜態Integer變量,則在聲明它時不能為其設置數字

為什么?

您應該很容易就能這樣聲明它:

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!");
}

因此,您要使所有實例都成為作用域,然后在main創建一個Check 實例

我還要指出的是,您使用的EDT是Swing GUI類,它破壞了Swing的單線程模型,因此此代碼從根本上來說是有缺陷的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM