Структура переключателя:вводите почтовый индекс, чтобы связать его с географическим районом, но возвращаете только первую цифру?

StackOverflow https://stackoverflow.com//questions/20017701

Вопрос

Прежде всего, вот код, который я придумал:

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.");
            }
    }

}

(Только сегодня узнал о структурах переключателей и задался вопросом, где они были, когда мой код был полон вложенных if, lol.)

По сути, предполагается, что эта программа принимает только первую цифру почтового индекса, который вводит пользователь (который он вводит полными пятью цифрами), но я хочу, чтобы консоль печатала все пять цифр почтового индекса во время вывода.

Например, пользователь мог бы ввести 87878.Программа примет только первую цифру (которая равна 8), чтобы связать ее с определенной областью, но когда я распечатаю ее, я хочу, чтобы консоль печатала:"(почтовый индекс) находится на Западе".

Я попытался изменить тип данных почтового индекса на char, чтобы я мог использовать charAt(0) метод, о котором я узнал совсем недавно, но, учитывая предоставленный мной код, консоль распечатает это:

Enter your zip code number: 
20098
2 is an invalid ZIP Code.

Что я могу сделать, чтобы получить желаемый результат?Заранее спасибо!

Редактировать:Вот как я хочу, чтобы консоль выглядела:

Enter your zip code number: 
20098
20098 is on the East Coast.
Это было полезно?

Решение

Проблема в том, что, например, если zipCode равно '0', его значение int фактически равно 48 и не 0.

Если вы это сделаете :

char c = '0';
System.out.println((int)c);

Вы увидите, что он выводит 48.Почему ?

Потому что в Java тип данных char представляет собой один 16-битный символ Юникода (см. Таблицу кодировок ниже).

enter image description here

Если вы взглянете на эту таблицу, то увидите, что 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));

Редактировать :

Чтобы получить желаемый результат, вы можете сохранить входные данные пользователя в 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.");
        }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top