以下程序仅用于转换“hello word”,所以我想把它作为通用函数,它接受任何类型的字母或单词并以整数数组返回答案。
import java.util.HashMap;
import java.util.Map;
public class JavaApplication1
{
public static void main(String[] args)
{
final Map<Character, Integer> map;
final String str = "hello word";
map = new HashMap<>();
map.put('a', 1);
map.put('i', 1);
map.put('j', 1);
map.put('q', 1);
map.put('y', 1);
map.put('b', 2);
map.put('k', 2);
map.put('r', 2);
map.put('c', 3);
map.put('g', 3);
map.put('l', 3);
map.put('s', 3);
map.put('d', 4);
map.put('m', 4);
map.put('t', 4);
map.put('e', 5);
map.put('h', 5);
map.put('n', 5);
map.put('x', 5);
map.put('u', 6);
map.put('v', 6);
map.put('w', 6);
map.put('o', 7);
map.put('z', 6);
map.put('f', 8);
map.put('p', 8);
System.out.println("output:");
for(final char c : str.toCharArray())
{
final Integer val;
val = map.get(c);
if(val == null)
{
// some sort of error
}
else
{
System.out.print(val + " ");
}
}
System.out.println();
}
}
以上代码的输出:
5 5 3 3 7 6 7 2 4
我的问题是如何将上面的代码转换为像这样的公共函数......
public static String str(String newstr) {
...........
..........
.........
返回数组; //包含值的整数数组
}
如果我通过发送一个字符串作为输入来调用该函数。它应该返回整数数组作为答案。
有关该计划的详细说明: -
此程序接受输入字符串(字母,单词等..)并将所有字母转换为为每个字母分配的数值并存储在数组中
每个字母表的数值如下所示: -
1 = A I J Q Y
2 = B K R
3 = C G L S
4 = D M T
5 = E H N X
6 = U V W
7 = O Z
8 = F P
答案 0 :(得分:0)
您需要创建一个具有所需签名的函数,如下所示:
public static int[] convert(String str) {
int[] returnVal = new int[str.length];
int i =0;
// put here your logic of map population and while loop
// replace System.out.print(val + " ");
returnVal[i++]=val;
// remaining code
return returnVal;
}
希望这有帮助。
答案 1 :(得分:0)
一些注意事项:
这是未经测试的代码:
public class Converter {
private static final Map<Character, Integer> VAL_MAP;
static {
VAL_MAP = new HashMap<>(26);
// put all values into map
// Collections.unmodifiableMap might be interesting here
}
public static int[] convert(String str) {
// check if str is null... or add @NonNull
// first count characters we can convert:
int counter = 0;
for (char c : str.toCharArray()) {
if (VAL_MAP.containsKey(c)) counter++;
}
int[] result = new int[counter];
int runner = 0;
for (char c : str.toCharArray()) {
if (VAL_MAP.containsKey(c)) result[runner++] = VAL_MAP.get(c);
}
return result;
}
}
答案 2 :(得分:0)
只需对代码进行少量修改即可:
import java.util.HashMap; import java.util.Map;
公共类Q1_JavaApplication1 {
/**
* Constructor
* @param stringToMap
*/
public Q1_JavaApplication1(String stringToMap){
mapStringToNumbers(stringToMap);
}
/**
*
* @param stringToMap
*/
private int[] mapStringToNumbers(String stringToMap) {
Map<Character, Integer> map;
String str = stringToMap;
str = str.replaceAll(" ", "");//remove empty strings
char[]ca = str.trim().toCharArray();//initiate char array
int[] intArray = new int[ca.length];//initiate integer array
map = new HashMap<>();
map.put('a', 1);
map.put('i', 1);
map.put('j', 1);
map.put('q', 1);
map.put('y', 1);
map.put('b', 2);
map.put('k', 2);
map.put('r', 2);
map.put('c', 3);
map.put('g', 3);
map.put('l', 3);
map.put('s', 3);
map.put('d', 4);
map.put('m', 4);
map.put('t', 4);
map.put('e', 5);
map.put('h', 5);
map.put('n', 5);
map.put('x', 5);
map.put('u', 6);
map.put('v', 6);
map.put('w', 6);
map.put('o', 7);
map.put('z', 6);
map.put('f', 8);
map.put('p', 8);
System.out.println("output:");
for(int i = 0; i < ca.length; i ++){//populate and print integer array content
intArray[i] = map.get(ca[i]);
System.out.print(intArray[i] + " ");
}
return intArray;// return your array
}
/**
*
* @param args
*/
public static void main(String[] args) {
String stringToMap = "good morning";//Get your input from args[] OR from keyboard/system.in - for example Scanner OR hard code in main() method (like here)..
new Q1_JavaApplication1(stringToMap);
}
}