虽然循环没有捕获(Java)

时间:2018-01-24 00:26:10

标签: java

见标题。 当我输入引脚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
  }
}

提前致谢!

3 个答案:

答案 0 :(得分:1)

我认为已经确定整数数据类型不能包含前导零,并且您应该使用字符串。但是,如果您想知道为什么会这样,那是因为Java有特殊的代码来接受其他格式的整数(例如十六进制,八进制或二进制),并且这些代码正在添加0b或类似的代码。前面的数字。因此,java会锁定整数数据类型上的任何前导零,除非它们与数字格式代码匹配。

答案 1 :(得分:0)

Scanner.nextInt()从输入中返回下一个整数值。当以数字方式存储时,前导零是无关紧要的(在这种情况下它们是格式化问题)。

相反,您可能会考虑读取一个字符串,然后在将其转换为整数之前和/或之后检查长度(取决于您是否要允许空格等),或者一次读取每个十进制数字到一个数组然后检查数组的长度等。

答案 2 :(得分:0)

您的程序正在使用keyboard.nextInt(),它会将字符串02020转换为整数2020。您应将其存储为String