bra*_*ead 1 java zipcode char switch-statement
在其他所有事情之前,这是我提出的代码:
package decision;
import java.util.Scanner;
public class ZIP {
public static void main(String[] args) {
Scanner input=new Scanner (System.in);
char zipCode;
System.out.println("Enter your zip code number: ");
zipCode=input.next().charAt(0);
switch (zipCode) {
case 0: 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:
System.out.println(zipCode + " is an invalid ZIP Code.");
}
}
}
Run Code Online (Sandbox Code Playgroud)
(刚刚了解了交换机结构,并想知道当我的代码充满嵌套时它们在哪里,如果是lol.)
基本上,这个程序应该只接受用户输入的邮政编码的第一个数字(他输入全部 - 五位数)但我希望控制台在输出期间打印邮政编码的所有五位数字.
例如,用户会输入87878.该程序只接受第一个数字(即8)将其与特定区域相关联,但当我打印出来时,我希望控制台打印:"(zipCode)在西方."
我已经尝试将zipCode的数据类型更改为char,这样我就可以使用charAt(0)我最近才学到的方法,但鉴于我提供的代码,控制台会将其打印出来:
Enter your zip code number:
20098
2 is an invalid ZIP Code.
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能得到我想要的输出?提前致谢!
编辑:这就是我想要控制台的样子:
Enter your zip code number:
20098
20098 is on the East Coast.
Run Code Online (Sandbox Code Playgroud)
问题是,例如,如果zipCode等于'0',则其int值实际上等于48和不等于0.
如果你这样做:
char c = '0';
System.out.println((int)c);
Run Code Online (Sandbox Code Playgroud)
你会看到它输出48.为什么?
因为在Java中,char数据类型是单个16位Unicode字符(请参阅下面的编码表).

如果你看一下这个表,你会看到0被编码为0x0030 = 3*16^1 = 48,1为0x0031 = 3*16^1 + 1*16^0 = 49.
所以要避免这种情况:
case 48: case 50: case 51(for 0,2,3)等case '0': case '2': case '3'等.就个人而言,我会建议你第二个解决方案,实际上更清晰,更简单.
在这里演示.
如果要在案例标签中继续测试整数值,可以执行以下操作:
int zipCode = Character.getNumericValue(input.next().charAt(0));
Run Code Online (Sandbox Code Playgroud)
编辑:
要获得所需的输出,可以将用户的输入存储在String变量中.
System.out.println("Enter your zip code number: ");
String code = input.next();
char zipCode = code.charAt(0);
switch (zipCode) {
case '0': case '2': case '3':
System.out.println(code + " is on the East Coast.");
break;
/**/
default:
System.out.println(code + " is an invalid ZIP Code.");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
950 次 |
| 最近记录: |