본문 바로가기
java

22.11.01 배열, 향상된 for문, 객체화(instance), 다중배열, 논리 연산 문자와 정수 변환

by SoulMania 2023. 2. 12.

배열에서 스택영역은 배열이름과 공간 그리고 그 공간에 힙영역 번지수를 저장하고
힙영역에는 해당 번지수에 배열 길이만큼의 공간과 데이터들을 저장한다.

배열 변수는 참조 변수 - 배열 생성되기 전 null로 초기화 가능
타입[] 변수 = null;

ch05.zip
0.00MB
ch0304-오전.zip
0.01MB
Ex03_logicalOp_p92.java
0.00MB
설명.txt
0.02MB
예복습 내용.txt
0.00MB
KakaoTalk_20221027_103106639.png
0.06MB


배열 변수가 null 값을 가진 상태에서 항목에 접근 불가
변수[인덱스]” 못함
NullPointerException 발생

5장 확인문제

  1. 4
    p.143
    참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null 값을 가질 수 있다. null 값도 초기값으로 사용할 수 있기 때문에 null로 초기화된 참조 변수는 스택 영역에 생성된다.
  2. 3
    p.141
    참조하는 변수나 필드가 없다면 의미 없는 객체가 되기 때문에 이것을 쓰레기로 취급하고 JVM은 쓰레기 수집기(Garbage Collector)를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거한다.
  3. 2
    p.146
    문자열은 String 객체로 생성되고 변수는 String 객체를 참조한다.
    p.142
    참조 타입 변수들 간의 ==, != 연산은 동일한 객체를 참조하는지, 다른 객체를 참조하는지 알아볼 때 사용된다. 참조 타입 변수의 값은 힙 영역의 객체 주소이므로 결국 주소 값을 비교하는 것이 된다.
    p.147
    동일한 String 객체이건 다른 String 객체이건 상관없이 문자열만을 비교할 때에는 String 객체의 equals() 메소드를 사용해야 한다.
  4. 2
    p.153
    배열 변수를 이미 선언한 후에 다른 실행문에서 중괄호를 사용한 배열 생성은 허용되지 않는다.
    배열 변수를 미리 선언한 후, 값 목록들이 나중에 결정되는 상황이라면 다음과 같이 new 연산자를 사용해서 값 목록을 지정
    변수 = new 타입[] {값1, 값2, 값3...};
  5. 3
    p.156
    boolean 타입 배열의 초기값: false

"난수정수"+i+"번째 ="


//향상된 for문이용하여 출력하기
System.out.println("--향상된 for문이용하여 출력--");
for(int val : s) {
//1.배열s에 접근
//2.배열s의 인덱스0에 위치한 값100을 변수val에 저장
System.out.println(val);
//3.변수val출력
//4.배열s에서 가져올 항목이 존재하면
//5.배열s의 인덱스1에 위치한 값 90을 변수val에 저장
//6.변수val출력
//7.배열s에서 가져올 항목이 존재하면
//8.배열s의 인덱스2에 위치한 값 85를 변수val에 저장
//9.변수val출력
//.....
}


  /*[0]
   *[1]
   *[2]출력*/
  for(int i=0;i<3;i++) {
     //System.out.println("i가["+i+"]일때");
     //0 1 2 3 4출력 
     for(int j=0;j<5;j++) {
        System.out.print("["+i+"]["+j+"],");
     }
     System.out.println();//줄바꿔
  }

package ch05;

