该代码在某些情况下有效,但根据输入的顺序提供不同的输出

The code works in some cases but gives different outputs based on the sequence of the input

提问人:vlad19 提问时间:7/2/2022 最后编辑:helvetevlad19 更新时间:7/7/2022 访问量:113

问:

预期输出应如下所示:

Download
String: Welcome to HackerRank's Java tutorials!
Double: 3.1415
Int: 42

我的代码根据我最初输入的内容给出不同的输出。 如果可能的话,请解释我哪里出了问题。 先谢谢你。

public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int   count = 1;
        String typeCase = "";



        while (count<4) {

            if (!sc.hasNext("[0-9]+[\\.]?[0-9]*") || sc.hasNext(":ascii:")) {

                typeCase = "String:";
                count++;

            } else if (sc.hasNextInt()) {

                typeCase = "Int:";
                count++;

            } else if (sc.hasNextDouble()) {


                typeCase = "Double:";
                count++;

            }

            switch (typeCase) {
                case "String:":
                    typeCase = "String: ";
                    System.out.println(typeCase + sc.nextLine());
                    break;
                case "Int:":
                    typeCase = "Int: ";
                     System.out.println(typeCase + sc.nextInt());
                    break;
                case "Double:":
                    typeCase = "Double: ";
                     System.out.println(typeCase + sc.nextDouble());
                    break;
            }
        }
    }
java 字符串 if-statement switch-statement java.util.scanner

评论

1赞 Kaan 7/2/2022
您能否提供具体的投入、实际产出和预期产出?
0赞 Community 7/2/2022
请澄清您的具体问题或提供其他详细信息,以准确说明您的需求。正如目前所写的那样,很难确切地说出你在问什么。
0赞 vlad19 7/7/2022
输入应为:
0赞 vlad19 7/7/2022
对不起,我是新手,输入应该是 int、double 和 String。预期的输出应如下所示: String: 欢迎来到 HackerRank 的 Java 教程!双倍: 3.1415 整数: 42 感谢您的回复 :)
0赞 vlad19 7/7/2022
我需要将几个不同的输入放入扫描仪中,并根据我提供的数据类型接收排序的输出。很抱歉不清楚,感谢您的回复!

答:

0赞 RohithPg 7/2/2022 #1

我认为,如果您确定整数和双精度输入将出现在它们自己的行中,那么更改下面的开关外壳块应该可以解决您的问题(如果没有,您将从此解决方案中获得有关重组代码以实现此类情况的提示)。在每个 sc.nextInt() 和 sc.nextDouble() 之后使用 sc.nextLine(),因为这些方法不会读取换行符。编辑:编辑答案,因为您似乎希望按 String、double 和 int 的顺序打印输出。您可以暂时存储扫描仪中的值,并在以后以所需的任何顺序打印它。请注意,我现在已经取下了开关盒



    public static void main(String[] args) {
        // TODO Auto-generated method stub
         Scanner sc = new Scanner(System.in);
            int   count = 1;
            String typeCaseString = "";
            String typeCaseInt = "";
            String typeCaseDouble = "";

            while (count<4) {

                if (!sc.hasNext("[0-9]+[\\.]?[0-9]*") || sc.hasNext(":ascii:")) {

                    typeCaseString = "String:"+sc.nextLine();
                    count++;

                } else if (sc.hasNextInt()) {

                    typeCaseInt = "Int:"+sc.nextInt();
                    sc.nextLine();
                    count++;

                } else if (sc.hasNextDouble()) {
                    typeCaseDouble = "Double:"+sc.nextDouble();
                     sc.nextLine();
                    count++;
                }
            }
            System.out.println(typeCaseString);
            System.out.println(typeCaseDouble);
            System.out.println(typeCaseInt);

    }