[英]Return numbers from String input, 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);
}
}
要获取一个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个字母组成的字符串)。
这是整个程序。
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);
}
}
//不确定在这里做什么
可:
for(int i = 2;i < Keypad.length;i++) {
if(Keypad[i].indexOf(uppercaseLetter) != -1)
{
return i;
}
}
还有许多其他更好的方法可以完成此操作,但这是一种方法。
查看“ Map
,看看是否有任何想法。
//不确定该怎么做,知道我需要某种输出/返回
//陈述
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]);
}
此问题的完整程序。
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());
}
}
}
您的要求似乎是在键盘阵列中找到输入的字符。
最简单的方法是在String类中使用indexOf()方法,如果所引用的字符串中存在子字符串,则返回值> -1。
因此, "ABC".indexOf("A")
将返回0, "ABC".indexOf("C")
将返回2,而"ABC".indexOf("D")
将返回-1;
使用for循环寻址键盘数组中的每个字符串,并使用上述方法检查输入的字符是否映射到当前选择。
首先,我不会将映射放入方法中,而是放入类本身。 接下来,您可以尝试使用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
get自动转换为Character
,反之亦然(例如int
<-> Integer
)。 这就是为什么在这里使用地图的原因。
在您的getNumber函数中,您似乎想要遍历键盘阵列。 要提出的逻辑问题是:“在for循环的每个步骤中,您正在寻找什么并且已经完成?”。 例如,假设您的uppecaseLetter为'E'。 然后执行以下步骤:
首先,(i = 0),您什么都不知道,因为未使用键盘[0]。
接下来,(i = 1)。 仍然没有,因为未使用键盘[1]
接下来,(i = 2)。 Keypad [2] =“ ABC”,但字母为E(并且不在“ ABC”中),因此此处无内容
接下来,(i = 3)。 键盘[3] =“ DEF”字母E在这里,所以您知道您可以在此处返回i(i = 3)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.