2013-12-02 4 views
-1

Программа предназначена для сканирования пользователя на первые две карты, которые они получают, и сообщает им, что у них есть. К сожалению, когда он спрашивает: «Являются ли карты подходящими ?:», он заканчивается перед входом. Я также мог бы научиться упорядочивать условия в инструкции switch, а не обо всех этих уродливых операторах if-else.Окончание основной программы

package Test; 
import java.util.Scanner; 
public class Test { 
public static void main(String[] args) { 

      // TODO Auto-generated method stub 
      int card1 = 0; 
      int card2 = 0; 
      String fc1, fc2; 
      String answer; 


      Scanner scan = new Scanner (System.in); 
      System.out.println("First card: "); 
      if (scan.hasNextInt()) 
      { 
        card1 = scan.nextInt(); 
      } 
      else 
      { 
        fc1 = scan.next(); 

        if (fc1 == "A") 
        { 
          card1 = 14; 
        } 
        else if(fc1 == "K") 
        { 
          card1 = 13; 
        } 
        else if (fc1 == "Q") 
        { 
          card1 = 12; 
        } 
        else if (fc1 == "J") 
        { 
          card1 = 11; 
        } 
      } 

      System.out.println("Second card: "); 
      if (scan.hasNextInt()) 
      { 
        card2 = scan.nextInt(); 
      } 
      else 
      { 
        fc2 = scan.next(); 
        if (fc2 == "A") 
        { 
          card2 = 14; 
        } 
        else if (fc2 == "K") 
        { 
          card2 = 13; 
        } 
        else if (fc2 == "Q") 
        { 
          card2 = 12; 
        } 
        else if (fc2 == "J") 
        { 
          card2 = 11; 
        } 
      } 

     if (card1 == card2) 

     { 
      System.out.println("You have a pair."); 
     } 
     else 
     { 
     System.out.println("Are your cards suited?(y/n): "); 
     answer = scan.nextLine(); 

      if (answer == "y") 
      { 
       if (card1 >12 && card2 > 12) 
       { 
        System.out.println("High value suited cards."); 
       } 
       else 
        if (card1 == card2++ || card1++ == card2) 
        { 
         System.out.println("Suited connectors."); 
        } 
      } 
      else 
       if(answer == "N") 
       { 
        if (card1 >=12 && card2 >= 12) 
        { 
         System.out.println("High value cards, hold."); 
        } 
        else 
         if(card1 > 5 && card2 > 5) 
         { 
          if(card1++ == card2 || card1 == card2++) 
          { 
           System.out.println("Connectors."); 
          } 
          else 
          { 
           System.out.println("Fold"); 
          } 
         if (answer != "y" || answer != "n") 
         { 
           System.out.println("Invalid entry."); 
         } 
        } 
      } 



     } 
      }     

}

+5

с использованием равных() вместо == для сравнения строк/объектов. – kosa

+4

Добро пожаловать в SO. Пожалуйста, прочитайте [FAQ] и [Ask] советы по написанию хороших вопросов SO. Пробовали ли вы запустить это в отладчике IDE и проследовать через один шаг за шагом, чтобы узнать, что происходит? Это должно быть вашим первым делом. В целом, отправляя кучу кода без каких-либо доказательств, вы предприняли попытку самостоятельно отлаживать его (т. Е. Рассказать нам, что вы сделали до сих пор), считается плохим. Кроме того, вы можете узнать, как организовать условия в инструкции switch. _. Я уверен, что вы могли бы, и это потребует всего несколько минут, чтобы прочитать инструкции 'switch'. –

+0

, но что, если ответ будет либо «Y», либо «n»? –

ответ

1

программа завершается, поскольку она занимает символ новой строки добавляется после последнего целого числа, что и конец nextLine() конечному пользователю.

Скажем, пользователь вводит 123 и прессов Введите. На данный момент, данные в буфере выглядит следующим образом:

[1] [2] [3] [\n] 

После вызова scan.nextInt() целая часть удаляется, но [\n] остается в буфере. Когда вы вызываете scan.nextLine(), этот маркер конца строки является первым символом, который видит сканер, поэтому он обрабатывает \n как пустую строку, которая возвращается в вашу программу. Вы можете исправить это, позвонив scan.nextLine(), прежде чем принимать полноразмерный вход.

Однако это само по себе не будет исправлять вашу программу, потому что вы должны сравнивать строки, используя equals(), например. как этот

if (fc1.equals("A")) 

не так, как это

if (fc1 == "A") // <<== This will not work correctly 
+0

Спасибо, очень полезно. – MGL94

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