为了填充图像,我试图填充一个小的3 * 3阵列。我可以镜像原始数组的最后一列和最后一行来获得一个4 * 4数组(我的第一个代码)。但是当我为3 * 4数组尝试此代码时,我得到ArrayIndexOutOfBound错误(我的第二个代码)。有人可以帮忙吗?
-
package org.eclipse.wb.swing;
public class Padding_test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] table = new int[3][3];
for (int row = 0; row < 3; row ++)
for (int col = 0; col < 3; col++)
table[row][col] = ((row * 3 + col)+1);
for (int row = 0; row < 3; row ++){
for (int col = 0; col < 3; col++){
System.out.print (table[row][col]);
}
System.out.println();
}
System.out.println();
int [][] temp = new int[table.length+1][table[0].length+1] ;
for ( int x=0 ; x<table[0].length+1 ; x++){
for (int y=0 ; y<table.length+1 ; y++){
temp[x][y] = 0;
System.out.print(temp[x][y]);
}
System.out.println();
}
for ( int count = 0 ; count < table.length ; count++){
for (int xx=0 ; xx<table[0].length ; xx++)
{
temp[xx][count]= table[count][xx];
temp[xx+1][count]= temp[xx][count];
}
}
int th = temp.length;
System.out.println();
for (int yy = 0 ; yy< temp.length ; yy++){
temp [yy][th-1]=temp [yy][th-2]; }
for (int px =0 ; px<temp.length ; px++){
for (int py=0 ; py<temp[0].length ; py++){
System.out.print(temp[py][px]);
}
System.out.println();
}
}
}
_
但是当我运行此代码时出现错误:
package org.eclipse.wb.swing;
public class Padding_test {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println();
int [][] table = { {1,2,3,4},{2,5,7,9},{6,8,9,0}};
for (int i =0 ; i <table.length ; i ++){
for (int j =0 ; j < table[0].length ; j++)
{
System.out.print(table[i][j]);
}
System.out.println();
}
System.out.println();
int width = table[0].length;
int Height = table.length;
System.out.println( "Width = "+ width );
System.out.println("Height = " + Height);
int [][] temp = new int[table.length+1][table[0].length+1] ;
for ( int x=0 ; x<table.length+1 ; x++){
for (int y=0 ; y<table[0].length+1 ; y++){
temp[x][y] = 0;
System.out.print(temp[x][y]);
}
System.out.println();
}
for ( int count = 0 ; count < table.length ; count++){
for (int xx=0 ; xx<table[0].length ; xx++){
temp[xx][count]= table[count][xx];
temp[xx+1][count]= temp[xx][count];
}
}
int th = temp.length;
System.out.println();
for (int yy = 0 ; yy< temp.length ; yy++){
temp [yy][th-1]=temp [yy][th-2];
}
for (int px =0 ; px<temp.length ; px++){
for (int py=0 ; py<temp[0].length ; py++){
System.out.print(temp[py][px]);
}
System.out.println();
}
}
}
答案 0 :(得分:0)
您的错误就在这一部分:
for (int x=0 ; x<table[0].length+1 ; x++) {
for (int y=0 ; y<table.length+1; y++) {
[...]
}
}
您应该切换table[0].length+1
和table.length+1
的地点。并且最好使用x
作为索引而不是0
(但它应该无关紧要,因为它是一个矩阵)。
结果:
for (int x=0 ; x<table.length+1 ; x++) {
for (int y=0 ; y<table[x].length+1; y++) {
[...]
}
}
在您的代码中,您还有System.out.print(temp[py][px]);
会引发错误。您应该更改py
和px
的位置,使其如下所示:System.out.print(temp[px][py]);
更新:您有第三个问题:
for (int count = 0 ; count < table.length; count++){
for (int xx=0 ; xx < table[0].length; xx++){
temp[xx][count]= table[count][xx];
temp[xx+1][count]= temp[xx][count];
}
}
我不知道你在这里要做什么,但这是不好的代码:
如果table.length
大于table[0].length
,则temp[xx][count]
会抛出异常。
如果table[0].length
大于table.length
,则temp[xx][count]
和<{1}}都会抛出异常。