这只是一个有点过头而且我的导师不会说英语,所以我只是想看看你们是否可以帮助我。我很惊讶我已经走到了这一步,但我已经通过互联网挖掘帮助我,现在我被卡住了。这是我的代码。
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
答案 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在评论中是正确的,这段代码完全不能满足您的要求。
您应该以此为契机,了解代码并对其进行更新以完全符合您的要求。
答案 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'));
}
}