2015-01-25 3 views
0

Я создаю простую блэкджекскую программу java, и я в тупике с проверкой входного цикла. Когда пользователю предлагается нарисовать карту, у него есть возможность: (y/n) выбрать, а также, если они захотят снова сыграть. Моя проблема в том, что когда мне предлагается нарисовать карту, и я выбираю y, этот персонаж должен только подсказать карточную ничью ... но похоже, что любой персонаж будет делать этот трюк. То же самое касается цикла воспроизведения, если я хочу снова сыграть. Также, когда мне предлагается снова играть, я хочу вернуться в начало цикла while, но я не могу назвать эту функцию. Мне нужна помощь! Вот мой код:Blackjack.java при проверке ввода цикла

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

public class BlackJack 
{ 

    public static void main(String[] args) 
    { 

     char play = 'y'; 
     char drawAgain; 
     int card1, card2; 
     int nextCard = 0; 


     Scanner keyboard = new Scanner(System.in); 
     Random number = new Random(); 


     while (play != 'n') 
     { 
      card1 = number.nextInt(10) + 1; 
      card2 = number.nextInt(10) + 1; 

      System.out.print("First cards: "); 
      System.out.println(card1 + ", " + card2); 
      int cardTotal = card1 + card2; 
      System.out.println("Total: " + cardTotal); 
      System.out.print("Draw again? (y/n): "); 
      drawAgain = keyboard.next().charAt(0); 

      while (drawAgain != 'n') 
      { 
       int card3 = number.nextInt(10) + 1; 
       System.out.println("Card: " + card3); 
       cardTotal += card3; 
       System.out.println("Total: " + cardTotal); 

       if (cardTotal <= 21) { 
        System.out.print("Draw Again? (y/n): "); 
        drawAgain = keyboard.next().charAt(0); 

       } 

       if (cardTotal > 21) { 
        System.out.println("Bust"); 
        System.out.print("Would you like to play again? (y/n): "); 
        play = keyboard.next().charAt(0); 
       } 


      } 


     } 
    } 
} 
+0

* "этот символ должен запрашивать только карточку *, но ваш код не проверяет это' while (play! = 'N') '. Нигде в вашем коде вы не проверяете '' y''. – m0skit0

+0

@mattsap Я думаю, что внешний - это «главное меню». Во всяком случае, это не вопрос. – m0skit0

ответ

0

Есть несколько проблем с этим кодом.

  1. Вы понесете бесконечную для цикла, поскольку drawAgain никогда не сбрасываются на п, если значение точки является> 21.
  2. Для обеспечения соблюдения пользователя должен указать либо да или нет, вы должны проверить для этого. Ниже это делается с циклом while.
  3. Игровая переменная никогда не сбрасывается, что заставляет пользователя играть до перебора, а затем выберите, хотите ли вы продолжать играть или нет.

Ниже перечислены эти проблемы. Это должно быть то, что вы хотите.

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

public class BlackJack 
{ 
public static char getValidInput(){ 
    Scanner keyboard = new Scanner(System.in); 

    String input = keyboard.next(); 
    while(!input.equals("yes") || !input.equals("no")){ 

     System.out.println("please input yes or no"); 
     input = keyboard.next(); 
    } 
    return input.charAt(0); 
} 

public static void main(String[] args) 
{ 

    char play = 'y'; 
    char drawAgain; 
    int card1, card2; 
    int nextCard = 0; 


    Random number = new Random(); 

    while (play != 'n') 
    { 
     card1 = number.nextInt(10) + 1; 
     card2 = number.nextInt(10) + 1; 

     System.out.print("First cards: "); 
     System.out.println(card1 + ", " + card2); 
     int cardTotal = card1 + card2; 
     System.out.println("Total: " + cardTotal); 
     System.out.print("Draw again? (y/n): "); 


     drawAgain = getValidInput(); 
     while (drawAgain != 'n') 
     { 
      int card3 = number.nextInt(10) + 1; 
      System.out.println("Card: " + card3); 
      cardTotal += card3; 
      System.out.println("Total: " + cardTotal); 

      if (cardTotal <= 21) { 
       System.out.print("Draw Again? (y/n): "); 

       drawAgain = getValidInput(); 
      }else{ //if (cardTotal > 21) { 
       System.out.println("Bust"); 
       drawAgain ='n'; 
      } 
     } 
     play = getValidInput(); 
    } 
} 
} 
Смежные вопросы