/*배열(Array)이란?(교재 p149)

  • 같은 타입의 데이터를 연속된 공간에 저장하는 자료구조
  • 각 데이터 저장 위치는 인덱스 부여해 접근

*배열선언-primitive 타입
타입[] 변수명;
타입 변수명[];

*배열생성
1.변수명 = new 타입[길이]; new라는 연산자를 이용해서 배열선언 --> 타입에 따른 자동초기화 진행
2.변수명 = {값1, 값2,...값n};
3.변수명 = new 타입[]{값1, 값2,...값n}; 위에 두개 섞은 것. 주의. 1,2 섞어서 선언하는 방법은 []에 길이를 명시하지 않는다. 하지만 보통은 첫번째, 두번째 방식을 가장 많이 사용.

*타입에 따른 자동초기화(p156)
-char : '\u0000' -> 공백으로 자동초기화가 된다는 뜻.
-boolean : false
-정수 : byte, short, int -> 0
long -> 0L 리터럴 형변환(기본형이 int이기 때문에)
-실수 : float -> 0.0F(기본형이 double이라서)
double -> 0.0
-클래스[] : null

*배열에 접근 : Index를 이용
Index는 0부터 1씩 증가하는 형태
변수명[0] -> Index가 0인 요소에 접근 -> 예시 System.out.println(변수명[0])
변수명[1] -> Index가 1인 요소에 접근 -> 변수명[1]=100;

*/

public class ArrayEx01 {
public static void main(String[] args) { //메소드에 들어가는 변수는 매개변수
//배열선언-타입[] 변수명;
//배열생성-변수명={값1, 값2, ...값n};
int[] scores = {100, 90, 80, 50, 100}; // 하나만 실수가 들어갈 수 없다. 같은 타입의 데이터만 배열로 선언가능
System.out.println(scores); //-->이렇게 하면 배열 주소가 저장되어 출력된다. [I@15db9742 일반 변수에 글자가 보이는것은 그값으로 초기화된것이다. 배열은 다름.

    //배열접근하여 출력 - 배열명[인덱스번호]
    System.out.println("scores[0] : "+scores[0]); //100 출력. 인덱스 0에 내용 출력
    System.out.println("scores[1] : "+scores[1]); //90 출력. 인덱스 1에 내용 출력
    System.out.println("scores[2] : "+scores[2]); //80 출력. 인덱스 2에 내용 출력
    System.out.println("scores[3] : "+scores[3]); //50 출력. 인덱스 3에 내용 출력
    System.out.println("scores[4] : "+scores[4]); //100 출력. 인덱스 4에 내용 출력

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

    for(int i=0; i<=4; i++) {
        System.out.println("scores["+i+"] : "+scores[i]);  //변수는 문자열에 포함되면 문자열로 인식되어 그냥 i로 출력
    }

    scores[0]=99; //값을 바꿀수도 있다. index[0]인 요소에 값을 변경

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

    for(int i=0; i<scores.length; i++) {
        System.out.println("scores["+i+"] : "+scores[i]);  //변수는 문자열에 포함되면 문자열로 인식되어 그냥 i로 출력
    }


}

}


package ch05;

