我正致力于解决TSP问题。我已经生成了String
“123456”的所有排列,但是,我需要将其转换为ArrayList
Integer
这样的[1,2,3,4,5, 6] ... [6,5,4,3,2,1]。然后我将其存储到ArrayList
ArrayLists
中。到达那里后,我将能够比较所有需要前往的城市。
当我运行我的代码时,我有一个生成排列的方法,然后是一种将该排列更改为ArrayList
Integer
的方法。当我转换它们时,我得到异常java.lang.NumberFormatException: For input string: ""
。我不知道有任何其他方法可以将String
转换为Integer
这是我的代码。
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");
}
答案 0 :(得分: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
。
答案 1 :(得分:0)
split
方法在""
上拆分时,会产生一个空字符串作为数组的第一个元素,因此您需要从i = 1开始迭代。
此外,在change.length
处停止迭代以确保在超过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);
}