我用java写了一段代码,用来交换3*4矩阵的列。
String[][] a = { { a,t,t,a},
{ c,k,a,t},
{ d,a,w,n }
};我想要的输出是: a,t,t,a,t,a,k,c,n,w,a,d。
所以我的循环如下:
for(i=0;i<=2;i++) {
for(j=0;j<=5;j++) {
if(j<=2) {
temp=a[i][j+1];
a[i][j+1]=a[i][j];
a[i][j]=temp;
}
if(j>3) {
temp=a[i][j-3];
a[i][j-3]=a[i][j-4];
a[i][j-4]=temp;
} else {
temp=a[i][j-1];
a[i][j-1]=a[i][j-2];
a[i][j-2]=temp;
}
}
}错误是:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at Execute.swapColums(DtTwo.java:69)
at DtTwo.main(DtTwo.java:11)请帮帮我..
发布于 2013-01-12 19:11:08
示例:
public class Test
{
public static void main(String args[])
{
String[][] array2d = {
{ "a","t","t","a"},
{ "c","k","a","t"},
{ "d","a","w","n" }
};
for (int i = 0; i < array2d.length; i++)
{
swapCols(array2d[i]);
}
print(array2d);
}
private static void swapCols(String s[])
{
for (int i = 0; i < s.length / 2; i++)
{
String temp = s[s.length - 1 - i];
s[s.length - 1 - i] = s[i];
s[i] = temp;
}
}
private static void print(String[][] array2d)
{
System.out.println(Arrays.deepToString(array2d));
}
}输出:
[[a, t, t, a], [t, a, k, c], [n, w, a, d]]发布于 2013-01-12 19:21:01
public static void swap(int[][] arr, int line, int pos1, int pos2) {
int temp = arr[line][pos1];
arr[line][pos1] = arr[line][pos2];
arr[line][pos2] = temp;
}
public static void main(String args[])
{
String[][] arr = {
{ "a","t","t","a"},
{ "c","k","a","t"},
{ "d","a","w","n" }
};
for (i=0; i<3; i++) {
swap(arr, i, 0, 3);
swap(arr, i, 1, 2);
}
}发布于 2013-01-12 19:24:04
这可能是一个愚蠢的想法,但它可以比现在更简单,以使其更有效地使用
所以这个想法是,把一行转换成列表,让它变成->,反转字符串,使用->方法再次生成数组。
String[][] a = {{"a", "t", "t", "a"},
{"c", "k", "a", "t"},
{"d", "a", "w", "n"}
};
System.out.println(
new StringBuffer(Arrays.asList(a[1]).
toString().
replace("[", "").
replace("]", "").
replace(" ", "")).
reverse().
toString().
split(","));结果= a1 -> t,a,k,c
https://stackoverflow.com/questions/14292675
复制相似问题