【发布时间】:2021-07-19 20:42:02
【问题描述】:
package Tutorial;
import java.util.Scanner;
public class Tutorial {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String name="revolt";
int password=0123;
String Name;
int Password;
System.out.println("enter name;");
Name=sc.nextLine();
if (Name.equals(name)){
System.out.println("enter password");
}
else{
System.out.println("wrong Name");
}
Password=sc.nextInt();
if (password==Password){
System.out.println("access granted...");
}
else{
System.out.println("wrong
Password!");
}
}
}
代码没有显示任何错误,但是当我输入密码时,即使密码正确,它也会告诉我密码错误。
【问题讨论】:
-
不用详细介绍您的代码,您知道数字
0123是对应于83decimal 的八进制数,对吗? -
请不要使用同名的变量。这是一个非常糟糕的做法,你不应该从它开始。而是为您的变量提供描述性名称 - 因此您可以使用 passwordInput 或类似的东西,而不是 Password。
-
@EdithStark 嗯,很明显的推断是密码是 83,而不是 123 或 0123。我相信这可能是你的问题,对吧?
-
你为什么使用 int 作为你的密码?鉴于整数不能以 0 开头,您应该改用
String。确保您记得使用str.equals()来比较字符串。 -
@EdithStark 在我的第一条评论中进行了解释。以前缀
0开头的字面整数被 Java 解释为八进制数(例如 0123),就像任何以0x开头的数字都是十六进制数而0b是二进制数一样。但是,当您从命令行提供整数时,您会提供一个以 10 为底的数字。
标签: java