본문 바로가기
java

22.11.02 다차원 배열, 클래스 객체화를 위한 설계

by SoulMania 2023. 2. 12.

클래스 객체 를 위한 설계.txt
0.00MB
ArrayEx04_2.java
0.00MB
ch05.zip
0.01MB
ch06.zip
0.00MB
다중배열 영역설명 그림.jpg
2.15MB
배열 내림차순 정렬 소스.zip
0.00MB
설명.txt
0.02MB
ch06_HomeWork_송준호.zip
0.00MB
PhoneMainEx.txt
0.00MB
PhoneClassEx.txt
0.00MB


    //향상된 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);

        }

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

}

}


package ch05;

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

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

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

/*줄=행=row
*칸=열=column
교재 164p~165p
*/

public class ArrayEx04_2 {

public static void main(String[] args) {

    //2차원배열 생성, 값초기화
    //가변배열 165p
    String[][] animals = {
                            {"말", "염소", "돌고래", "강아지", "고양이"},
                            {"제비", "딱따구리", "까치", "닭", "앵무새"},
                            {"뱀", "도마뱀", "이구아나"}
                        };
    //animals 값출력
    //내가 한 것. 
    for(int i=0; i<animals.length;i++) { //0, 1, 2 출력 for문 (행 출력)
        System.out.println("animals["+i+"]의 동물은?");
        for(int j=0; j<animals[i].length;j++) { //0, 1, 2, 3, 4 출력 for문 (열 출력)
            System.out.print((j+1)+"번째 동물은 ="+ animals[i][j] + " | ");
            //System.out.println("학생"+(i+1)+"의 다섯과목 중 "+(j+1)+"번째 과목 점수는 = "+ scores[i][j]);
        }
        System.out.println();
        System.out.println();
    //    System.out.println("-------------------------------------");
    }
    System.out.println("------------------------------------------------------");
    //강사님이 한 것.
    for(int i=0; i<animals.length;i++) { //행수만큼 반복
        for(int j=0; j<animals[i].length; j++) { //행별 칸수만큼 반복
            System.out.print(animals[i][j]+"  ");
        }
        System.out.println();
    }




    //animals[0]배열길이
    //animals[1]배열길이
    //animals[2]배열길이
    System.out.println("animals[0] 배열길이 = "+animals[0].length); //2차원 배열에서 배열길이는 행단위를 말한다.
    System.out.println("animals[1] 배열길이 = "+animals[1].length); //2차원 배열에서 배열길이는 행단위를 말한다.
    System.out.println("animals[2] 배열길이 = "+animals[2].length); //2차원 배열에서 배열길이는 행단위를 말한다.
    System.out.println("------------------------------------------------------");

    //animals[0] ~ animals[2] 주소출력
    System.out.println("animals[0] 참조변수= "+animals[0]); 
    System.out.println("animals[1] 참조변수= "+animals[1]); 
    System.out.println("animals[2] 참조변수= "+animals[2]); 
    /* 콘솔 결과값
         animals[0] 참조변수= [Ljava.lang.String;@15db9742
        animals[1] 참조변수= [Ljava.lang.String;@6d06d69c
        animals[2] 참조변수= [Ljava.lang.String;@7852e922
     */
    System.out.println("------------------------------------------------------");

    //배열길이
    System.out.println("animals 배열길이 = "+animals.length); //2차원 배열에서 배열길이는 행단위를 말한다.
    System.out.println("------------------------------------------------------");

    //주소출력
    System.out.println("animals 참조변수= "+animals); //콘솔 결과값 animals = [[Ljava.lang.String;@15db9742   -> 바뀌었다. [[Ljava.lang.String;@4e25154f
    System.out.println("------------------------------------------------------");
    System.out.println();//빈줄
    System.out.println();//빈줄
    System.out.println();//빈줄

    //     스택영역            |         힙영역
    String[] animal1 = {"말", "염소", "돌고래" }; //포유류
    String[] animal2 = {"제비", "딱따구리", "까치"}; //조류
    String[] animal3 = {"뱀", "도마뱀", "이구아나"}; //파충류

    //향상된 for문 활용하여 animal2의 값 출력
    /*for(타입 변수 : 배열명 or 컬렉션명) {
       //반복실행코드
        } */
    System.out.println("--향상된 for문 이용하여 출력--");
     //향상된 for문, 포문안에 실행 문이 있을때 배열은 그냥 회수 지정을 하지만 단순 출력같은 동작일때는 비교하는 배열 값을 저장하여 출력 
    int b=0;
    for(String temp : animal2) {
        System.out.println("animal2 배열의 ["+b+"] 값 = "+ temp);
        b++;
    //    System.out.println(temp);
    } //보통 향상된 포문은 일반적으로 배열이나 변수에 있는 모든 데이터를 출력할때 많이 사용한다. 
      //일반 포문은 일정범위를 출력할때 조건문을 수정하여 출력하는데 의미가 있다.



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

    //for문 활용하여 animal1의 값 출력
    for(int i=0; i<animal1.length; i++) {
        System.out.println("animal1 배열의 ["+i+"] 값 = "+ animal1[i]);
    }

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

    //for문 활용하여 animal2의 값 출력
    for(int i=0; i<animal2.length; i++) {
        System.out.println("animal2 배열의 ["+i+"] 값 = "+ animal2[i]);
    }

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

    //for문 활용하여 animal3의 값 출력
    for(int i=0; i<animal3.length; i++) {
        System.out.println("animal3 배열의 ["+i+"] 값 = "+ animal3[i]);
    }

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

    //배열길이
    System.out.println("animal1 배열길이 = "+animal1.length);
    System.out.println("animal2 배열길이 = "+animal2.length);
    System.out.println("animal3 배열길이 = "+animal3.length);

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

    //주소확인
    //주소지가 들어가는 참조변수(스택영역)
    //주소지는 서로 다르다. 힙영역에서 차지하는 공간이 다 다르니까
    System.out.println("animal1 참조변수 = "+animal1);
    System.out.println("animal2 참조변수 = "+animal2);
    System.out.println("animal3 참조변수 = "+animal3);

    //아래는 콘솔 결과값. 서로 다른 주소지를 차지하고있다.

// animal1 참조변수 = [Ljava.lang.String;@15db9742
// animal2 참조변수 = [Ljava.lang.String;@6d06d69c
// animal3 참조변수 = [Ljava.lang.String;@7852e922

}

}

