我遇到了一些Java编程问题而且我对比较操作数如何在输入之间起作用感到很困惑。
我想要的是我的程序接收输入,分析输入,检查它等于什么,并根据输入显示消息。我如何将输入与我设置的option1
变量进行比较?
这是一个名为 loadfile.java
的文件package subsets;
import java.io.*;
import java.util.Scanner;
public class loadfile {
public static void main(String args[]) {
}
public static void choose(String[] args) {
// Set an option
int option1 = 1;
// Start grabbing input
System.out.print("Choose one: ");
Scanner scanner = new Scanner( System.in );
String input = scanner.nextLine();
// Parse input into an integer (expecting int)
int selection = Integer.parseInt(input);
// If input == option1, let's go with this code.
if(input.equals(option1)){
System.out.println("You choose option 1.");
}
}
}
我在另一个文件中有loadfile.choose(args);
,该文件处理我将要实现的其余文件。
此处有以下文件: otherfile.java
package subsets;
public class otherfile {
public static void main(String args[]){
System.out.println("Please select an option (using number keys): \n");
System.out.println(
"1. Option 1 \n"
+ "2. Option 2 \n"
+ "3. Option 3 \n"
+ "4. option 4 \n");
// Start analyzing their choice
loadfile.choose(args);
}
}
答案 0 :(得分:1)
您可以将int option1 = 1;
更改为String option1 = "1";
或将用户输入解析为整数,或执行scanner.nextInt()
而不是nextLine
这里有很多选项可以解决此问题。 Integer.parseInt(String)
。
答案 1 :(得分:1)
equals()
仅在相同类型的对象之间有效。
int
甚至不是一个对象,但是当Java将它作为参数传递给期望Integer
的方法时,它会隐式地将它转换为Object
对象({{1} }}是Integer
- 所有类都扩展Object
)。
但现在Object
将equals
对象与String
对象进行比较。由于它们的类型不同,因此总是错误的。
为了正确地进行比较,你必须通过解析来获得Integer
中字符串的整数。例如,使用int
。
而且......你做到了这一点,但你忘了使用你的手术结果。您拥有Integer.parseInt()
变量,只需比较selection
而不是selection
。
当然,在这种情况下,您只需使用input
而不是selection == option1
,因为equals
是原始的,并且没有方法。
答案 2 :(得分:0)
通常,在比较不同类型的对象时,A - flight_date
B - plane ticket price
C - source_airport_country
D - ticket holder names
E - address
F - source airport
G - Pilot_name
H - Pilot_grade
I - Plane_id
方法会不返回true。这是equals
:
String#equals(Object)
请注意支票public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
。
在你的情况下,我不明白为什么不这样做:
if (anObject instanceof String)
因为您已经获得了if (selection == option1) {
变量。