Java .equals()方法似乎不适合我

Java .equals()方法似乎不适合我,java,string,Java,String,我需要打印“输入数字”或“X”以关闭并获得用户输入。我需要它来检测输入是字符串还是int。我将输入设为字符串,然后解析int,但是.equals方法没有检测它是否是X,b/c如果我输入任何其他字母或字符串,它将终止它,我希望它仅以X或X终止 我的朋友告诉我尝试一个switch语句,但idk id如何做,我已经尝试解析一个字符串 while(input.hasNextInt()){ String x = input.nextLine(); if ("x"

我需要打印“输入数字”或“X”以关闭并获得用户输入。我需要它来检测输入是字符串还是int。我将输入设为字符串,然后解析int,但是.equals方法没有检测它是否是X,b/c如果我输入任何其他字母或字符串,它将终止它,我希望它仅以X或X终止

我的朋友告诉我尝试一个switch语句,但idk id如何做,我已经尝试解析一个字符串

while(input.hasNextInt()){
           String x = input.nextLine();
           if ("x".equals("Exit")||x.equals("x")) {
               System.out.print("Exiting...");
               System.exit(0);
           }
           numbers.add(Integer.parseInt(x));
           Collections.sort(numbers);
           for (int i=0; i < numbers.size(); i++) {
               System.out.print(numbers.get(i)+" ");
           }
输入数字或X以关闭:4 4. 平均值:4.0,中位数:4,这是你的最小值:4,这是你的最大值:4

输入编号:q

^当我输入任何其他字母或字符串时,它终止

while(input.hasNextInt())

如果输入x或任何其他非数字,hasNextInt将返回false,while循环结束。

您的代码不接受字符串输入,因为您的while条件只接受int值

    while(input.hasNextInt())
你可以试着把它改成-

    while(input.hasNext()){

    }
如果条件如下,您也可以尝试更改-

    if(x.equalsIgnoreCase("x")){
            // your code here
    }
若你们想同时退出程序以退出,你们可以把它添加到条件中-

    if(x.equalsIgnoreCase("x") || x.equalsIgnoreCase("exit"){
           // your code here
    }

让它工作,这是while循环

这不是equals方法的问题。您应该使用input.hasNext而不是input.hasNextInt

检查字符串而不是变量是否相等也是一个好主意。 试试这个


提示:如果使用Java 7或更高版本,请始终初始化try块内的资源,如果知道何时关闭,请显式关闭它。

我使您的代码也能正常工作:

            Scanner input = new Scanner(System.in);
    List<Integer> numbers = new ArrayList<>();
    while (true) {
        String x = input.nextLine();
        if (x.equals("Exit") || x.equals("x")) {
            numbers.stream().sorted().forEach(
                (number) -> System.out.print(number + " "));
            System.out.print("Exiting...");
            System.exit(0);
        }

        try { // If the entered value isn't a number.
            numbers.add(Integer.parseInt(x));
        } catch (NumberFormatException e) {
            System.out.println("The next value : " + x + "isn't a number. It wasn't added in the list");
        }
    }
然后,如果在应用程序运行时在终端中输入以下内容,则显示结果:

进入11 22 33和退出的第一个病例:

十一, 22 33 退出=> 11 22 33退出

第二种情况下只有x,没有其他:

x=> 退出

值不正确的aa:

十一, 22 aa 下一个值:aa不是数字。它没有被添加到列表中 33 x=>

11 22 33退出


x、 equalsExit将始终为false。这听起来是开始学习的好时机。很可能,x不是你想象的那样,甚至不是你想象中的那样。数字是什么?我调试程序,它将我带到一个名为Premain$1的堆栈。transformClassLoader,String,Class,ProtectionDomain,byte[]行:45.hasNextLine?输入数字或X以关闭:退出退出主线程java.lang.NumberFormatException中的异常:对于输入字符串:退出java.lang.NumberFormatException.forInputStringUnknown源于java.lang.Integer.parseIntUnknown源于java.lang.Integer.parseIntUnknown源于idkm8.Statistics.getStatistics.java:21 atidkm8.Main.mainMain.java:10@CalebFoster对于输入字符串:退出。如果按照问题注释中的建议将x.equalsExit更改为x.equalsExit,则不应访问parseInt。关闭链接到System.in的扫描仪可能会关闭System.in,这是错误的。如果您没有打开资源,请不要关闭它。检查字符串而不是变量是否相等也是一个好主意-奇怪,为什么?@Fureeish如果变量为null,我们将得到一个NullPointerException。这有时可能是相关的,但我还不认为这是一个通用的准则。@Fureeish true。因此,这是一个好主意,而不是你必须始终坚持
try (Scanner input = new Scanner(System.in)) {
        List<Integer> numbers = new ArrayList<Integer>();
        while (input.hasNext()) {
            String x = input.nextLine();
            if ("Exit".equals(x) || "x".equals(x)) {
                System.out.print("Exiting...");
                input.close();
                System.exit(0);
            }
            numbers.add(Integer.parseInt(x));
            Collections.sort(numbers);
            for (int i = 0; i < numbers.size(); i++) {
                System.out.print(numbers.get(i) + " ");
            }
        }
    }
            Scanner input = new Scanner(System.in);
    List<Integer> numbers = new ArrayList<>();
    while (true) {
        String x = input.nextLine();
        if (x.equals("Exit") || x.equals("x")) {
            numbers.stream().sorted().forEach(
                (number) -> System.out.print(number + " "));
            System.out.print("Exiting...");
            System.exit(0);
        }

        try { // If the entered value isn't a number.
            numbers.add(Integer.parseInt(x));
        } catch (NumberFormatException e) {
            System.out.println("The next value : " + x + "isn't a number. It wasn't added in the list");
        }
    }