//new 연산자로 배열을 생성(p155) -> 타입별로 자동초기화 확인하는 예제
/* *타입에 따른 자동초기화(p156)
-char : '\u0000' -> 공백으로 자동초기화가 된다는 뜻.
-boolean : false
-정수 : byte, short, int -> 0
long -> 0L 리터럴 형변환(기본형이 int이기 때문에)
-실수 : float -> 0.0F(기본형이 double이라서)
double -> 0.0
-클래스[] : null

*배열길이 : 배열명.length

*배열에 접근 : Index를 이용
Index는 0부터 1씩 증가하는 형태
변수명[0] -> Index가 0인 요소에 접근 -> 예시 System.out.println(변수명[0])
변수명[1] -> Index가 1인 요소에 접근 -> 변수명[1]=100;
*/
public class ArrayEx02 {
public static void main(String[] args) {
//타입[] 배열변수명[] 둘 다 되지만 보통은 타입뒤에 넣는 경우가 많다.
//타입[] 배열변수명 = new 타입[길이]; -> 자동초기화

    //String 5개가 저장된 배열선언
    String[] StringArr = new String[5];
    int len2 = StringArr.length;

    //배열길이 출력
    System.out.println("StringArr의 길이 = "+len2);
    //배열길이가 적용된 for문 이용하여 모든 값 출력 
    for(int i=0;i<len2;i++) {
        System.out.println("StringArr["+i+"] = "+StringArr[i]);
    }

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

    //실수타입 데이터 3개를 저장하기 위한 배열 변수선언
    double[] doubleArr = new double[3]; //0.0 으로 자동초기화
    float[] floatArr = new float[3]; //0.0 으로 자동초기화
    //배열길이 출력-배열명.length
    int len = doubleArr.length;
    System.out.println("doubleArr의 길이 = "+len);//3

// System.out.println("doubleArr의 길이 = "+doubleArr.length);//3
System.out.println("floatArr의 길이 = "+floatArr.length);

    //모든데이터를 출력
    //for문 이용하여 값출력 - 인덱스가 0 1 2
    //아래 for문은 위에서 배열의 길이를 len변수에 저장한 것을 활용
    for(int i=0; i<len;i++) {
        System.out.println("doubleArr["+i+"] = "+doubleArr[i]); //실수는 무조건 0.0으로 초기화
    }
    //아래 for문은 조건식에 배열의 길이(double.length)를 활용

// for(int i=0; i<doubleArr.length;i++) {
// System.out.println("doubleArr["+i+"] = "+doubleArr[i]); //실수는 무조건 0.0으로 초기화
// }
for(int i=0; i<floatArr.length;i++) {
System.out.println("floatArr["+i+"] = "+floatArr[i]); //실수는 무조건 0.0으로 초기화
}

    System.out.println("-------------------------------------------------------------");
    //long타입 데이터 3개를 저장하기 위한 배열 longArr변수선언
    long[] longArr = new long[3]; //0로 자동초기화 실제로 0인데 L으로 형변환되어 0L인데 0으로 표시되는것이 맞다.

    //배열길이 출력
    System.out.println("longArr의 길이 = "+longArr.length);

    //모든데이터를 출력
    for(int i=0; i<longArr.length;i++) {
        System.out.println("longArr["+i+"] = "+longArr[i]); //정수는 무조건 0으로 초기화
    }

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

    //boolean타입 데이터 3개를 저장하기 위한 배열 booleanArr변수선언
    boolean[] booleanArr = new boolean[3]; //false로 자동초기화
    //배열길이 출력
    System.out.println("booleanArr의 길이 ="+booleanArr.length);
    //배열안의 특정인덱스에 위치한 요소에 접근 : 배열명[인덱스번호]
    System.out.println("booleanArr[0] = "+booleanArr[0]);
    System.out.println("booleanArr[1] = "+booleanArr[1]);
    System.out.println("booleanArr[2] = "+booleanArr[2]);

// System.out.println("booleanArr[3] = "+booleanArr[3]); // 이건 에러 발생. 배열 범위 넘어간 것 출력이기 때문에
//Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
//배열길이가 3인 배열을 생성하였고
//따라서 인덱스 번호는 [0], [1], [2]만 존재하는데
//인덱스3인 [3]인 요소에 접근하라고 하니 문제가 발생하였다라는 의미.
//ArrayIndexOutOfBoundsException 은 인덱스 범위를 벗어났음을 의미
//-->해결방법 : 인덱스 번호 확인

    //0번째 위치한 요소의 값을 true로 변경
    booleanArr[0] = true;
    //출력
    System.out.println("값이 수정된 booleanArr[0] = "+booleanArr[0]);



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



    //char타입의 데이터 3개를 저장하기 위한 배열 charArr변수선언&초기화
    char[] charArr = new char[3]; //-->char 주소지가 공백으로 3칸 나와버린다 (자동초기화)... 앞에 글씨를 써야 주소지 표시됨.

// System.out.println("ㅁㄴㅇㅁㄴㅇㅁㄴㅇ"+charArr); 이런식으로

    //int[] charArr = new int[3]; //-->int는 출력된다.
    System.out.println("charArr의 길이 ="+charArr.length);


    for (int i=0; i<charArr.length; i++) {
        System.out.println("charArr["+i+"] = "+charArr[i]); //공백으로 자동 초기화
    }


}

}


package ch05;

