2013-02-12 4 views
0

Я смущен между тем, когда следует использовать public static void xxx() и public void xxx(). Ошибка, которую я получаю, находится в основном классе.Ошибка статических и нестатических

generateRandomNumber();

The error : (error: non-static method generateRandomNumber() cannot be referenced from a static context)

getUserInput();

he error : (error: non-static method getUserInput() cannot be referenced from a static context)

GetResult();

The error : (error: non-static method getResult() cannot be referenced from a static context)

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(); 
} 

}

+0

Эмпирическое правило: если поле/метод относится к самому классу он должен быть статическим. Если он принадлежит экземпляру класса, он не является статичным. Поскольку нестатические принадлежат экземпляру, вам нужен экземпляр для доступа к ним. – jlordo

+0

'main()' является статическим. Вы не можете вызывать нестатические методы (или поля), не используя экземпляр класса, к которому эти методы относятся, в пределах этого статического метода. – Lion

+0

Возможный дубликат [java: нестатическая переменная не может быть указана из статического контекста Ошибка] (http://stackoverflow.com/questions/926822/java-non-static-variable-cannot-be-referenced-from-a -static-context-error) – EJP

ответ

2

вы не можете получить доступ к не-статический метод экземпляра/переменную из статического контекста непосредственно. вам понадобится экземпляр вашего класса для доступа к ним.

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

или вы можете сделать все эти методы статический и доступ к ним непосредственно. делать методы статичными, если вы думаете, что все экземпляры этого класса должны использовать дату/методы.

+0

о, ничего себе! Большое спасибо Prem !! –

+0

Я этого не осознавал! –

1

Вы пытаетесь вызвать метод, которому нужен экземпляр HighLowGame для работы.

Изменения основного метода: -

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

да спасибо вы тоже работа! :) –

0

Вы должны вызвать методы на примере HighLowGame.

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

или объявить ваши методы static как

public static void generateRandomNumber(){ ..} 
Смежные вопросы