어쩌겠어 해내야지 최대한 노력하고 수고했다해주자♥
4x4 배열을 생성하여, 값을 아래와 같이 저장후 출력 하시오.
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
1) new int[][] 사이즈 먼저 선언 후에 저장
<심화 버전>
int[][] arr = new int[4][4];
//arr = new int[][] {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; -> 원래 있던거 날라가고 다시 새로운공간이생기는겨
int num = 1;
for (int i=0; i<arr.length; i++) { // 행의길이
for (int j=0; j<arr[i].length; j++) { //열의길이
//출력위치
arr[i][j] = num;
num++;
//arr[i][j] = (i * 4) + (j + 1);
}
}
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();
}
=> num 변수를 for문 밖에다가 지정해놓고!
1부터 결과값이 나오니까 num=1;로 지정해놓고 결과값이 +1씩 증가하는 형태니까 num++
=> int num = 1;을 for문 밖에다가 지정해놓는 이유는! +1씩 늘어나야하는데
for문 안에다가 두면 제일바깥for문 안에 두면 1234 1234 1234 1234
// 안쪽for문 안에 두면 1111 1111 1111 1111
이런식으로 출력될것이다!
☆또다른 방식☆
arr[i][j] = (i*4) + (j+1);
=> 결과값으로 봤을때 i(행)은 +4씩 늘어나고 있고! j(열)은 +1씩 늘어나고 있으니까
2) {}값을 가지고 초기화 저장
int[][] arr2 = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
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();
=> 애초에 int[][] arr2 = {{},{},{},{}}; 이렇게 값 초기화 시켜주고 이중 for문으로 결과값을 나타내준다!
int[] arr1 = {1,2,3};
int[] arr3 = new int[6]
for (int i=0; i<3; i++) {
System.out.print(arr1[i] + " ");
}
System.out.println();
for (int i=0; i<arr3.length; i++) {
System.out.print(arr3[i] + " ");
}
System.out.println();
System.out.println("여기부터 다르게!");
//arr3 == arr1; -> "주소값"을 가져오게된다! 배열은 참조변수니까
for(int i=0; i<arr1.length; i++) {
arr3[i] = arr1[i];
} //"값"만 넘어가게된다! 6열 배열은 그대로 넘어가고
for (int i=0; i<3; i++) {
System.out.print(arr1[i] + " ");
}
System.out.println();
for (int i=0; i<arr3.length; i++) {
System.out.print(arr3[i] + " ");
}
System.out.println();
=> 출력 :
1 2 3
0 0 0 0 0 0
여기부터 다르게!
1 2 3
1 2 3 (arr3 == arr1; 인 경우! "주소값"만 넘긴 경우!)
1 2 3
0 0 0 0 0 0
여기부터 다르게!
1 2 3
1 2 3 0 0 0 (for문으로 "값"만 넘긴 경우!
※
for(int i=0; i<arr1.length; i++) {
arr3[i] = arr1[i];
}
=>같은 코드!!!!!!
System.arraycopy(arr1, 0, arr3, 0, 3);
//가져올 변수,가져올위치,저장할변수,저장할위치,갯수
System.arraycopy(arr1, 0, arr3, 0, **arr1.length**);
=> 아예 그냥 갯수를 arr1.length로 해놓으면 몇개인지 세어봐서 안써도 되잖아!
for (int i=0; i<arr3.length; i++) {
System.out.print( (i+1) + "번째 값 " + arr3[i] + " ");
}
System.out.println();
=> 번째 값을 나타낼때는 +1을 해주면 된다 배열이 0부터 시작하니까!
int n=1;
for (int value : arr3) { // 1 2 3 0 0 0
//임시담을변수 : 배열(여러개가 들어있는)
System.out.print(n + "번째 값 " + value + " ");
n++;
}
System.out.println();
=> for (int value : arr3) 로 지정해주면 처음부터 끝까지 다 돌게되는 배열 출력값이 나오게 되다!
=> 따라서 arr3[3] 까지 도는 이런건 나타낼 수 없다!
=> 여기선 n이라는 변수를 따로 만들어서 번째값에 넣어야 한다! 1번째값 부터 나와야하니까 n=1;로 잡고 출력이 나올때 마다 +1 되야하니까 n++;
2차원 배열을 활용하여 다음 결과가 나오도록 코드를 작성하시오.
16 15 14 13
12 11 10 9
8 7 6 5
4 3 2 1
①
int[][] arr = new int[4][4];
for (int i=3; i>=0; i--) {
for (int j=3; j>=0; j--) {
arr[i][j] = (i*4) + (j+1);
}
}
// i:3 j:3210
i:2 j:3210
i:1 j:3210
i:0 j:3210
// i(행): +4 j(열): +1
for (int i=3; i>=0; i--) {
for (int j=3; j>=0; j--) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
=> 우선 1이 먼저 나와야 할곳은 i[3]j[3] 부터니까 i:3 j:3210, i:2 j:3210,i:1 j:3210, i:0 j:3210 순으로 나오게끔 for반복문을 돌려야 한다!
=> 그다음 i(행) 부분을 봤을때 16 12 8 4 순으로 -4씩 되고있잖아? 근데 우리는 역순으로 for반복문이 나오게 한거니까 +4라고 생각하면 돼!
그래서 (i4)!
// i(행): 4가 아닌 +4를 하면 111098 10987 9876 8765 가 출력된당!
=> 마찬가지로 j(열) 부분도 16 15 14 13 순으로 -1씩 이니까 역순으로 하면 +1이라고 생각!
그래서 (j+1)!
// j(열): +1이 아닌 *1을 하면 15141312 111098 7654 3210이 출력! (배열보다 +1을 해줘야지)
② num을 활용한 방식!
int [][] arr = new int[4][4];
int num = 16;
for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
arr[i][j] = num;
num--;
}
}
// num이 16부터 시작하고 num--;
// i:0 j:0123
// i:1 j:0123
// i:2 j:0123
// i:3 j:0123
for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
=> 규칙을 보면 열이 -1씩 되고 있다!
num을 전역변수로 놓고 16부터 값이 나와야하니까 16으로 잡고! arr[i][j]의 값이 1615141312...1까지 나와야하므로
arr[i][j] = num;
num--;
=> 그럼 문제와 같은 값이 출력된다!
- 16 12 8 4
15 11 7 3
14 10 6 2
13 9 5 1
int[][] arr = new int[4][4];
for (int i=3; i>=0; i--) {
for (int j=3; j>=0; j--) {
arr[i][j] = (i+1) + (j*4);
}
}
// i:3 j:3210
i:2 j:3210
i:1 j:3210
i:0 j:3210
// i(행): +4 j(열): +1
for (int i=3; i>=0; i--) {
for (int j=3; j>=0; j--) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
=> 위랑 같은 선상에서 생각하면 되는데
우선 1이 먼저 나와야 할곳은 i[3]j[3] 부터니까 i:3 j:3210, i:2 j:3210,i:1 j:3210, i:0 j:3210 순으로 나오게끔 for반복문을 돌리고
=> 이때는 i(행)이 16 15 14 13 순으로 가니까
(i+1)
=> j(열)은 16 12 8 4 순으로 가니까
(j*4)
② num을 활용한 방식!
int [][] arr = new int[4][4];
int num = 16;
for (int j=0; j<4; j++) {
for (int i=0; i<4; i++) {
arr[i][j] = num;
num--;
}
}
// num이 16부터 시작하고 num--;
// i:0123 j:0
// i:0123 j:1
// i:0123 j:2
// i:0123 j:3
for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
=> 위와 같은 방식인데! 여기서는 num이 순서대로 나오는게 행이 순서대로 -1씩 되고있으니까
i와 j의 for문을 바꿔주면 i:0123 j:0, i:0123 j:1 ,i:0123 j:2, i:0123 j:3 식으로 출력될거다!!!
=> 그럼 이 순서대로 출력하면 문제의 답처럼 출력될거야!
C, C++ : 절차지향
Java : 객체지향
클래스 : 붕어빵틀
인스턴스(객체) : 붕어빵
new ~: 하나의 인스턴스(객체)를 만드는것
Bag myBag = new Bag(); //새로운 Bag 인스턴스 객체 생성
// Bag클래스타입 myBag이라는 변수 (참조변수->주소를 가리키고있는)
Bag yourBag; //아직 초기화X
Bag ourBag = null; //값은 있는데 주소는 없는!
yourBag = new Bag(); //새로운 Bag 인스턴스 객체 생성
ourBag = new Bag(); //새로운 Bag 인스턴스 객체 생성
//ourBag = I11; 이라는 주소값 저장! //null값이 주소값으로 변경!
=> new Bag(); 해서 새로운 Bag 인스턴스 객체 생성
=> yourBag은 아직 초기화X, 값이 없는 상태
=> ourBag은 null 값은 있는데 주소값은 없는!
=> new Bag(); 해서 새로운 Bag 인스턴스 객체 생성
=> new Bag(); 해서 새로운 Bag 인스턴스 객체 생성
결과 :
myBag -> Bag객체생성 //주소값 H5
yourBag -> Bag객체생성 //주소값 I8
ourBag -> Bag객체생성 //주소값 null->I11
=> 클래스 관련된 변수들 모여있는 곳
=> 객체 만들때 (new 할때) 초기화 기능 수행
=> 어떤 동작을 만드는 코드 블록 { }