2012-03-09 2 views
2

Я строю угадывающую игру со строками. Концепция довольно проста. У меня ограниченное количество попыток, определяемых константой Java (C_Max_Trials = 10), и когда количество догадок достигает этой константы, приложение должно выйти. Единственное, что я должен использовать эту константу, это часть моего университетского задания.переменная равно константе в Java

Моя проблема заключается в том, что Java не будет рассматривать мои заявления:

if (nrOfGuesses == C_Max_Trials) { 
      System.out.println("Sorry you are out of tries"); 
      System.exit(0);" 

Если я ставлю

nrOfGuesses == 0 

он будет работать нормально. Если я позволю

nrOfGuesses == C_Max_Trials 

, то он не будет останавливаться на 10 догадок, и он будет двигаться дальше не догадывается не -1, -2, -3 .... продолжая цикл.

Я прикрепляю свой код ниже. Также, если у вас есть какая-либо другая обратная связь относительно кода, это будет оценено по достоинству. Я только начинаю с кодирования.

Спасибо!

Мой код:

public class Assignment4 { 
    public static final int C_Max_Trials = 10; 
    //Start Game 

    String correctName = "X"; 
    boolean finished = false; 
    int nrOfGuesses=10; 

    while (!finished) { 

    Scanner keyboard = new Scanner(System.in); 
    System.out.print("Please guess the name: "); 
    String name = keyboard.nextLine(); 

     if (name.equals(correctName)) 
    { 
     finished = true; 
     System.out.println("Congratulations! You have guessed the name in " 
       + nrOfGuesses+ " tries!"); 
     System.exit(0); 

    } 
     --nrOfGuesses; 
     if (nrOfGuesses == C_Max_Trials) { 
      System.out.println("Sorry you are out of tries"); 
      System.exit(0); 
     } 

      System.out.println("Sorry, you haven't guessed the name. You have "+ 
       nrOfGuesses + " left. Please try again:"); 

     } 
    } 
} 
+0

Сообщение с классом Assignment4 обязательно должно быть помечено как домашнее задание. –

+0

Вы ничего не делаете здесь. Что ты упускаешь? –

ответ

2

Ты считаешь вниз (--nrOfGuesses) от 10

графа до (nrOfGuesses++) от 0 к C_Max_Trials или отсчитывать от C_Max_Trials вместо hardcoded 10.

1
public static final int C_Max_Trials = 10; 
//... 
--nrOfGuesses; 

Вы начинаете испытания в 10 лет и опускаетесь, поэтому никогда не сравнимы с максимальными испытаниями. Попробуйте установить максимальные испытания на 0 или начать испытания в 0 и повысить его.

3

Если nrOfGuessesначинает на 10, а затем только получает декрементируется ... как вы ожидали, что это будет равно до 10? (Запрет переполнения ...)

Вы должны решить nrOfGuesses подразумевается ли быть:

  • Количество догадок осталось: запустить его на константу, уменьшить его на каждом шагу, и сравнить с 0
  • количество догадок вы имели: запустить его на 0, увеличивает его и сравнить с постоянным
1

Вашего кодом, кажется, хотят е orce, когда количество догадок достигает максимального количества догадок, но вы начинаете с 10 догадок и декрементов в вашем цикле.

1

Ваш код не компилируется. И C_Max_Trials инициализируется до 10, а не 0. Таким образом, очевидно, что он не остановится на 0.

1

Ваша логика обратная; вы декретируяnrOfGuesses, а затем сравнивая его с максимум количество догадок, что вам разрешено. В этом случае вы должны либо быть приращениемnrOfGuesses, либо сравнить его с нулем и установить его на C_Max_Trials с самого начала.

Если бы я тебя, я выбрал бы приращение nrOfGuesses и сравнивая его с C_Max_Trials, так как это делает nrOfGuesses содержать значение, которое имеет смысл его имя (оно содержит число догадок). В противном случае у вас будет количество догадок , оставшееся с этой переменной, а затем оно должно быть переименовано в guessesRemaining или что-то в этом роде.

Конечно, если вы хотите использовать nrOfGuesses так же, как и в той части, где вы сообщаете пользователю, сколько попыток, которые он предпринял для правильного угадывания, затем нужно увеличивать каждый цикл, а не уменьшаться.

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