-1

有人可以向我解释为什么当输入 !sdesf 作为邮政编码时它说 !sdesf 在东海岸。不应该是 !sdesf 是一个无效的邮政编码。这是我的代码

String zipCode;

    Scanner input = new Scanner(System.in);


    System.out.print("Enter 4-digit zip code: ");
    zipCode = input.nextLine();

    if (zipCode.charAt(0) <= '3')
        System.out.println(zipCode + " is on the East Coast.");

    if (zipCode.charAt(0) >= '4')
        if (zipCode.charAt(0) <= '6')
            System.out.println(zipCode + " is in the Central Plains area.");

    if (zipCode.charAt(0) == '7')
        System.out.println(zipCode + " is in the South.");

    if (zipCode.charAt(0) >= '8')
        if (zipCode.charAt(0) <= '9')
            System.out.println(zipCode + " is in the West.");

    else
        System.out.println(zipCode + " is an invalid ZIP Code.");   
4

2 回答 2

3

该字符'!'之前出现'3'在 Unicode 中,所以它进入第一个if.

在尝试弄清楚它在地理上的含义之前,您应该验证邮政编码是否有效。

可能想使用正则表达式来验证它 - 但如果您是编程新手,使用循环并检查每个字符是否大于或等于'0'且小于或等于可能会更简单'9'(可能美国邮政编码的规则更复杂 - 我不知道。)

else请注意,如果您在每个语句周围使用大括号,则您的代码在您希望在哪里有用方面会更加清晰。例如,最后我怀疑你的意思是等同于:

if (zipCode.charAt(0) >= '8') {
    if (zipCode.charAt(0) <= '9') {
        System.out.println(zipCode + " is in the West.");
    }
} else {
    System.out.println(zipCode + " is an invalid ZIP Code.");
}

请注意,这将使每个'8'不以大于或等于开头的邮政编码无效,并且不会对以大于或等于开头的邮政编码做任何事情'9'。基本上,你需要重新审视你是如何做这一切的......

不过,正如我之前建议的那样,我认为 switch 语句会更清晰:

switch (zipCode.charAt(0)) {
    case '0': // Is this valid?
    case '1':
    case '2':
    case '3':
        System.out.println(zipCode + " is on the East Coast.");
        break;
    case '4':
    case '5':
    case '6':
        System.out.println(zipCode + " is in the Central Plains area."
        break;
    case '7':
        System.out.println(zipCode + " is in the South."
        break;
    case '8':
    case '9':
        System.out.println(zipCode + " is in the West."
        break;
    default: // This handles any other character
        System.out.println(zipCode + " is an invalid ZIP Code.");
        break;
}
于 2012-12-01T09:36:30.563 回答
0

你在比较人物。

字符根据其 ASCII 值进行比较。

在这种情况下,'!' 的 ASCII 值小于 '3' 的 ASCII 值,因此您将得到输出:

!sdesf is on the East Coast
于 2012-12-01T09:39:37.393 回答