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