/* 배열생성
1.변수명 = new 타입[길이]; new라는 연산자를 이용해서 배열선언 --> 타입에 따른 자동초기화 진행
2.변수명 = {값1, 값2,...값n};
3.변수명 = new 타입[]{값1, 값2,...값n}; 위에 두개 섞은 것. 주의. 1,2 섞어서 선언하는 방법은 []에 길이를 명시하지 않는다. 하지만 보통은 첫번째, 두번째 방식을 가장 많이 사용.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
교재 154p add메소드를 이용한 두번쨰 소스가 훨씬 좋은 소스이고 이런식으로 소스를 짜야한다.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
/

public class ArrayEx03 {
public static void main(String[] args) {
//값을 할당하면서 배열생성

    //시험점수 5개를 저장한 배열을 생성하고, 값출력 (둘 다 가능)
    int[] s = new int[] {100, 90, 85, 90, 100};
    int[] scores = {100, 90, 85, 90, 100};

    //향상된 for문 이용하여 점수 출력하기
    System.out.println("--향상된 for문 이용하여 출력--");
     //향상된 for문, 포문안에 실행 문이 있을때 배열은 그냥 회수 지정을 하지만 단순 출력같은 동작일때는 비교하는 배열 값을 저장하여 출력 
    for(int temp : scores) {
        /*1. 배열 scores에 접근
         *2. 배열 s의 인덱스0에 위치한 값 100을 변수 temp에 저장 */
        System.out.println(temp);
        //3. 변수 temp출력
        //4. 배열 scores에서 가져올 항목(요소, 아이템)이 존재하면
        //5. 다시 배열 scores의 하나증가된 인덱스 1에 위치한 값 90을 변수 temp에 저장 
        //6. 변수 temp출력
        //7. 배열scores 에서 가져올 항목이 존재하면
        //8. 배열scores의 하나증가된 인덱스 2에 위치한 값 85를 변수 temp에 저장
        //9. 변수 temp출력
        //......

    }
    System.out.println("------------------------------------------------------");

    //값 출력
    for (int i=0; i<scores.length;i++) {
        System.out.println("scores["+i+"] = "+scores[i]);
    }
    //그냥 계산기 계산 -->>> 총합 : 465  //평균:93
    int n0=100; int n1=90; int n2=85; int n3=90; int n4=100;
    int sum=0;//총합
    sum=n0+n1+n2+n3+n4;
    double avg = 0.0; //평균
    avg=sum/5;
    System.out.println("점수 총합 : "+sum);
    System.out.println("점수 평균 : "+avg); 

    System.out.println("-----------------------------------------------------------");
    //for문 계산 강사님 짬 --->>> 총점, 평균
    int sum1 = 0;//총합을 저장하기 위한 변수선언 및 초기화
    for(int i=0; i<scores.length;i++) {
        sum1=sum1+scores[i];
        //sum1=sum1+scores[0]; //0+100의 결과를 sum1에 저장
        //100+90    100+scores[1]의 결과를 sum1에 저장
        //190+85    190+scores[2]의 결과를 sum1에 저장
        //275+90    275+scores[3]의 결과를 sum1에 저장
        //365+100   365+scores[4]의 결과를 sum1에 저장
        //sum1에는 465가 저장
    }
    System.out.println("점수 총합 = "+sum1);
    System.out.println("점수 평균 = "+(double)(sum1/scores.length));

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


    //for문 계산 내가 짬 --->>> 총점, 평균
    int sum2 = 0;
    double avg2 = 0.0;
    for (int i=0; i<scores.length;i++) {        
        sum2+= scores[i];

// sum2=sum2+scores[i]; 위와 동일
}
avg2=sum2/scores.length;
System.out.println("점수 총합 : "+sum2);
System.out.println("점수 평균 : "+avg2);

