-1

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

2 に答える 2

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 ステートメントの方が明確になると思います。

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;
}
于 2012-12-01T09:36:30.563 に答える
0

キャラクターを比較しています。

文字は、ASCII 値に基づいて比較されます。

この場合、'!' の ASCII 値は '3' の ASCII 値より小さいため、次の出力が得られます。

!sdesf is on the East Coast
于 2012-12-01T09:39:37.393 に答える