//포유류 - 4개의 다리, 새끼를 낳아 => 말, 염소, 돌고래
//조류 - 깃털, 날개, 부리, 알을 낳아 => 제비, 딱따구리, 까치
//파충류 - 주로 따뜻한 지역, 폐호흡 => 뱀, 도마뱀, 이구아나

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ㄱ

package ch05;

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

/*배열 복사(p168)

  • 배열은 한 번 생성하면 크기 변경 불가
  • 더 많은 저장 공간이 필요하다면 보다 큰 배열을 새로 만들고
    이전 배열로부터 항목 값들을 복사
  • 배열 복사 방법
  • for문 이용
  • System.arrayCopy() 메소드 이용
  • Arrays 클래스 이용
    */

public class ArrayEx05_p168 {

public static void main(String[] args) {
    // 원본 배열
    String[] oldStrArr = {"자바", "배열", "복사"};
    // 새 배열
    String[] newStrArr = new String[10]; //새배열. null로 자동초기화

    System.out.println("--- oldStrArr값 출력 ---");
    for(int i=0; i<oldStrArr.length; i++) {
        System.out.print(oldStrArr[i]+" ");
    }
    System.out.println();//줄바꿈 또는 빈줄

    System.out.println("--- newStrArr값 출력 ---");
    for(int i=0; i<newStrArr.length; i++) {
        System.out.print(newStrArr[i]+" ");
    }
    System.out.println();//줄바꿈 또는 빈줄


    //배열복사
    System.out.println("--- 배열복사 진행 ---");

// System.arraycopy(oldStrArr, 0, newStrArr, 0, 3);
// System.arraycopy(oldStrArr, 0, newStrArr, 1, 3);
// System.arraycopy(oldStrArr, 1, newStrArr, 5, 2);
System.arraycopy(oldStrArr, 0, newStrArr, 5, oldStrArr.length); // 원본배열 몇개인지는 모르겠지만 다 가져올게 라는 뜻

//System.arraycopy(object src, int srcPos, object dest, int destPos, int length);
// (원본배열 , 원본배열 인덱스 몇번부터? , 새로운배열(주소지), 새로운 배열의 인덱스 몇번부터 채울까, 원본배열에서 몇 개 가져올까?);

    //새 배열의 값 출력
    System.out.println("--- newStrArr값 출력 ---");
    for(int i=0; i<newStrArr.length; i++) {
        System.out.print(newStrArr[i]+" ");
    }
    System.out.println();//줄바꿈 또는 빈줄


}

}

