Java 基本程序终止

Java 基本程序终止,java,eclipse,if-statement,Java,Eclipse,If Statement,该程序旨在扫描用户收到的前两张卡,并告诉他们有什么。不幸的是,当它询问“卡片合适吗?”:“它在输入之前终止。我还可以学习如何在switch语句中组织条件,而不是所有这些丑陋的if-else语句 package Test; import java.util.Scanner; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub

该程序旨在扫描用户收到的前两张卡,并告诉他们有什么。不幸的是,当它询问“卡片合适吗?”:“它在输入之前终止。我还可以学习如何在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.");
                        }
                     }
             }



         }
             }                

}

程序终止,因为它将最终用户在最后一个整数后添加的换行符作为
nextLine()
的结尾

假设用户输入
123
并按Enter键。此时,缓冲区中的数据如下所示:

[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
不是这样的

if (fc1.equals("A"))
if (fc1 == "A") // <<== This will not work correctly

if(fc1==“A”)//使用equals()代替==进行字符串/对象比较。欢迎使用SO。请阅读和,以获取有关编写好SO问题的提示。您是否尝试过在IDE调试器中运行此代码,并一步一步地遍历代码以查看发生了什么?这应该是你的第一次努力。一般来说,在没有证据的情况下发布一堆代码(例如,告诉我们您到目前为止做了什么)被认为是不好的形式。此外,您“可以学习如何在switch语句中组织条件”。我相信你可以,那只需要花几分钟阅读
switch
语句。但是如果答案是
Y
n
?@Nambari那么,你认为这个问题在stackoverflow上被问了多少次?看在上帝的份上,除了这个问题中所说的一切之外,使用枚举!!!!!!!!!!谢谢,非常有帮助。