字母数字电话号码转换器



这只是一个有点超出我的理解,我的老师英语说得不是很好,所以我只是想看看你们是否能帮助我。我很惊讶我能走到这一步,但我已经通过互联网找到了帮助我的方法,现在我被困住了。这是我的代码。

import java.util.Scanner;
public class Phone {
    public static int getNumber(char uppercaseLetter) {
        char[] letter =
            {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
             'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
        int[] value = {2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6,
                       7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9};
        for (int i = 0; i < letter.length; i++) {
            if (uppercaseLetter == letter[i]) {
                return value[i];
            }
        }
        return 0;
    }
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter the phone number string :");
        String getNumber = input.nextLine();
        for (int i = 0; i < getNumber.length(); i++) {
            System.out.print(getNumber(getNumber.toUpperCase().charAt(i)));
        }
    }
}

所以我被指示使用方法public static int getNumber(char upperCaseLetter)来启动它。我必须使用for循环,并且在for循环体中,使用以下算法仅将字母转换为其等效的数字:如果phoneNumberStr的当前字符是大写字母,则调用方法getNumber来确定数字并追加(或连接)到phoneNumber。变量phoneNumber也是变量String。注意,要检查字符是否为字母,请考虑大写的ASCII范围字母。

例如,当索引i处的字符为a时,if(phoneNumberStr.charAt(i) == 65)为true。

同样,请记住,if(phoneNumberStr.charAt(i) == ‘A’)与上面的表达式相同。

如果phoneNumberStr的当前字符不是字母,则需要创建一个单字符然后将此子字符串附加/连接到phoneNumber然后输出phoneNumber

这是一个示例输出,但我不明白为什么我的代码没有输出…

Case 1 (with hyphen)
Enter the phone number string
1-800-flowers<---User input
Phone #: 1-800-3569377

你的代码基本上是正确的。最大的问题是,你从来没有检查过这个字符是否是一个字母。因此,对于应该逐字打印的部分,您将打印出'0'。"1 - 800 -")。

数组中还有一个额外的6(6只是MNO,而不是MNOP)。阅读我的评论,并确保你理解修复。

关于你的陈述:

但是我不明白为什么我的代码没有输出…

你的旧代码确实输出了一个结果,只是一个不正确的结果,这让我认为你没有正确运行它。试着让一个hello world的例子首先工作。如果你仍然有输出工作的问题,你可能需要添加关于你的开发环境的细节,这样我们就可以弄清楚为什么你不能让代码运行。

import java.util.Scanner;
public class Phone
{
    public static int getNumber(char uppercaseLetter)
    {
        char[] letter =
        { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
                'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
        // You had an extra 6 here
        int[] value = { 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6,
                7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9 };
        for (int i = 0; i < letter.length; i++)
        {
            if (uppercaseLetter == letter[i])
            {
                return value[i];
            }
        }
        return 0;
    }
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter the phone number string :");
        String getNumber = input.nextLine();
        for (int i = 0; i < getNumber.length(); i++)
        {
            // First you need to check if the character is a letter
            char c = getNumber.toUpperCase().charAt(i); // get the character
            int value = getNumber(c); // get the number associated w/ it
            if (value != 0)
            {
                System.out.print(value); // If getNumber(..) returned a number, print that number
            }
            else
            {
                // If it returned 0 (i.e. 'uppercaseLetter' wasn't an uppercase letter
                //   then just print the character (which will print out the "1-800-" part)
                System.out.print(c);
            }
        }
        // It's recommended that you close input, although you don't really need to for small programs
        //   like this. Just a good habit to get into.
        input.close();
    }
}
编辑:

Ben在评论中是正确的,这段代码不能完全满足你的要求。

  • 不是打印每个字符,而是将其附加到字符串(即通过使用+=操作符),然后打印出字符串
  • 我正在检查函数getNumber是否作为大写字母的测试失败,但要求建议您应该只运行getNumber,如果字符是使用测试(c>= ' a ' &&c <= 'Z')或使用数字的等效测试。

您应该利用这个机会来理解代码并更新它以完全满足您的需求。

为什么不用散列呢?那就容易多了。

给你一个提示:

import java.util.*;
class HelloWorldApp {
    public static void main(String[] args) {
    HashMap<Character, Integer> myMap = new HashMap<Character, Integer>();
    myMap.put(new Character('A'), new Integer(2));
    System.out.println(myMap.get('A'));
   }
}

最新更新