2013-12-23 64 views
-3
public class MainClass { 
    public void main(String[] args) { 
     Grid.simulator(args); //static method that I can actually call 
     Engine.main;//what I want to call 
    } 
} 

問題是:Engine.main不能是靜態的。這就是爲什麼:臨時類。方法調用,用於非靜態類/方法

class Engine { 
    String command; 
    public void main() { 
     this.CommandLine(command); //Calls the Method which has the user input 
     this.ProcessCommand(command); //Calls the Method that will process the input 
    } 
} 

我明白,我不能調用非靜態方法,但我想一個變通的: 想如果我分配一個東西CommandLineProcessCommand它的工作,就好像它是一個靜態上下文中的非初始化變量。像這樣:

class SomeClass { 
    public static void main(String[] args) { 
     int number = null; 
     number = System.Nextint; 
     System.out.print(number); 
    } 
} 
    //In this code, either don't put it as static OR initialize 'number', even if as null. 

將東西類似工作this.Something?如果是,那怎麼樣?

+1

請請格式化您的代碼。這確實難以辨認。 –

+0

請嘗試提供更完整的代碼示例,並嘗試澄清一點說明。現在確實很難遵循。 – Dukeling

+1

不要問含糊的假設性問題。寫下你想問什麼,看看結果是什麼。 –

回答

1

您似乎對Java非常基本的困惑。

  1. 在Java中,您通常使用大寫字母命名方法而不用大寫字母來啓動它們。
  2. 如果main不是靜態的,它將不會被調用,當您嘗試運行該程序時,您只會收到非常明確的錯誤消息。
  3. 你必須在方法調用的周圍放置圓括號,而不管它是否有任何參數。您必須使用Engine.main()而不是Engine.main
  4. 如果您試圖獲取用戶輸入,則無法將該字符串傳遞給該方法,並希望方法更改您傳遞給它的方法。您需要將其返回或將其返回到類變量中。
  5. 無論您嘗試多麼努力,您都無法將號碼設置爲null。實際上,在這裏不需要設置號碼爲null。只需將其設置爲System.Nextint即可。
  6. 而且,順便說一句,獲取用戶輸入作爲一個int比這更復雜。

    Scanner in = new Scanner(System.in); 
    int number = in.nextInt(); 
    
  7. 而且,你真正的問題:只是要getInput(什麼CommandLine應該叫)和類似的方法,靜態的。並且請勿使用,請使用method()

我認爲你不可能每次都編譯這段代碼。那麼現在就做,看看你找到了多少錯誤(如果這是你的真實代碼,而不是一個隨便的猜測)。

+0

就像我說的那樣,這個數字的部分只是一個例子。即使你聲明瞭一個變量,但不要初始化它,如果你正在使用靜態方法,那麼你會得到一個錯誤,這就是我想要演示的東西,通過將它初始化爲一些值來添加一個工作。 – Oak

+0

問題是要調用一個方法,我調用它們的方法不能是靜態的,但要運行,我需要它是靜態的 – Oak

+0

即使調用方法是靜態方法,也可以調用方法。只是讓方法本身是靜態的。事實上,爲了避免混淆,最好讓所有東西都是靜態的。 – tbodt