2014-02-18 57 views
-2

下面這個程序只寫成轉換「你好」的詞,所以我想它作爲一個通用函數,可以接受任何類型的字母或單詞,並以整數數組形式返回答案。將基本程序轉換爲隨機輸入的函數

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

輸出爲上述代碼:

我的問題是如何將上述代碼轉換爲像這樣...

公共功能

public static String str(String newstr) {

...........

..........

.........

返回陣列; //整數數組含有值

}

如果我通過發送一個字符串作爲輸入到它調用該函數。它應該返回整數數組作爲答案。

詳細解釋有關程序: -

這個程序需要輸入字符串(字母,單詞等)和轉換已經在被分配了每個字母和存儲所有字母到數值下面示出陣列

具有一個數值的每個字母: -

1 = AIJQY

2 = BKR

3 = CGLS

4 = DMT

5 = EHNX

6 = UVW

7 = OZ

8 = FP

+0

所以你基本上是要求完成的代碼,工作液,甚至不要求特別的問題嗎? –

+1

三個提示:1)函數的返回類型應該是數組的類型; 2)你必須創建一個與你的字符串長度相同的數組; 3)而不是將每個數字寫入'System.out',您需要將其分配給數組的單元格 –

+0

這是一項家庭作業嗎? – Vincent

回答

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

}

+0

非常感謝你......你的代碼工作完美。 – Sanath

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

希望這會有所幫助。

+0

返回變量必須是數組..如何返回包含輸出數組的答案 – Sanath

+0

編輯過答案返回int數組 – Sanjeev

+0

兄弟在Java弱... ...我是掙扎從2天.. 這是確切的功能IAM尋找... 請給我一個完整的代碼.. – Sanath

0

一些注意事項:

  • 我不會返回一個int數組,而是一個載體。
  • 如果你真的只能有8個值的if語句可能更快,

這是未經測試的代碼:

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; 
    } 
} 
+0

我希望它的作品。非常感謝你... – Sanath