package ch05;

public class Quiz { // 미친듯이 쉬운 예제

public static void main(String[] args) {
    // 배열에 가장 큰 수 부터 내림차순으로 정렬하여 저장 --효율적 소스
    int[] array = {1, 5, 3, 8, 2};
    int max1 = 0; //임시 변수 선언
    for (int i = 0; i < array.length; i++) {
        for (int j = i; j < array.length; j++) {
            if (array[i] < array[j]) {
                max1 = array[i];
                array[i] = array[j];
                array[j] = max1;
                }
            }
    }
    for (int k=0;k<array.length;k++) {
    System.out.println("array:["+k+"] = " + array[k]);
    }

// int[] array = {1, 5, 3, 8, 2};
// int max1 = 0; //임시 변수 선언
// for (int i = 0; i < array.length; i++) {
// for (int j = 0; j < array.length; j++) {
// if (array[i] > array[j]) {
// max1 = array[i];
// array[i] = array[j];
// array[j] = max1;
// }
// }
// }
// for (int k=0;k<array.length;k++) {
// System.out.println("array:["+k+"] = " + array[k]);
// }
//
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println("-------------------------------");

// int max = 0;
// int[] array = {1, 5, 3, 8, 2};
// for (int i = 0; i < array.length; i++) {
// if (array[i] > max) {
// max = array[i];
// }
//
// }
// System.out.println("max: " + max);
// System.out.println();
// System.out.println();
// System.out.println();
// System.out.println();
// System.out.println();
// System.out.println("-------------------------------");

    // 2개의 수를 바꿔라--배열/배열 버전
    // 10, 999인 2개의 정수값이 저장된 배열을 생성 //새배열에 옮겨서 저장 후 출력
    int[] digit1 = new int[] {10, 999};
    int[] digit2 = new int[1];
    for (int i=0; i<digit1.length;i++) {
        System.out.println("digit1["+i+"] = "+digit1[i]);    
    }

    //변경 작업
    digit2[0] = digit1[0]; //--->임시변수까지 배열로 처리해서 코드를 작성 할 수 있다.
    digit1[0]=digit1[1];
    digit1[1]=digit2[0];
    System.out.println("--변경작업진행--");    
    //변경 후 출력
    for (int i=0; i<digit1.length;i++) {
        System.out.println("digit1["+i+"] = "+digit1[i]);    
    }
    System.out.println();
    System.out.println();
    System.out.println();
    System.out.println();
    System.out.println();
    System.out.println("-------------------------------");    



    // 2개의 수를 바꿔라--배열/임시변수 버전
    //10, 999인 2개의 정수값이 저장된 배열을 생성
    int[] digit = new int[] {10, 999};
    for (int i=0; i<digit.length;i++) {
        System.out.println("digit["+i+"] = "+digit[i]);    
    }

// System.out.println("digit[0] = "+digit[0]);
// System.out.println("digit[1] = "+digit[1]);
//변경 작업
int temp2; //--->임시변수까지 배열로 처리해서 코드를 작성 할 수 있다.
temp2 = digit[0];
digit[0]=digit[1];
digit[1]=temp2;
System.out.println("--변경작업진행--");
//변경 후 출력
for (int i=0; i<digit.length;i++) {
System.out.println("digit["+i+"] = "+digit[i]);
}
// System.out.println("digit[0] = "+digit[0]);
// System.out.println("digit[1] = "+digit[1]);

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

    // 2개의 수를 바꿔라--일반 변수버전
    int a=10;
    int b=999;
    System.out.println("a="+a); //10
    System.out.println("b="+b); //999

    System.out.println("--변경작업진행--");
    int temp = 0; //임시변수 선언
    temp = a;
    a = b;
    b = temp;
    System.out.println("a="+a); //999
    System.out.println("b="+b); //10

}

}


자동차

모델
색상
연식(제조년월일)
가격
연비
배기량
제로백
옵션(등급)
중고차 시세


package ch06;

