我遇到以下if statement block
的问题:
public void viewaccount ( ) {
Scanner getinput = new Scanner(System.in);
System.out.println("Enter your account number to log in");
int login = getinput.nextInt();
if (login.equals("accnumber")) { // <== here
/* to be written */
}
}
答案 0 :(得分:2)
.equals(String)
是一种检查两个字符串是否包含相同字符/文本的方法。显然,你不能在int上调用.equals()
来检查它是否包含与字符串相同的字符,因为int不包含字符(当然,它转换为人类可读的形式)。
如果您想检查用户是否输入了正确的帐号,您应该执行以下操作:
public void viewaccount() {
Scanner getinput = new Scanner(System.in);
System.out.println("Enter your account number to log in");
int login = getinput.nextInt();
// Correct account number:
int correctAccountNumber = 1234567;
if (login == correctAccountNumber) {
// Hooray! Success.
}else{
System.out.println("You have entered the incorrect account number.");
}
}
如果在真实世界的应用程序中使用它,那么从安全角度来看,这将是一场噩梦,但对于学习,这应该可以解决您的问题。
为了让您更深入地了解.equals()
的工作原理,我建议您阅读the Java Objects
class。 int
是primitive data type,因此它没有像String
那样内置的方法。 String
被视为composite data type,允许String
拥有.length()
,.equals()
,.trim()
等方法和属性。
在Java中,所有类都有Object
作为超类,它允许所有类和复合数据类型继承.equals()
,.hashcode()
和.toString()
等方法,但是最重要的是,所有复合数据类型也可以实现自己的方法。例如,Integer
数据类型(它是基元int
的包装器)添加了.parseInt()
和.compare()
等函数。
与大多数语言不同,Java为所有这些数据类型提供原始数据类型和内置包装类。 int
有Integer
。 boolean
有Boolean
。 long
有Long
。 char
有Character
。所有其他原始类型的列表都会继续。
答案 1 :(得分:0)
equals
方法是类Object
的方法。原始类型(如int
)不是对象,也无法访问equals
方法。
如果要比较基元类型,则必须使用==
。在您的情况下,您尝试将int
(这是一个数字)与String
(这是一个文本)进行比较,这没有意义 - 它始终是false
< / p>
也许在你的情况下你应该像这样读取输入:
String login = getinput.next();
然后您可以使用equals
方法,因为login
变量的类型为String
,其范围为Object
,可与equals
进行比较。< / p>
修改强>:
如果您仍想将数据作为数字读取,则应将登录变量从int转换为String,以便将其与另一个String进行比较。
这样做是这样的:
int login = getinput.nextInt();
if (String.valueOf(login).equals("accnumber")) {
/* to be written */
}
当然,这总是会返回false,所以只有当你给出的String
字面值类似于“131423”时才会有效。我真的希望这个“accnumber”是一个虚拟字符串,仅用于示例。否则我没有看到任何其他好的方法。
答案 2 :(得分:0)
如果要比较int,则不需要使用.equals()方法。由于您将输入转换为int,因此可以使用“==”将一个int与另一个int进行比较。此外,“accnumber”需要初始化为int变量。
答案 3 :(得分:-1)
只需抓住下一个字符串而不是下一个字符串。
String input = getInput.next();
input.equals("accountNumber");