Java:在手机键盘上将字母转换为数字

时间:2016-02-29 22:29:34

标签: java if-statement boolean logical-operators

我正在为一个班级工作,我需要将一个字母的用户输入转换为电话号码。与A=2K=5一样。我将用户输入转换为大写,然后转换为ASCII。我正在使用ASCII作为我的if / else,它编译并运行但总是打印

System.out.println (x+"'s corrosponding digit is " + 2); 

无论我输入什么字母,也是最后一行

else System.err.println("invalid char " + x);

不起作用,只打印出数字2x就是我输入的内容。

public class Phone {

    public static void main (String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println ("Please enter a letter from A-Z.");
        char x = input.next().charAt(0);
        x = Character.toUpperCase(x);
        int y = x;
        System.out.println ("You entered the letter " + x);

        if (y>=65 || y<=67)
            System.out.println (x+"'s corrosponding digit is " + 2);
        else if (y>=68 || y<=70)
            System.out.println (x+"'s corrosponding digit is " + 3);
        else if (y>=71 || y<=73)
            System.out.println (x+"'s corrosponding digit is " + 4);
        else if (y>=74 || y<=76)
            System.out.println (x+"'s corrosponding digit is " + 5);
        else if (y>=77 || y<=79)
            System.out.println (x+"'s corrosponding digit is " + 6);
        else if (y>=80 || y<=83)
            System.out.println (x+"'s corrosponding digit is " + 7);
        else if (y>=84 || y<=86)
            System.out.println (x+"'s corrosponding digit is " + 8);
        else if (y>=87 || y<=90)
            System.out.println (x+"'s corrosponding digit is " + 9);
        else System.err.println("invalid char " + x);           
    }   
}   

5 个答案:

答案 0 :(得分:1)

替换||与&amp;&amp;在你的if else陈述中。

答案 1 :(得分:1)

在你的if-block上,你的第一个条件是if (y>=65 || y<=67)。让我们稍微打开一下:

IF ( y >= 65 ) OR ( y <= 67 )

你看到了这个问题吗?由于你编写了一个OR,整个语句总是会计算为true:对于任何一个y,y必须大于65或小于67.我怀疑你打算写一个AND({{1 }})。

答案 2 :(得分:1)

您的条件有误,请将[centos@master ~]$ sudo su - vora [vora@master ~]$ 更改为||

&&

并纠正所有条件。

拥有示例if (y>=65 && y<=67) ... 。这意味着条件总是(y>=65 || y<=67),因为任何true总是大于或等于65 smaler或等于67(难以解释)。如果要检查,如果两个条件一次都为真,则必须使用y

答案 3 :(得分:1)

您的第一个条件是if (y>=65 || y<=67),对于任何字符,如果满足这两个条件中的任何一个,它将打印x+"'s corrosponding digit is " + 2并且永远不会检查任何其他else if条件。您需要在所有条件下将||运算符替换为&&运算符。

答案 4 :(得分:1)

为什么不能这样:

char x = input.next().charAt(0);
x = Character.toUpperCase(x);
int digit = 0;
switch (x ) {
   case 'A': case 'B': case 'C':
      digit = 1;
      break;
   case 'D': case'E': case 'F':
      digit = 2;
      break;
   //etc.
   default:
      break;
}
if ( digit < 1 ) {
   System.out.println( "The letter " + x + " is not on a phone pad" );
} else {
   System.out.println( "x + "'s corrosponding digit is " + digit);
}

请注意,有些手机可能会使用不同的字母组合;例如,有些手机使用“PQRS”代表7,有些使用“PRS”,省略Q.