//이 클래스는 자동차 클래스이다.
/*
클래스 멤버라하면 필드와 메소드로 구성되어있다고 얘기한다.
class 클래스{
field- 데이터 터가 필요한 타입 변수
method()-기능, 동작을 수행
//리턴유형 메소드명(){수행하고자하는 동작, 구현코드}

  • 리턴 할 것이 없다.---> void
  • 정수, 실수, char, boolean, String, String[] 등
    }
  • /
    public class CarEx01 {
    //[]는 생략 가능 한 것들
    //field-데이터
    //[접근제어자] [제어자] 타입 변수(필드)명 [ = 초기값;] 초기값 생략 가능생산일 20221102 "2022-11-02" Date클래스
    가격 5000
    제조회사 "현대"
    최고속도 250
    등급-'A'
    타이어
    제조회사 "한국"
    생산일2022-10-02생산
    가격 20
    사이즈 17.5
    미끄럼방지강화기능-있다 true/없다 false */
    String color = "red"; //색상
    int price = 5000; //가격
    String company = "HYUNDAI"; //제조회사
    int maxSpeed = 250; //최고속도
    char grade = 'A'; //등급
    String productDate = "2022-11-02"; //생산일 타입을 잘못지정하면 추후에 형변환해야해서 번거롭다.
    // Tire tire = Null;
    // String[] tires={"","","",""};//움직이다
    void move(){}
    //멈춘다
    void stop(){}
    // //방향조절하다()
    // void turn() {
    // -->동작이나 기능이 조금 광범위하고 포괄적임
    // }
    //왼쪽이동하다()
    void turnLeft() {}
    //오른쪽이동하다()
    void turnRight() {}
    //전진하다()
    void turnFront() {}
    //후진하다()
    void turnBack() {}
    // //속도조절하다()
    // void controlSpeed() {
    // -->동작이나 기능이 조금 광범위하고 포괄적임
    // }
    //가속하다()
    void speedUp() {}
    //감속하다()
    void speedDown() {}
  • System.out.println("speedDown()호출-감속한다.");
  • System.out.println("speedUp()호출-가속한다.");
  • System.out.println("turnBack()호출-후진한다.");
  • System.out.println("turnFront()호출-직진한다.");
  • System.out.println("turnRight()호출-오른쪽으로 이동한다.");
  • System.out.println("turnLeft()호출-왼쪽으로 이동한다.");
  • System.out.println("stop()호출-멈춘다.");
  • System.out.println("move()호출-움직이다.");
  • //method-기능, 행위, 동작
    //[접근제어자] [제어자] 리턴유형 메소드명(){};
  • /* 자동차
    색상 "red" ->

// public static void main(String[] args) { //진입 메소드--> 만약 실행 및 런하지 않는다면 메인메소드가 필요하지 않다.
// ㅇ
//
// }

}


package ch06;

//이 클래스는 CarEx01을 실행하는 클래스이다.
public class CarEx01Main {

public static void main(String[] args) {
    //class(클래스)를 이용하여 object(객체)를 생성한다. //Object O가 대문자 이면 클래스를 말하는 것. 오브젝트가 최상위계층인데 그곳에서 상속받은 것이므로.
    //객체생성 문법> new 클래스명(); 정확히 말하면 클래스명과 동일한 이름을 가진 생성자, new 가 붙으면 무조건 힙영역에서 사용되어진다.
    //참조변수 또는 레퍼런스변수 선언을 해야한다. 참조변수 선언 문법>타입 변수명[=초기값];

    //참조변수선언 및 객체생성
    //클래스명 참조변수명 = new 클래스명();

    //CarEx01클래스의 객체를 생성. 힙영역의 주소가 myCar에 담긴 것이다. 
    CarEx01 myCar = new CarEx01();
    System.out.println(myCar); //콘솔 결과값 ch06.CarEx01@15db9742 -->내가 만든 CarEx01클래스의 객체를 담고있는 주소지

    //참조변수명.메소드명();  -->메소드 호출 문법
    myCar.move();
    myCar.stop();
    myCar.turnFront();
    myCar.turnBack();
    myCar.turnLeft();
    myCar.turnRight();
    myCar.speedUp();
    myCar.speedDown();

    //Main 클래스를 또 만들면 또 다른 자동차를 만드는 개념이라고 생각하면 된다.
    //

}

}


First 홈워크
설계하라.
자동차, 핸드폰, 기계, 컴퓨터, 텔레비전 등등
사람-학생, 사원, 회원
ch06과 같은 클래스 설계 및 매인 클래스 만들기- eclipse 단축키