2013-03-22 131 views
0

我正在解決TSP問題。我已經生成了String「123456」的所有排列,但是,我需要將其轉換爲IntegerArrayList,像這樣[1,2,3,4,5,6] ... [6,5,4, 3,2,1]。然後我將它存儲到ArrayListsArrayList。一旦到達那裏,我就可以比較所有需要旅行的城市。無法從字符串轉換爲Int

當我運行我的代碼時,我有一種方法來生成排列,然後將該排列更改爲IntegerArrayList。當我轉換它們時,我得到例外java.lang.NumberFormatException: For input string: ""。我不知道有什麼其他的方式可以得到StringInteger

這是我的代碼。

public static String permute(String begin, String string){ 
    if(string.length() == 0){ 
     stringToIntArray(begin+string); 
     return begin + string + " "; 

    } 
    else{ 
     String result = ""; 
     for(int i = 0; i < string.length(); ++i){ 
      String newString = string.substring(0, i) + string.substring(i+1, string.length());; 
      result += permute(begin + string.charAt(i), newString); 
     } 
     stringToIntArray(result); 
     return result; 


    } 
} 

public static void stringToIntArray(String s){ 
    ArrayList<Integer> perm = new ArrayList<Integer>(); 
    String [] change = s.split(""); 
    for(int i = 0; i < 7; ++i){ 
     int integer = Integer.parseInt(change[i]); 
     System.out.println(integer); 
    } 

} 

public static void main(String[] args) { 
    permute("", "123456"); 
} 
+1

你不需要分割任何東西。只需將字符串的每個字符轉換爲一個int並將其放入數組中即可。 – 2013-03-22 18:43:13

回答

0

split的方法,上""分裂時,產生一個空字符串作爲該陣列的第一個元素,所以需要迭代開始從i = 1

此外,這將是更安全的停止迭代在change.length處,確保在超過6個時處理所有字符,並且如果數量少於6個,則不要超出範圍。

String [] change = s.split(""); 
for(int i = 1; i < change.length; ++i){ // ignore first element 
    int integer = Integer.parseInt(change[i]); 
    System.out.println(integer); 
} 
1

這些線

String [] change = s.split(""); 
for(int i = 0; i < 7; ++i){ 
    int integer = Integer.parseInt(change[i]); 
    System.out.println(integer); 
} 

給出一個String,如 「12345」,當你把它分解就沒事了,它將每一個字符分開。給你一個數組["","1","2","3","4","5"]。由於空的String""不是一個數字,您將得到NumberFormatException。您可以將您的索引i更改爲從1開始,以忽略第一個空的String

+0

哇,從現在開始,改變for循環從一開始,它編譯,謝謝! – trevorhutto 2013-03-22 18:45:37

+0

Np,如果任何答案對你有幫助,你可以在時間允許的情況下注冊並接受。祝你好運! – 2013-03-22 18:47:37

相關問題