将基本程序转换为随机输入的函数

时间:2014-02-18 11:36:49

标签: java arrays string function

以下程序仅用于转换“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

3 个答案:

答案 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)

一些注意事项:

  • 我不会返回一个int数组,而是一个vector。
  • 如果你的陈述可能更快,那么你真的只有8个值

这是未经测试的代码:

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

}