본문 바로가기

IT일반과목/java

자바 이중배열 달팽이 배열


package jongkyu.array11;


import java.util.Random;

import java.util.Scanner;


public class array11 {

Scanner sc = new Scanner(System.in);

Random r = new Random();


public void array12() {


System.out.print("숫자를 입력하세요");//숫자입력하라는걸 띄운다.

int size = sc.nextInt();//숫자를 입력받는다.


int size1=size;//입력한값을 난 몇개 더만들려고 정수형 변수를 추가했다.

int size2=size;//입력한값을 난 몇개 더만들려고 정수형 변수를 추가했다.

int size3=size;//입력한값을 난 몇개 더만들려고 정수형 변수를 추가했다.

int size4=size;//입력한값을 난 몇개 더만들려고 정수형 변수를 추가했다.

int [][] num = new int[size][size];//입력한 값만큼 배열을 만든다.


int k=1;//증가용

int sero=0;//세로값

int garo=-1;//가로값

int direction=1;//방향전환용


while(0<=size) {//첫번째 while문이 시작하는 문

for(int i=0; i<size; i++) {//사이즈만큼 증가한다.

garo+=direction;//가로로 가는걸 더한다.

num[sero][garo]=k;//가로의 값이변경된다.

k++;//넣고자 하는 값증가

/*

* y=-1+1=0

* num[0][0]=1;

* k++;

* y=1;

* num[0][1]=2;

* k++;

* ......

* y=2;

* num[0][2]=3;

*/

}

size--;//처음에 5개였다면 그다음에 4개, 4개 이런식으로 가므로 줄여준다.


for(int i=0; i<size; i++) { //사이즈입력한거에서 하나 준만큼 반복한다.

sero+=direction;//세로로 가는걸 의미한다.

num[sero][garo]=k;//세로값이 증가하는 이유는 일일이 더하기 때문이다.

k++;//넣고자 하는 값증가


/*

* size=2

* x=1;

* num[1][2]=

*/


}

direction=direction*-1;//방향전환

//direction의값이 음수일때는 밑에서 위로 올라가는 방향을 표현하고

//양수일때는 위에서 밑으로 내려오는 세로방향에 대한 표현이 간다.

}//첫번째 while문이 끝나는문


//System.out.println("=========================1번째 끝===================");

int [][] num1 = new int[size1][size1];

k=1;//1부터시작해서 증가용으로 썼다.

garo=0;//가로값을 의미한다.

sero=-1;//세로값을 의미한다.

direction=1;//방향을 의미한다.


while(0<=size1) {//2번째 while문이 시작하는 문

for(int i=0; i<size1; i++) {//사이즈만큼 반복해라

sero+=direction;//처음 시작이 세로부터 갈것이므로 세로부터 시작한다.

num1[sero][garo]=k;//세로값이 바뀌면서 k값이 증가되면서 들어간다.

k++;//넣고자 하는 값증가


}

size1--;//줄이는 이유는 처음엔 한줄을 채우지만 그다음엔 하나가 빠지기 때문이다.


for(int i=0; i<size1; i++) { //i에서 사이즈만큼 반복한다.

garo+=direction;//가로방향으로 값이 증가되므로 가로로 해주었다.

num1[sero][garo]=k;//k의값은 어차피 계속 증가가되어야하고 가로값만 바뀌어주면 된다.

k++;//넣고자 하는 값증가

}

direction*=-1;//방향전환

//d의값이 음수일때는 밑에서 위로 올라가는 방향을 표현하고

//양수일때는 위에서 밑으로 내려오는 세로방향에 대한 표현이 간다.

}//2번째 while문이 끝나는 문


//System.out.println("=========================2번째 끝===================");

int [][]num2 = new int[size2][size2];

k=1; //증가되는 값이다.

garo=size2;//가로의 값을 입력받았다.

sero=0;//세로의 값을 입력받았다.

direction=-1;//방향의값을 입력받았다. 


while(size2>0) {//3번째 while문이 시작하는 문

for(int i=0; i<size2; i++) {//입력한 크기만큼 반복해라

garo+=direction;//처음에 가로부터 값이 증가되므로 가로를 썼다.

num2[sero][garo]=k;//세로의값은 가만히 있고 가로의 값이 증가할 것이다.

k++;//넣고자 하는 값증가

}

direction*=-1;//처음에 오른쪽에서 왼쪽으로 이동하므로 이렇게 해주었다.

size2--;//처음엔 다 채우고 그다음엔 하나가 빠지므로 마이너스를 해주었다.


for(int i=0; i<size2; i++) {//아까 size2에서 1뺀값으로 시작한다.

sero+=direction;//세로로 값이 증가되므로 세로의 방향을 써주었다.

num2[sero][garo]=k;//세로의 값만 변경될 것이다.

k++;//넣고자 하는 값증가

}


}//3번째 while문이 끝나는 문


//System.out.println("=========================3번째 끝===================");


k=1; //값이 부터시작해서 증가될 것이다.

sero=size3;//세로의 사이즈를 의미한다.

garo=0;//가로의 크기를 의미한다.

direction=-1;//처음에 위로가므로 값이 감소되서 -1을 썼다.

int [][] num3 = new int[size3][size3];//입력한 배열의 크기만큼 배열을 만들었다.


while(size3>0) {//4번째 while문 시작

for(int i=0; i<size3; i++) {//size3만큼 반복한다.

sero+=direction;//sero로 점점 값이 올라가고 -1이므로 위로올라간다.

num3[sero][garo]=k;//세로의 값이 계속 변하게 된다.

k++;//넣고자 하는 값증가

}

direction*=-1;//이제 -1을 곱했으니 배열값이아닌 배열의 크기가 증가할것이다.

size3--;//값을 빼주었다.


for(int i=0; i<size3; i++) {//아까 1뺀 사이즈만큼 반복한다.

garo+=direction;//가로로 방향이 간다.

num3[sero][garo]=k;//가로의 값이 변경된다.

k++;//숫자는 계속 증가한다.

}

}//4번째 while문이 끝나는 문


//System.out.println("=========================4번째 끝===================");

System.out.println("=================================================================");

System.out.println("1번째");

System.out.println("==================================================================");

for(int i=0; i<num.length; i++) {//출력부분

for(int j=0; j<num[i].length; j++) {

System.out.print(num[i][j]+"\t");

}

System.out.println("");

}


System.out.println("=========================================================================");

System.out.println("2번째");

for(int i=0; i<num1.length; i++) {//출력부분

for(int j=0; j<num1[i].length; j++) {

System.out.print(num1[i][j]+"\t");

}

System.out.println("");

}


System.out.println("==================================================");

System.out.println("3번째");

for(int i=0; i<num2.length; i++) {//출력부분

for(int j=0; j<num2[i].length; j++) {

System.out.print(num2[i][j]+"\t");

}

System.out.println("");

}


System.out.println("==========================================");

System.out.println("4번째");

for(int i=0; i<num3.length; i++) {//출력부분

for(int j=0; j<num3[i].length; j++) {

System.out.print(num3[i][j]+"\t");

}

System.out.println("");

}


}

}



'IT일반과목 > java' 카테고리의 다른 글

2차원배열 실습문제  (0) 2018.07.18
이중 배열 써서 알파벳 랜덤으로 출력하기(소문자)  (0) 2018.07.18
자바 싱글톤(Singleton)  (0) 2018.07.16
정적 멤버와 static  (0) 2018.07.16
메소드 오버로딩  (0) 2018.07.16