//    sum = sum + scores[i]; sum+=scores[i]; sum=scores[i]



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



    //"펭귄", "강아지", "낙타"
    //String[] animals = new String[10] {"펭귄", "강아지", "낙타"}; //배열초기 값을 넣었을때는 배열길이를 정의할 수 없다.
    //주의.[길이]를 작성하지 않는다.
    //해결방법 : 초기화값의 개수를 제시하지 않는다. 즉 배열 길이를 제거
    //Cannot define dimension expressions when an array initializer is provided

    //아래코드 사용가능
    String[] animal = new String[] {"펭귄", "강아지", "낙타"};

    String[] animals = {"펭귄", "강아지", "낙타"}; //이런방식으로 도 가능
    //배열길이-배열명.length
    System.out.println("animals 배열의 길이는 = "+animals.length);

    for (int i=0; i<animals.length;i++) {
        System.out.println("animals["+i+"]:"+animals[i]);
    }
}

}


package ch05;

import java.util.Scanner;

public class ArrayQuiz {

public static void main(String[] args) {
    //Math.random(): 0.0이상 1.0미만의 난수구하기
    double nan=(Math.random()*100)+1;
    System.out.println("난수실수 = "+nan);
    System.out.println("------------------------------------------------------");

//    //start이상~(start+n)범위에 속하는 정수얻기(p536)
    //아래랑 같은 형식

//    //(int)(Math.random()*n)+start
    //아래랑 같은 형식        

    //1~100 사이의 1개의 난수를 구하기
    int nan1=(int)(Math.random()*100)+1;
    System.out.println("난수정수 = "+nan1);
    System.out.println("------------------------------------------------------");


    //1~100 사이의 5개의 난수를 구하기
    int nan2;
    for(int i=0 ; i<5; i++) {
    nan2=(int)(Math.random()*100)+1;
        System.out.println("난수정수"+i+"번째 ="+nan2);
    }
    System.out.println("------------------------------------------------------");


    //정수 5개를 저장하기 위한 배열 생성 및 출력
    int b = 5; //--> 이렇게 할거면 스캐너써서 입력받는것이 효율적
    int[] intArr = new int[b]; //길이 저장
    for(int i=0 ; i<5; i++) {
        System.out.println("intArr["+i+"] = "+intArr[i]);
    }
    System.out.println("------------------------------------------------------");


    //1~100 사이의 5개의 난수를 배열에 저장하여 출력하세요.
    for(int i=0; i<intArr.length; i++) {//5번 반복
        int r1 = (int)(Math.random()*100)+1; //double형을 int형으로 강제 형변환
        intArr[i]=r1;
        System.out.println("난수정수"+i+"번째 ="+intArr[i]); 

        }

    //입력 -> 작업 -> 출력 순으로 프로세스가 진행 
    //난수 5개 출력 (강사님 소스) 
    int nums=0;
    for(int i=0; i<5; i++) { //5번 반복
        nums = (int)(Math.random()*100)+1;
        System.out.println(nums);

// System.out.println((int)(Math.random()*100)+1);
}

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

    //난수 5개 출력에 배열사용 (강사님 소스)
    //코드구현1>
    int[] nums2=new int[5]; 
    for(int i=0; i<nums2.length; i++) { //5번 반복
        nums2[i] = (int)(Math.random()*100)+1;
        System.out.println(nums2[i]);

// System.out.println((int)(Math.random()*100)+1);
}

    System.out.println("------------------------------------------------------");
    //체계적으로 나눠 코딩하기.(강사님 소스) 
    //코드구현2> 절차를 나누어서 진행하는 형태. 수정해서 작업하기가 수월하다. 향수 메서드로 변경할 수 있고
    //선언
    int[] nums3=new int[5];
    //입력 & 작업
    for(int i=0; i<nums3.length;i++) {
        nums3[i] = (int)(Math.random()*100)+1;    
    }
    //출력 --> 출력하는 메소드만 따로 
    for(int i=0; i<nums3.length;i++) {
        System.out.println(nums3[i]);
    }

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

    //향상된 for문을 이용하여 배열안의 값을 출력
    //배열이나 컬렉션에 value가 존재하는 동안만 반복해서 실행
    /*실행순서
     * 1. 배열명 또는 컬렉션명
     * 2. 데이터타입 변수명
     *         배열(또는 컬렉션)에서 value를 하나씩 꺼내어 
     *    변수에 저장한다.
     * 3. for {} 블럭안의 코드를 반복실행
     */
    int[] nArr=new int[5]; //0 0 0 0 0 향상된 for문, 이 포문에서는 배열은 그냥 회수 지정 
    for(int temp : nArr) {
        temp = (int)(Math.random()*100)+1; //만약 난수 메소드가 없으면 그냥 배열에 있는 값 찍어버린다.★★★★★★★★★★★★★★★
        System.out.println(temp);

        }

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

    //정수 5개 입력받기

    Scanner sc = new Scanner(System.in);
    System.out.println("숫자입력하세요");
    int inInt = sc.nextInt();
    int[] ik = new int[inInt];
    for(int i=0 ; i<ik.length; i++) {
        ik[i] = (int)(Math.random()*100)+1;    
        System.out.println("ik["+i+"] = "+ik[i]);
    }

}

}


