我想比较来自 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/