从String输入返回数字,Java

时间:2011-09-26 14:46:40

标签: java

我有点难过,并且已经试图解决这个问题一段时间了。这是家庭作业,虽然我想学习编码而不管。在这里,我必须将用户输入的字符串转换为大写字母,然后使用电话键盘系统将那些大写字母转换为数字(2 = ABC等)。

我已经做到这一点,但不确定我的下一步应该是什么。非常感谢任何想法,提前感谢。

package chapter_9;

import java.util.Scanner;

public class Nine_Seven {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a string: ");
        String s = input.next();

        // unsure what to do here, know i need some sort of output/return
        // statement
    }

    public static int getNumber(char uppercaseLetter) {
        String[] Keypad = new String[10];
        Keypad[2] = "ABC";
        Keypad[3] = "DEF";
        Keypad[4] = "GHI";
        Keypad[5] = "JKL";
        Keypad[6] = "MNO";
        Keypad[7] = "PQRS";
        Keypad[8] = "TUV";
        Keypad[9] = "WXYZ";

        for (int i = 0; i < Keypad.length; i++) {
            // unsure what to do here
        }

        return (uppercaseLetter);
    }
}

9 个答案:

答案 0 :(得分:6)

要获取char的数字,你应该反过来做你的数组。你的方法可能如下所示:

public static int getNumber(char uppercaseLetter) {
    int[] keys = {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};
    return keys[(int)uppercaseLetter - 65];  //65 is the code for 'A'
}

keys数组拉入类的成员变量中也是一个好主意,这样就不会在每次调用时初始化它。

关于输出/转换,我建议您查看java.lang.System类。另请注意,您尚未将字符串转换为大写 - 并且未检查输入的有效性(它是仅由26个字母组成的字符串)。

答案 1 :(得分:2)

String.IndexOf

  

//不确定该怎么做

可以是:

for(int i = 2;i < Keypad.length;i++) {

    if(Keypad[i].indexOf(uppercaseLetter) != -1) 
    {
        return i;
    }  

}

还有许多其他更好的方法可以实现这一目标,但这只是一种方式。

答案 2 :(得分:2)

这是整个计划。

public class  Mobile Key Pad{

public static void main(String[] args) {

         Scanner sc = new Scanner(System.in);
         System.out.println("Enter a string: ");
         String s = sc.next();    
         char ch[]=s.toCharArray();
         int n[]=new int[s.length()];

         for(int i=0;i<ch.length;i++)    
         {
            n[i]= getNumber(ch[i]);
            System.out.print(n[i]);
         }
    }

    public static int getNumber(char uppercaseLetter) {
        String[] Keypad = new String[10];
        Keypad[2] = "ABC";
        Keypad[3] = "DEF";
        Keypad[4] = "GHI";
        Keypad[5] = "JKL";
        Keypad[6] = "MNO";
        Keypad[7] = "PQRS";
        Keypad[8] = "TUV";
        Keypad[9] = "WXYZ";

            for(int i = 2;i < Keypad.length;i++) 
            {
                if(Keypad[i].indexOf(uppercaseLetter) != -1) 
                {
                    return i;
                }  
            }
        return (uppercaseLetter);     
  }
}

答案 3 :(得分:1)

查看Map,看看它是否能为您提供任何想法。

答案 4 :(得分:0)

您的要求似乎是在键盘数组中找到输入的字符。

这种天真的方法是在String类中使用indexOf()方法,该方法返回一个值&gt;如果引用的字符串中存在子字符串,则返回-1。

因此"ABC".indexOf("A")将返回0,"ABC".indexOf("C")将返回2,"ABC".indexOf("D")将返回-1;

使用for循环来寻址键盘数组中的每个字符串,并使用上述方法检查输入的字符是否映射到当前选择。

答案 5 :(得分:0)

首先,我不会将映射放入方法中,而是放入类本身。接下来,您可以尝试使用Map<String, Integer>,如下所示:

 Map<Character, Integer> charToNum = new HashMap<Character, Integer>();
 charToNum.put('A', 2);
 charToNum.put('B', 2);
 charToNum.put('C', 2);
 charToNum.put('D', 3);
 ...

如果您需要获取角色的号码,请致电:

public static int getNumber(char uppercaseLetter) {
   return charToNum.get(uppercaseLetter);
}

请注意,我在此处使用自动(联合)装箱:char自动转换为Character,反之亦然(例如int&lt; - &gt; Integer )。这就是使用地图的原因。

答案 6 :(得分:0)

在你的getNumber函数中,看起来你想要通过键盘数组。要问的逻辑问题是:“在for循环的每一步,你在寻找什么,你做完了吗?”。例如,假设您的uppecaseLetter为'E'。然后完成以下步骤:

首先,(i = 0),因为键盘[0]未被使用,所以你什么都不知道。

接下来,(i = 1)。仍然没有,因为键盘[1]未被使用

接下来,(i = 2)。键盘[2] =“ABC”,但字母是E(并且它不在“ABC”中),所以没有这里

接下来,(i = 3)。键盘[3] =“DEF”字母E在这里,所以你知道你可以在这里返回i(i = 3)

答案 7 :(得分:0)

      -

  1. 列表项

  2. //不确定在这里做什么,知道我需要某种输出/返回

    //声明

         char ch[]=s.toCharArray();
    
    
         int n[]=new int[s.length()];
    
    
         for(int i=0;i<ch.length;i++)
    
    
         {
    
            n[i]= getNumber(ch[i]);
    
            System.out.print(n[i]);
    
    
         }
    

答案 8 :(得分:0)

此问题的完整计划。

import java.util.Scanner;

public class PhonePad {

public static void main(String[] args) {
    System.out.println("Mobile Phone key  Pad ( Considering 2 to 9 as keys)");
    System.out.println("Enter the Switch Number"
            + " 1st and no of times it got pressed "
            + "\n Press any word to exit");
    StringBuilder str = new StringBuilder();

    try {
        while (true) {
            Scanner s = new Scanner(System.in);
            int swNum = s.nextInt();
            int no = s.nextInt();
            if ((swNum > 9 ||swNum <2) ||(no > 4||no <1)) 
                break;
            else if ((swNum>7&&swNum<10) || (swNum >1 &&swNum<7) 
                    || (swNum ==7 && no ==4)){ // 7  has PQRS
                if(swNum > 7){
                    no++;
                }
                int temp = swNum * 3 + (no - 1) + 59;
                System.out.println("Entered char is "+(char) temp);
                str.append((char) temp);
            } else
                break;
        }
    } catch (Exception e) {
        System.out.println("Exiting terminal");
    } finally {
        System.out.println("Thanks for using my Keypad... visit again");
        System.out.println("Entered keyword is " + str.toString());
    }

}

}