package ch0304;

import java.util.Scanner;// java.util패키지 안의 Scanner클래스를 import하겠다 라는 뜻.

//논리 연산자(교재p91

)
/*논리 연산자 (&&, ||, &, |, ^, !) (p.91

93)
-논리곱(&&), 논리합(||), 배타적 논리합(^) ,논리 부정(!) 연산 수행
-피연산자는 boolean 타입만 사용 가능

*기본타입 8가지(p38) -->괄호안에 숫자는 byte
*-char(2) : ''
-정수:byte(1) < short(2) < int(4, 기본) < long(8)
-실수:float(4), double(8, 기본)
-논리형:boolean : true, false

if(조건1) {
//조건1 만족시 실행코드
}else if (조건n){
//조건 n만족시 실행코드
}else{
// 모든 조건x 실행코드
}
*/

public class Ex03_logicalOp_p92 {

public static void main(String[] args) {
    String strCode="A"; //문자열은 한글자이상

    //p130 5~14라인에서 사용
    //Scanner 클래스의 객체를 이용하여 콘솔을 통해 user로 부터 문자열을 입력 받기
    //문법> 타입 참조변수명=new 클래스명(참조변수)
    //new Scanner(System.in)는 Scanner클래스의 객체를 생성한다.
    /*Scanner sc = 는
     * 생성된 Scanner클래스의 객체를 참조 sc변수에 저장한다.*/
    /* sc.nextLine()는 
     * 참조변수sc를 통해 Scanner클래스의
     * nextLine()메서드를 호출하여 실행한다.
     * enter단위로 읽는다*/
    /*String inputString = 는
     * user로 부터 콘솔로 입력받은 문자열을
     * String타입 inputString변수에 저장한다.*/
    Scanner sc = new Scanner(System.in);         //sc.   해보면 스캐너 클래스에서 사용할 수 있는 기능들을 모두 사용 할 수 있다.  교재 130 참조
    System.out.println("숫자입력하세요");

// int inputInt = sc.nextInt(); //정수로 읽어들이기
// System.out.println("inputInt="+inputInt);

    double inputDouble = sc.nextDouble(); //double(실수)로 읽어들이기
    System.out.println("inputDouble="+inputDouble); 

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

// System.out.println("내용을 입력하세요");
// System.out.print(">");
// String inputString = sc.nextLine(); //문자열로 읽어들이기
// System.out.println("inputString="+inputString);
// System.out.println("==================================");
//

    //char타입 charCode변수에 'A'초기화
    char code='A';
    System.out.println("code="+code);//A

    //int타입 charCode변수에 'A'초기화
    int charCode='0';
    code=(char)charCode; //강제 형변환
    //int타입 charCode변수안의 값을 강제로(????)타입으로 변환하여
    //char타입 code변수에 저장
    System.out.println("charCode="+charCode);//65
    System.out.println("(char)charCode="+code);//A


    //charCode변수에 저장된 값에 따라 대문자, 소문자, 0~9 숫자로 출력
    if(charCode>=65 & charCode<=90) { //65이상이면서 90이하라면
        System.out.println("대문자");
    }
    if(charCode>=97 && charCode<=122) { //97이상이면서 122이하라면
        System.out.println("소문자");
    }

// if(!(charCode<48) && !(charCode>57)) { 책 내용==>48미만이 아니면서 57초과가 아니라면
// System.out.println("소문자");
if(charCode>=48 && charCode<=57) { //48이상이면서 57이하라면
System.out.println("0~9 숫자 이군요");
}

 

}

}


