字母数字电话号码转换器

时间:2015-10-18 15:31:18

标签: java

这只是一个有点过头而且我的导师不会说英语,所以我只是想看看你们是否可以帮助我。我很惊讶我已经走到了这一步,但我已经通过互联网挖掘帮助我,现在我被卡住了。这是我的代码。

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的当前字符是大写字母,请调用方法{{1} }确定数字并附加(或连接)到getNumber。变量phoneNumber也是phoneNumber变量。请注意,要检查字符是否为字母,请考虑ASCII范围为大写 字母。

例如,当索引i处的字符为A时,String为真。

另外,请记住if(phoneNumberStr.charAt(i) == 65)与上面的表达方式相同。

如果if(phoneNumberStr.charAt(i) == ‘A’)的当前字符不是字母,则需要创建一个字符 substring然后将此子字符串追加/连接到phoneNumberStr 然后输出phoneNumber

这是一个示例输出,但我无法弄清楚为什么我的代码根本没有输出......

phoneNumber

2 个答案:

答案 0 :(得分:1)

您的代码大部分都是正确的。最大的问题是你从未检查过这个角​​色是不是一个字母。所以,你打印出来的&#39; 0&#39; 0对于应该刚刚逐字打印的部分(即&#34; 1-800 - &#34;)。

你在阵列中还有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&gt; =&#39; A&#39 ;&amp;&amp; c&lt; =&#39; Z&#39;)或使用数字的等效测试。

您应该以此为契机,了解代码并对其进行更新以完全符合您的要求。

答案 1 :(得分:0)

为什么不使用哈希?这会容易得多。

这是一个让你前进的提示:

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