2 D配列のループ割り当て
1520 ワード
次のような例があります.
3*3の結果:
1 2 3
8 9 4
7 6 5
5*4の結果:
1 2 3 4
14 15 16 5
13 20 17 6
12 19 18 7
11 10 9 8
package pack;
public class ArrayCircleSetter {
public static void main(String[] args) {
new ArrayCircleSetter().start(3,3);
}
public void start(int x,int y){
int iL=x;
int jL=y;
int numT=iL*jL;
int[][] arr=new int[iL][jL];
int iS=0;
int iE=iL-1;
int jS=0;
int jE=jL-1;
int num=1;
while(num<=numT&&iS<=iE&&jS<=jE){
num=set(arr,iS,iE,jS,jE,num);
iS++;
iE--;
jS++;
jE--;
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
public int set(int[][] arr,int iS,int iE,int jS,int jE,int num){
for (int j = jS; j <= jE; j++) {
arr[iS][j]=num++;
}
for (int i = iS+1; i <= iE; i++) {
arr[i][jE]=num++;
}
if (iE<2)return num;
for (int j = jE-1; j >= jS; j--) {
arr[iE][j]=num++;
}
for (int i = iE-1; i > iS; i--) {
arr[i][jS]=num++;
}
return num;
}
}
3*3の結果:
1 2 3
8 9 4
7 6 5
5*4の結果:
1 2 3 4
14 15 16 5
13 20 17 6
12 19 18 7
11 10 9 8