2017-02-23 17 views
-2

Я пытаюсь сделать небольшую основную игру Нима. Я новичок в java. Когда я запускаю код, он просто запускается на секунду и останавливается, не делая того, о чем я прошу об этом. Это, наверное, простое решение, но я должен был спросить. Кто-нибудь есть идеи? Вот мой код.Java-программа запускается и останавливается, ничего не делая

import java.util.Scanner; 
import java.util.Random; 

public class Nim { 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     Random rand = new Random(); 

     int playernum; 
     int cpunum = rand.nextInt(3)+1; 
     int gamenum = 21; 
     boolean win = false; 
     boolean turn = true; 

     while((win = false) && (turn = true)){ 
      System.out.println("The number is 21. Enter a number from 1 - 3"); 
      playernum = input.nextInt(); 

      int remaining = gamenum - playernum; 

      System.out.println("The number is now " + remaining); 
      turn = false; 

      if((turn = false) && (gamenum > 0)){ 
       System.out.println("Computer is thinking..."); 
       try { 
        Thread.sleep(3000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 


      } 
     } 


    } 

} 
+2

Используйте '==' для сравнения, '=' используется для назначения. – Jyr

+0

Вот почему вы всегда должны проверять '! Turn' вместо' turn == false'. – shmosel

+0

'while (! Win && turn)' перейдите к этому и попробуйте –

ответ

0

При использовании логических переменных в случае заявления и заголовки цикла, нет необходимости проверять, если они равны true или false, просто использовать переменные себя, как это так,

while(!win && turn){ 
    System.out.println("The number is 21. Enter a number from 1 - 3"); 
    playernum = input.nextInt(); 

    int remaining = gamenum - playernum; 

    System.out.println("The number is now " + remaining); 
    turn = false; 

    if(!turn && gamenum > 0){ 
    System.out.println("Computer is thinking..."); 
    try { 
     Thread.sleep(3000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

Кроме того, еще один вопрос, прежде чем было то, что когда вы проверяли логические переменные, вы использовали неправильный оператор =. Вы должны были использовать == для сравнения равенства между примитивными типами, но с булевыми значениями это не обязательно. Если вы хотите проверить, является ли логическая переменная true, просто используйте логическую переменную как условие. И если вы хотите проверить, является ли логическая переменная «ложным», просто используйте отрицание логической переменной с помощью оператора ! в условии.

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