【问题标题】:How can I get this switch statement to recognize integers?如何让这个 switch 语句识别整数?
【发布时间】:2012-10-09 02:54:49
【问题描述】:

我正在尝试编写一个程序,它将字母表中的任何字母(大写或小写)AND 数字 转换为拼音字母表。例如,如果我输入“A”或“a”,我的程序会给我(将其更改为)“Alpha”。此外,如果我输入“1”,它将返回“一”。我已经成功地处理了它的“输入任何字母”方面,但我的程序无法识别数字。我尝试输入 int,但我的扫描仪无法识别这一点。我在我的代码中放了一个 default 但仍然......没有占上风。我应该改用 if 语句吗?

补充说明: 这是question的延续@

这是我目前所得到的:

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);


}
}

【问题讨论】:

    标签: java int switch-statement java.util.scanner


    【解决方案1】:

    巨大的 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);
    }
    

    【讨论】:

      【解决方案2】:

      你已经用字符写了你的案例:-

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

      您需要更改您的案例以采用integer 值:-

      switch(number) {
          case 1:
                 phonetic = "One";
                 break;
          case 2:
              ... so on
      

      【讨论】:

      • @Rohit Jain 这太棒了!我已经这样做了,它可以工作,但是当我输入一个整数时,我必须输入两次。我认为这与有两个扫描仪这一事实有关。有没有办法让我不必输入两次数字??
      • @user1753668。好吧,我会说,您不应该为整数使用不同的开关盒。继续使用之前的扫描仪,并使用“1”、“2”等进行测试。这将是一种更好的方法。
      • @user1753668 但是让我看看你为什么会遇到当前的问题。
      • @user1753668 你去吧..你已经定义了一个扫描器变量x,但正在使用kb -> number = kb.nextInt();.. 将它更改为: - number = x.nextInt(); 在你的开关之前 -整数大小写开始。
      • @RohitJain 我没有意识到 OP 正在调用 nextInt(),这听起来像是在这种情况下的正确答案
      【解决方案3】:

      不要在数字周围加上引号(" case 1: phonetic = "One"" 等),或者继续使用 char 值。我认为任何一个都应该工作。

      【讨论】:

        【解决方案4】:

        您的 switch 语句正在检查整数的 unicode char 表示形式。根据本规范,'1' 是字符“1”,转换为整数 49。

        将每个值的int表示形式放入switch语句中:

        switch (number) {
            case 1:
                phonetic = "One";
                break;
            case 2:
            ...
        }
        

        【讨论】:

          【解决方案5】:

          试试:

              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;
              }
          

          【讨论】:

            【解决方案6】:

            使用 ASCII 码代替数字,这就是字符。但是为什么你需要这样做呢?你的代码不是已经工作了吗?

            【讨论】:

              【解决方案7】:

              继续你的案例到代表整数的字符:

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

              只要您只想处理一位数字,这将起作用。

              这与您的问题描述相符,但同时保留 letternumber 变量并将它们分别打印出来暗示了一些额外的功能?

              【讨论】:

                【解决方案8】:

                您可以尝试检查输入值是否为数字(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;
                    }
                }
                

                【讨论】:

                  【解决方案9】:

                  先生试试这个

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2022-10-01
                    • 1970-01-01
                    • 2015-03-18
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多