package ch05;

/*다차원 배열 (교재 p162~)

  • 2차원 배열 이상의 배열
  • 수학의 행렬과 같은 자료 구조

1.변수명 = new 타입[길이]; new라는 연산자를 이용해서 배열선언 --> 타입에 따른 자동초기화 진행
2.변수명 = {값1, 값2,...값n};
3.변수명 = new 타입[]{값1, 값2,...값n}; 위에 두개 섞은 것. --->해당 예제는 이 방식을 사용
*/

/*줄=행=row
*칸=열=column
교재 164p~165p
*/
public class ArrayEx04_p162 {

public static void main(String[] args) {

    int[][] scores= {
            //[0][0], [0][1], [0][2], [0][3], [0][4]
                {100,    95,        94,        93,        91}, //학생1의 5과목 점수
            //[1][0], [1][1], [1][2], [1][3], [1][4]
                {80,    81,        82,        93,        84}, //학생2의 5과목 점수
            //[2][0], [2][1], [2][2], [2][3], [2][4]
                {70,    71,        72,        73,        74}  //학생3의 5과목 점수        
                    };

    //이건 내 코드 i 및 j 의 조건문 길이를 바꿔줄것 아래

// for(int i=0; i<3;i++) { //0, 1, 2 출력 for문 (행 출력)
// for(int j=0; j<5;j++) { //0, 1, 2, 3, 4 출력 for문 (열 출력)
// System.out.println("학생"+(i+1)+"의 다섯과목 중 "+(j+1)+"번째 과목 점수는 = "+ scores[i][j]);
// }
// System.out.println("-------------------------------------");
// }
//

    //내가 한 것. 
    for(int i=0; i<scores.length;i++) { //0, 1, 2 출력 for문 (행 출력)
        for(int j=0; j<scores[0].length;j++) { //0, 1, 2, 3, 4 출력 for문 (열 출력)
            System.out.println("학생"+(i+1)+"의 다섯과목 중 "+(j+1)+"번째 과목 점수는 = "+ scores[i][j]);
        }
        System.out.println("-------------------------------------");
    }




    //아래는 따로 출력. 강사님 코드

// /[0]
// *[1]
// *[2]출력
/
// for(int i=0; i<3;i++) { //0, 1, 2 출력 for문 (행 출력)
// System.out.println("["+i+"]");
// }
//
// //0 1 2 3 4 출력
// for(int j=0; j<5;j++) { //0, 1, 2, 3, 4 출력 for문 (열 출력)
// System.out.print("["+j+"], ");
// }
System.out.println("-------------------------------------");
//같이 출력. 강사님 코드
for(int i=0; i<3;i++) { //0, 1, 2 출력 for문 (행 출력)
//System.out.println("i가["+i+"]일때");
for(int j=0; j<5;j++) { //0, 1, 2, 3, 4 출력 for문 (열 출력)
//System.out.print("scores["+i+"]["+j+"], ");
System.out.print(scores[i][j]+", "); //순수한 배열로 표현!!!!!!!!!!!!!!!!★★★★★★★★★★
}
System.out.println(); //줄바꿔
}

    //0 1 2 3 4 출력

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

// int[] stu1 = {100,95,94,93,91}; //학생1의 5과목 점수
// int[] stu2 = {80,81,82,93,84}; //학생2의 5과목 점수
// int[] stu3 = {70,71,72,73,74}; //학생3의 5과목 점수

    System.out.println(); //빈줄
    System.out.println("===================================");
    //5과목의 점수를 저장하는 배열을 생성, 출력
    int[] stu1 = {100, 95, 94, 93, 91}; //학생1의 5과목 시험점수
    for(int i=0; i<stu1.length; i++) { //stu1.length=5
        //System.out.print(stu1[i]+"\t");
        System.out.print(stu1[i]+"  ");
    }

}

}