2010-09-08 6 views
0

Я пытаюсь сделать лотерейную игру на Java и она использует вызовы методов вместо циклов для циклических целей. Однако я не могу получить входную переменную (например, int bet = input.nextInt()), которая будет распознана как переменная для других методов. Я не знаю, как глобализировать «ставку», поэтому он может использоваться всеми методами, а не только тем методом, в котором он входит. Вот часть моего кода ниже, в том числе только одного метода, называемого «игра()»Локализуйте входную переменную в Java

public static void play() 
{ 
    System.out.println("\nPlay? Yes = 1 No = 2 "); 
    Scanner input = new Scanner(System.in); 
    int play = input.nextInt(); 
    if(play == 1) 
    { 

     System.out.print("Current balance is " + account); 
     System.out.print("\nPlace your bet: "); 
     int bet = input.nextInt(); 

     if((bet <= account) && (bet > 0)){ 
      lottery(); 
     } 
     else if((bet < 0) || (bet > account)){ 
      play(); 
     } 
    } 
    else if(play == 2){ 
     System.out.println("Final balance is " + account); 
     System.exit(0); 
    } 
    else{ 
     System.out.println("Invalid input!"); 
     play(); 
    } 

} 

ответ

1

Определение bet вне метода play().

0

Передайте его между методами в качестве параметра. (Определение его как общедоступного не рекомендуется). Или, если это класс, вы можете сделать его переменной-членом (свойство).

+0

как передать его между методами? Вы говорите о аргументах? Я пробовал это, но я не могу заставить его работать. И это не класс, но методы находятся в классе «lotterygame» – David

+0

Да, параметры == arguments. Попробуйте прочитать его в учебниках по Java: http://download.oracle.com/javase/tutorial/java/javaOO/arguments.html – froadie

2

Самый простой ответ - объявить игру и сделать ставку как статические переменные класса.

public class Game { 
    private static int play = 0; 
    private static int bet = 0; 

    public static void play() { 
     System.out.println("\nPlay? Yes = 1 No = 2 "); 
     Scanner input = new Scanner(System.in); 
     play = input.nextInt(); 
     if(play == 1) { 

     System.out.print("Current balance is " + account); 
     System.out.print("\nPlace your bet: "); 
     bet = input.nextInt(); 

     if((bet <= account) && (bet > 0)) { 
      lottery(); 
     } 
     else if((bet < 0) || (bet > account)){ 
      play(); 
     } 
    } 
    else if(play == 2){ 
     System.out.println("Final balance is " + account); 
     System.exit(0); 
    } 
    else{ 
     System.out.println("Invalid input!"); 
     play(); 
    } 
} 
+0

Спасибо всем за помощь. Это именно то, что я искал. Я попытался глобализовать его раньше, но я не понял, что мне нужно удалить int из «int bet = input.nextInt();» – David

1

Если определить ставку как поле в классе, как:

public class Lottery { 
    private int bet; 

    public void lottery() { 
     ... 
    } 

    public void play() { 
     ... 
    } 

    public static void main(String[] args) { 
     Lottery lottery = new Lottery(); 
     lottery.play(); 
    } 
} 

тогда ставка доступна во всех методов в классе, но не снаружи.

Нет необходимости публиковать игру, поэтому это может оставаться красивым в рамках метода игры. Считается хорошей практикой, чтобы дать переменным больше видимости, чем это необходимо.

Большинство людей в этом случае не сделают ставку в поле, но передают его в качестве параметра для метода лотереи. В этом случае visibiltiy можно даже ограничить только способами игры и лотереи.

Последнее замечание: вы используете вызовы функций для цикла. Поскольку java не поддерживает оптимизацию хвостового вызова (и в любом случае это не применимо), вы будете заполнять стек и, наконец, умереть от переполнения стека, если играете достаточно долго.

+0

+1 Для сброса 'static' – Ishtar

Смежные вопросы