java扫描仪的相同精确输入不相等(对我来说?)

标签 java java.util.scanner

我想比较来自 Scanner 的三对输入(只是一个快速测试) 使用 Compare 方法。

当我运行这个程序时,它为所有三个输入返回 false,即使中间应该有一个 true。当我删除 Scanner 并自己放入 String 时,我得到了正确的结果

首先我认为这是由缓冲区中额外的“Enter”按钮引起的,但是当我调试它时,缓冲区中没有任何不需要的东西 并且额外的输入调用不会有任何帮助。

import java.util.Scanner; 

 public class MainSector {
    String Primary, Secondary;

    MainSector(String Primary, String Secondary){
        this.Primary = Primary;
        this.Secondary = Secondary;
    }

MainSector(int Primary, int Secondary) {
    this.Primary = String.valueOf(Primary);
    this.Secondary = String.valueOf(Secondary);
    }

boolean Compare(MainSector x){
    return (x.Primary == Primary && x.Secondary == Secondary );

    }

}


public class Test {
    public static void main(String[] args) {
        Scanner u = new Scanner(System.in);
        Scanner y = new Scanner(System.in);

        System.out.println("Enter String:");
        MainSector Sector1 = new MainSector(u.nextLine(),y.nextLine());

        System.out.println("Enter String:");
        MainSector Sector2 = new MainSector(u.nextLine(),y.nextLine());

        System.out.println("Enter Integer:");
        MainSector Sector3 = new MainSector(u.nextInt(),y.nextInt());


        System.out.println(Sector1.Compare(Sector2));
        System.out.println(Sector1.Compare(Sector3));
        System.out.println(Sector2.Compare(Sector3));


    }
}

即使前两个输入完全相同,它也会在这里返回 3 次 false 。例如,我得到了正确的结果:

System.out.println("Enter String:");
MainSector Sector1 = new MainSector("aa","bb");

System.out.println("Enter String:");
MainSector Sector2 = new MainSector("aa","bb");

System.out.println("Enter Integer:");
MainSector Sector3 = new MainSector(45,65);

它返回:

真实

最佳答案

你的问题在于你的比较方法;使用 == 比较引用值。由于您在比较中使用不同的对象,因此在这种情况下它们永远不会具有相同的引用值。您需要使用 .equals(Object) 来比较确切的值。我编辑了下面的代码来反射(reflect)这一点并对其进行了测试。
另外,您实际上不需要两台扫描仪来完成此操作,您可以使用一台!与往常一样,请记住关闭扫描仪;这是一个很好的做法。

import java.util.Scanner; 



 class MainSector {
    String Primary, Secondary;

    MainSector(String Primary, String Secondary){
        this.Primary = Primary;
        this.Secondary = Secondary;
    }

MainSector(int Primary, int Secondary) {
    this.Primary = Integer.toString(Primary);
    this.Secondary = Integer.toString(Secondary);
    }

//Note the changes made to this method!
    boolean Compare(MainSector x){
        return ((x.Primary.equals(Primary)) && (x.Secondary.equals(Secondary)));

        }
} //End MainSector


public class Test {
    public static void main(String[] args) {
        Scanner u = new Scanner(System.in);

        System.out.println("Enter String:");
        MainSector Sector1 = new MainSector(u.nextLine(),u.nextLine());

        System.out.println("Enter String:");
        MainSector Sector2 = new MainSector(u.nextLine(),u.nextLine());

        System.out.println("Enter Integer:");
        MainSector Sector3 = new MainSector(u.nextInt(),u.nextInt());


        System.out.println(Sector1.Compare(Sector2));
        System.out.println(Sector1.Compare(Sector3));
        System.out.println(Sector2.Compare(Sector3));

        u.close();
    } //End main
} //End Test


我发现了一篇很棒的帖子,如果您想了解更多信息,其中的答案非常详细地解释:How do I compare Strings in Java?

关于java扫描仪的相同精确输入不相等(对我来说?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28811326/

相关文章:

java - 在 Spring 中将列表绑定(bind)到复选框

java - Hadoop 1.2.1:将jars放在hdfs中的类路径中

java - 线程中的异常 "main"java.lang.NumberFormatException : For input string: "1"

java - Java 正则表达式库是否针对任何字符进行了优化。*?

JAVA正则表达式包含字母中间带点的单词以及包含带点的特殊单词

java - 读取大型文本文件、垃圾收集器和 Scanner 对象的问题

java - 是否可以使用 Scanner、PrintWriter 处理 arrayList

java - 如何使用 Scanner.hasNextInt() 检查接下来的 3 个输入是否为 int 并仅在 java 中循环

java - 在 vaadin 表中按类类型对齐所有值?

java - 使用 FileReader 和 Scanner 读取文件