0

アルファベットの任意の文字 (大文字または小文字)と数字を音声アルファベットに切り替えるプログラムを作成しようとしています。たとえば、「A」または「a」と入力すると、プログラムによって「Alpha」が表示されます (変更されます)。また、「1」と入力すると「One」が返ってきます。「任意の文字を入力」の側面をうまく機能させることができましたが、私のプログラムは数字を認識しません。intを入力しようとしましたが、スキャナーがこれを認識しません。コードにデフォルトを設定しましたが、それでも...うまくいきません。代わりに if ステートメントを使用する必要がありますか?

さらなる注意:これは質問ですこの質問からの続きです

ここに私がこれまでに持っているものがあります:

import java.util.Scanner;
public class PhoneticTranslate {
public static void main(String[] args) {

 int number = 0;
char letter;
String phonetic = null;

Scanner kb = new Scanner(System.in);


System.out.print("Please enter a letter or number: ");
letter = kb.next().charAt(0);

switch(Character.toUpperCase(letter))
{
case 'A':
    phonetic = "Alpha"; 
break;
case 'B':
    phonetic = "Bravo";
    break;
// ... rest of cases for letters
case 'Z':
    phonetic = "Zulu";
    break;
    default:

            Scanner x = new Scanner(System.in);
            number = kb.nextInt();

            switch(number)
            {
            case '1':
                phonetic = "One";
                break;
            case '2':
                phonetic = "Two";
                break;
                            // ... rest of cases for numbers
            case '8':
                phonetic = "Eight";
                break;
            case '9':
                phonetic = "Nine";
                break;
            }

}
            System.out.println("You Entered " +  letter + ". This letter indicates: " + phonetic);
            System.out.println("You Entered" + number + ". This number indicates: " + phonetic);


}
}
4

9 に答える 9

4

巨大な switch/case 句はコードの匂いです。これを試してください:

すべてのキーと値のペアを Map に追加してから、 で値を取得しますget。スイッチ/ケースは必要ありません。

String letter;
String phonetic;
Map<String,String> codes = new HashMap<String,String>();
codes.put("A","Alpha");
codes.put("B","Bravo");
codes.put("C","Charlie");
codes.put("D","Delta");
    // not showing all "puts" to make it shorter
codes.put("W","Whiskey");
codes.put("X","X-Ray");
codes.put("Y","Yankee");
codes.put("Z","Zulu");
codes.put("0","Zero");
codes.put("1","One");
    // not showing all "puts" to make it shorter
codes.put("9","Nine");    

Scanner kb = new Scanner(System.in);

System.out.print("Please enter a letter: ");
letter = kb.next().toUpperCase(); // convert key to uppercase

phonetic = codes.get(letter);  // search the value in the map using the key

if (phonetic == null) {
    System.out.println("bad code : " + letter);
} else {
    System.out.println("Phonetic: " + phonetic);
}
于 2012-10-18T15:34:14.790 に答える
3

あなたは文字の上にあなたのケースを書きました: -

case '1': // This is checking for character '1'

値を取るようにケースを変更する必要がありintegerます: -

switch(number) {
    case 1:
           phonetic = "One";
           break;
    case 2:
        ... so on
于 2012-10-18T15:30:50.603 に答える
0

入力値がdigit(int)であるかどうかを確認してみてください。戻らない場合

while(true){

Scanner x = new Scanner(System.in);
int number=0;    
try{
    int number = x.nextInt();
    }catch(IllegalArgumentException e){
    continue;
    }
    String phonetic = null;
    switch(number)
    {
    case 1:
        phonetic = "One";
        break;
    case 2:
        phonetic = "Two";
        break;
    case 3:
        phonetic = "Three";
        break;
    case 4:
        phonetic = "Four";
        break;
    case 5:
        phonetic = "Five";
        break;
    case 6:
        phonetic = "Six";
        break;
    case 7:
        phonetic = "Seven";
        break;
    case 8:
        phonetic = "Eight";
        break;
    case 9:
        phonetic = "Nine";
        break;
    }
}
于 2012-10-18T15:45:04.677 に答える
0

switch ステートメントは、整数の unicode char 表現をチェックしています。この仕様で'1'は、文字「1」は整数 49 に変換されます。

各値の int 表現を switch ステートメントに入れます。

switch (number) {
    case 1:
        phonetic = "One";
        break;
    case 2:
    ...
}
于 2012-10-18T15:31:31.163 に答える
0

試す:

    Scanner x = new Scanner(System.in);
    int number = x.nextInt();
    String phonetic = null;
    switch(number)
    {
    case 1:
        phonetic = "One";
        break;
    case 2:
        phonetic = "Two";
        break;
    case 3:
        phonetic = "Three";
        break;
    case 4:
        phonetic = "Four";
        break;
    case 5:
        phonetic = "Five";
        break;
    case 6:
        phonetic = "Six";
        break;
    case 7:
        phonetic = "Seven";
        break;
    case 8:
        phonetic = "Eight";
        break;
    case 9:
        phonetic = "Nine";
        break;
    }
于 2012-10-18T15:32:14.517 に答える
0

代わりに数値にASCIIコードを使用してください。とにかく、それが文字です。しかし、なぜそれをする必要があるのですか?あなたのコードはすでに機能していませんか?

于 2012-10-18T15:32:42.487 に答える
0

数値の前後に引用符を含めない (" case 1: phonetic = "One"" など) か、引き続き char 値を使用してください。どちらかが機能するはずだと思います。

于 2012-10-18T15:30:58.777 に答える
0

整数を表す文字にケースを続けます。

case 'Z':
    phonetic = "Zulu";
    break;
case '1':
    phonetic = "One";
    break;
case '2':
    // ...

これは、1 桁の数字のみを処理する場合に限り機能します。

これは問題の説明と一致しますが、 aletternumber変数の両方を保持し、それらを個別に出力すると、いくつかの追加機能が示唆されますか?

于 2012-10-18T15:32:51.677 に答える
0

これを試してみてください

package phone;

import java.util.Scanner;

public class PhoneticTranslate {

 /**
  * @param args
  */
 public static void main(String[] args) {
  int number = 0;
  char letter;
  String phonetic = null;

  Scanner kb = new Scanner(System.in);


  System.out.print("Please enter a letter or number: ");
  letter = kb.next().charAt(0);

  switch (Character.toUpperCase(letter)) {
   case 'A':
    phonetic = "Alpha";
    break;
   case 'B':
    phonetic = "Bravo";
    break;
    // ... rest of cases for letters
   case 'Z':
    phonetic = "Zulu";
    break;
   default:

    Scanner x = new Scanner(System.in);
    number = kb.nextInt();

    switch (number) {
     case 1:
      phonetic = "One";
      break;
     case 2:
      phonetic = "Two";
      break;
      // ... rest of cases for numbers
     case 8:
      phonetic = "Eight";
      break;
     case 9:
      phonetic = "Nine";
      break;
    }

  }
  System.out.println("You Entered " + letter + ". This letter indicates: " + phonetic);
  System.out.println("You Entered" + number + ". This number indicates: " + phonetic);


 }

}
于 2017-02-07T12:24:35.130 に答える