只启动java,需要一个程序将手机按钮上的字母转换为数字。
e.g。 a = 2或v = 8。我已经尝试了一些方法,它编译得很好,但不会给我答案吗?
public class digits
{
public static void main (String letter)
{
if (letter=="A" || letter=="B" || letter== "C")
{
System.out.println("1");
}
else if(letter=="D" || letter=="E" || letter== "F")
{
System.out.println("2");
}
else if (letter=="G" || letter=="H" || letter== "I")
{
System.out.println("3");
}
else if (letter=="J" || letter=="K" || letter== "L")
{
System.out.println("4");
}
else if (letter=="M" || letter=="N" || letter== "O")
{
System.out.println("5");
}
else if (letter=="P" || letter=="Q" || letter== "R" || letter== "S")
{
System.out.println("6");
}
else if (letter=="T" || letter=="U" || letter== "V")
{
System.out.println("7");
}
else if (letter=="W" || letter=="X" || letter== "Y" || letter== "Z")
{
System.out.println("9");
}
}
}
答案 0 :(得分:7)
您应该使用equals
方法,而不是使用==
。
顺便说一下,为了避免出现奇怪的事情,最好只获得字符串的第一个字符,然后通过正常的比较来检查它:
public static void main(String[] args)
{
char c = args[0].toLowerCase().charAt(0);
if (c == 'a' || c == 'b' || c == 'c')
....
}
然后考虑一下这个事实,即main方法提供了一个数组的字符串,而不是一个字符串。
更优雅的方法应考虑字母按ABC
DEF
GHI
JKL
MNO
PQRS
{{1}分组的事实} TUV
所以你可以直接划分输入字符:
WXYZ
编辑:请注意,此方法会返回键盘的从零开始的索引。
答案 1 :(得分:5)
我会考虑,为了封装这个逻辑,最好使用一个对象:
class TelephoneKeyboard {
private final Map<Character, Integer> mapping;
public TelephoneKeyboard() {
mapping = new HashMap<Character, Integer>();
}
public TelephoneKeyboard addKeys(Integer i, String characters) {
for (Character c : characters.toCharArray()) {
mapping.put(c, i);
}
return this;
}
public int getKey(char ch) {
return mapping.get(ch);
}
}
测试用例:
@Test
public void keyboardTest() {
TelephoneKeyboard telephoneKeyboard = new TelephoneKeyboard();
telephoneKeyboard.addKeys(2, "abc");
telephoneKeyboard.addKeys(3, "def");
telephoneKeyboard.addKeys(4, "ghi");
telephoneKeyboard.addKeys(5, "jkl");
// etc etc
assertEquals(2, telephoneKeyboard.getKey('a'));
}
答案 2 :(得分:1)
您的类具有主方法的错误方法签名。 main
总是带一个String数组。
另外,考虑将char
与switch
语句一起使用。
这是一个例子(当前未经测试)放入一个单独的函数:
public class digits
{
public static int phoneCharToDigit (char letter)
{
letter = Character.toUpperCase(letter);
int value = 0;
switch(letter) {
case 'A':
case 'B':
case 'C':
// Yes, 2, your original code was wrong; there are no letters on 1
value = 2;
break;
case 'D':
case 'E':
case 'F':
value = 3;
break;
case 'G':
case 'H':
case 'I':
value = 4;
break;
case 'J':
case 'K':
case 'L':
value = 5;
break;
case 'M':
case 'N':
case 'O':
value = 6;
break;
case 'P':
case 'Q':
case 'R':
case 'S':
value = 7;
break;
case 'T':
case 'U':
case 'V':
value = 8;
break;
case 'W':
case 'X':
case 'Y':
case 'Z':
value = 9;
break;
}
return value;
}
}
答案 3 :(得分:0)
虽然可能有方法可以改进布局并解决这个问题,但如果你想让它工作,我会看一下与“==”运算符进行字符串比较。请查看.equals()代替字符串。我假设你在这里使用Java,但你的标签建议使用jquery。你能澄清一下你在用什么吗?
答案 4 :(得分:0)
你知道A与a不同,对吗?所以,如果你想这样,你应该添加更多的||每个字母的条款。例如:
if (letter=="A" || letter=="B" || letter== "C" || letter=="a" || letter=="b" || letter== "c")
或者只是将toUpper添加到输入字母?
答案 5 :(得分:0)
虽然可能不是您问题的直接答案,但您可以从以下方面获益:
在主函数体中,您正在混合业务逻辑部分 (使用特定于任务的详细信息将结果打印到stdout)。 通过这样做,您可以创建非常难以维护的代码。如果 您想要将数字放在文本字段而不是打印 它?然后你必须改变所有的println语句。如果 您有时想打印并有时更新文本字段?将 你会在每个地方加一些测试吗?
通过混合业务逻辑(我将其用作一个非常松散定义的术语, 如何处理结果)代码变得更难测试。该 KISS的原理是有原因教授的,你会明智的 试图避免以困难的方式学习它:)
也许以上不是那么清楚,我的意思是如果你的代码 是用以下方式写的:
public class digits
{
public static int main letterToMobileDigit(char letterUpperOrLowerCase)
{
char letter = letterUpperOrLowerCase.toLowerCase();
if (letter=='a' || letter=='b' || letter== 'c')
{
return 1;
}
else if(letter=='d' || letter=='e' || letter== 'f')
{
return 2;
}
else if (letter=='g' || letter=='h' || letter== 'i')
{
return 3;
}
else if (letter=='j' || letter=='k' || letter== 'l')
{
return 4;
}
else if (letter=='m' || letter=='n' || letter== 'o')
{
return 5;
}
else if (letter=='p' || letter=='q' || letter== 'r' || letter== 's')
{
return 6;
}
else if (letter=='t' || letter=='u' || letter== 'v')
{
return 7;
}
else if (letter=='w' || letter=='x' || letter== 'y' || letter== 'z')
{
return 9;
}
System.err.println("invalid char " + letter); // not the best or most elegant error handling, consider improving
return -1;
}
public static void main (String letter)
{
System.out.println(letterToMobileDigit(letter.charAt(0)))
}
}
您的代码更易于更改,测试和阅读。
分离逻辑所在的原则是一个 非常重要的技能,没有充分的理由不总是 练习它。
答案 6 :(得分:0)
The code below should run well as per the requirements.
--------------------------------------------------------------------
import java.util.*;
public class Question3Mod
{
public static void main(String[] args)
{
Scanner kb = new Scanner(System.in);
System.out.println("Enter phone number in letters: ");
String telInput = kb.nextLine();
int i;
int count = 0;
System.out.print("Phone number you entered is: ");
for(i = 0; i <= telInput.length()-1; i++)
{
if(count == 3)
{
System.out.print("-");
}
char phoneChar = telInput.charAt(i);
if (count == 7)
{
System.out.println("");
break;
}
else{
if(
phoneChar == 'A' || phoneChar == 'a' ||
phoneChar == 'B' || phoneChar == 'b' ||
phoneChar == 'C' || phoneChar == 'c')
{
System.out.print("2");
count++;
}
else if(
phoneChar == 'D' || phoneChar == 'd' ||
phoneChar == 'E' || phoneChar == 'e' ||
phoneChar == 'F' || phoneChar == 'f')
{
System.out.print("3");
count++;
}
else if(
phoneChar == 'G' || phoneChar == 'g' ||
phoneChar == 'H' || phoneChar == 'h' ||
phoneChar == 'I' || phoneChar == 'i')
{
System.out.print("4");
count++;
}
else if(
phoneChar == 'J' || phoneChar == 'j' ||
phoneChar == 'K' || phoneChar == 'k' ||
phoneChar == 'L' || phoneChar == 'l')
{
System.out.print("5");
count++;
}
else if(
phoneChar == 'M' || phoneChar == 'm' ||
phoneChar == 'N' || phoneChar == 'n' ||
phoneChar == 'O' || phoneChar == 'o')
{
System.out.print("6");
count++;
}
else if(
phoneChar == 'P' || phoneChar == 'p' ||
phoneChar == 'Q' || phoneChar == 'q' ||
phoneChar == 'R' || phoneChar == 'r' ||
phoneChar == 'S' || phoneChar == 's')
{
System.out.print("7");
count++;
}
else if(
phoneChar == 'T' || phoneChar == 't' ||
phoneChar == 'U' || phoneChar == 'u' ||
phoneChar == 'V' || phoneChar == 'v')
{
System.out.print("8");
count++;
}
else if(
phoneChar == 'W' || phoneChar == 'w' ||
phoneChar == 'X' || phoneChar == 'x' ||
phoneChar == 'Y' || phoneChar == 'y' ||
phoneChar == 'Z' || phoneChar == 'z')
{
System.out.print("9");
count++;
}
}
}
}
}