切换结构:输入邮政编码以将其与地理区域相关联但仅返回第一个数字?

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)

Ale*_* C. 5

问题是,例如,如果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.

所以要避免这种情况:

  1. 将案例标签更改为case 48: case 50: case 51(for 0,2,3)等
  2. 更改案例标签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)