静态和非静态错误

时间:2013-02-12 10:58:19

标签: java

我对何时使用public static void xxx()public void xxx()感到困惑。我得到的错误是在主类中。

generateRandomNumber();

  

错误:(错误:非静态方法generateRandomNumber()不能   从静态上下文引用)

getUserInput();

  他错误:(错误:非静态方法getUserInput()不能   从静态上下文引用)

的getResult();

  

错误:(错误:无法引用非静态方法getResult()   来自静态背景)

public class HighLowGame {
 int randomNumber;
 int guess;

public void generateRandomNumber(){
    randomNumber =  (0+(int)(Math.random() * ((0 - 99) + 1)));
}

public void getUserInput(){
    guess = Integer.parseInt(JOptionPane.showInputDialog(
           null,
           "Plaese input"));        
}

public String getResult(){
    if(randomNumber<guess){
       return "Your number is bigger than magic number";
   }
   else if (randomNumber>guess) {
       return "Your number is smaller than magic number";
   }
   else {
       return "You are correct! "+randomNumber;
   }
}

public static void main(String[] args){
    generateRandomNumber();
    getUserInput();
    getResult();
}

}

3 个答案:

答案 0 :(得分:2)

您无法直接从静态上下文访问非静态实例方法/变量。您将需要一个类的实例来访问它们。

public static void main(String[] args){
    HighLowGame  ref = new HighLowGame ();
   ref. generateRandomNumber();
    ref.getUserInput();
    ref.getResult();
}

或者您可以将所有这些方法静态直接访问。当您认为该类的所有实例应该共享日期/方法时,将方法设为静态。

答案 1 :(得分:1)

您正在尝试调用需要HighLowGame实例的方法。

将您的主要方法更改为: -

public static void main(String[] args){
    HighLowGame game = new HighLowGame();
    game.generateRandomNumber();
    game.getUserInput();
    game.getResult();
}

答案 2 :(得分:0)

您必须在HighLowGame的实例上调用方法。

public static void main(String[] args){
    HighLowGame game = new HighLowGame();
    game.generateRandomNumber();
    game.getUserInput();
    game.getResult();
}

或声明您的方法static,如

public static void generateRandomNumber(){ ..}