0

我正在研究解决 TSP 问题的方法。我已经生成了“123456”的所有排列String,但是,我需要将其转换为ArrayList这样的Integer[1,2,3,4,5,6]...[6,5,4,3,2 ,1]。然后我将它存储到一个ArrayListof 中ArrayLists。到达那里后,我将能够比较所有需要前往的城市。

当我运行我的代码时,我有一个生成排列的方法,然后是一个将该排列更改为ArrayListof 的方法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");
} 
4

2 回答 2

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为 start at1以忽略第一个 empty String

于 2013-03-22T18:43:14.463 回答
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);
}
于 2013-03-22T18:43:38.927 回答