Java zipcode prog2

时间:2012-12-01 09:34:26

标签: java

有人可以向我解释为什么何时输入!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.");   

2 个答案:

答案 0 :(得分:3)

字符'!'出现在Unicode '3'之前,因此它会进入第一个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 (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;
}

答案 1 :(得分:0)

您正在比较角色。

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

在这种情况下'!'的ASCII值小于'3的ASCII值,所以你得到输出:

!sdesf is on the East Coast