见标题。 当我输入引脚02020或以0开头的任何5位数时,我得到了回复:
PIN 2020 accepted!
我的代码应该用while循环捕获它并再次询问引脚。为什么不呢?
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("Enter 4 Digit 1111PIN: ");
Scanner keyboard = new Scanner(System.in);
int pin = keyboard.nextInt();
int lengththing = String.valueOf(pin).length();
while(lengththing < 4 || lengththing > 4) {
System.out.println("Incorrect pin. Re-enter PIN: ");
pin = keyboard.nextInt();
lengththing = String.valueOf(pin).length();
}
System.out.println("PIN " + pin + " accepted! Welcome retr0_err!");
//Joke username
}
}
提前致谢!
答案 0 :(得分:1)
我认为已经确定整数数据类型不能包含前导零,并且您应该使用字符串。但是,如果您想知道为什么会这样,那是因为Java有特殊的代码来接受其他格式的整数(例如十六进制,八进制或二进制),并且这些代码正在添加0b
或类似的代码。前面的数字。因此,java会锁定整数数据类型上的任何前导零,除非它们与数字格式代码匹配。
答案 1 :(得分:0)
Scanner.nextInt()从输入中返回下一个整数值。当以数字方式存储时,前导零是无关紧要的(在这种情况下它们是格式化问题)。
相反,您可能会考虑读取一个字符串,然后在将其转换为整数之前和/或之后检查长度(取决于您是否要允许空格等),或者一次读取每个十进制数字到一个数组然后检查数组的长度等。
答案 2 :(得分:0)
您的程序正在使用keyboard.nextInt()
,它会将字符串02020
转换为整数2020
。您应将其存储为String
。