2021.01.25 국비교육 15일차

[TOC]

배열

  • 일반 생성
public class ArrayTest2 {
    public static void main(String[] args) {

        int [] num = new int[3];
        num[0] = 10;
        num[1] = 20;
        num[2] = 30;
        //한번 생성된 배열은 수정할 수 없음

        //새로 방을 만들어서 새로 데이터를 삽입해줘야함
        num = new int[4];
        num[0] = 10;
        num[1] = 20;
        num[2] = 30;
        num[3] = 40;

        //for - each 출력
        for(int x : num) {
            System.out.println(x);
        }

        //for 출력
        for(int i=0; i<num.length;i++) {
            System.out.println(num[i]);
        }

        String[] names = new String[2];
        names[0] ="aa";
        names[1] ="bb";

        for(String s: names) {
            System.out.println(s);
        }            
    }
}
  • 리터럴을 이용한 생성방법
public class ArrayTest3 {

    public static void main(String[] args) {

        int[] num = {1,2,3,4};

        String[] names = {"홍길동", "이순신", "유관순"};

        for(int i : num) {
            System.out.println("정수 배열의 값 : " + i );
        }

        for(String s : names) {
            System.out.println("문자열 배열 값 : " + s);
        }


        int[] num1 = new int[] {10, 20, 30};

        String[] names1 = new String[] {"홍길동", "이순신"};
    }

}

2차원 배열

  • 행 크기만 지정하고 열 크기는 나중에 동적으로 지정 가능
public class MultiArrayTest {

    public static void main(String[] args) {

        int num[][] = new int[2][3]; // 2차원 배열 생성

        //초기화
        num[0][0] = 10;
        num[0][1] = 20;
        num[0][2] = 30;

        num[1][0] = 40;
        num[1][1] = 50;
        num[1][2] = 60;


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

    }
}
public class Ex05_5 {

    public static void main(String[] args) {

        int [][] num = new int[3][]; // 2차원 배열 생성

        //초기화
        num[0] = new int[3];
        num[1] = new int[2];
        num[2] = new int[1];

        num[0][0] = 1;
        num[0][1] = 2;
        num[0][2] = 3;
        num[1][0] = 4;
        num[1][1] = 5;
        num[2][0] = 6;


        for(int i =0;i < num.length;i++) {
            for(int j=0; j<num[i].length;j++) {
                System.out.println("num[" + i + "][" + j +"]" +num[i][j]);
            }
            System.out.println(" ");
        }
    }
}
import java.util.Arrays;

public class ArrayTest10 {

    public static void main(String[] args) {


        int [][]num = {{10,20,30}, {40}, {50,60}};

//        //1,for -each
//        for(int[] is : num) {
//            for(int x : is) {
//                System.out.println(x);
//            }
//        }

        //2. for
        for(int i =0;i<num.length;i++) {
            for(int j =0;j<num[i].length;j++) {
                System.out.println(num[i][j]);
            }
        }


    }
}

배열 with 파라미터

public class Ex05_8 {

    public static void main(String[] args) {

        int[] num  = {1,2,3,4};

        System.out.println("원래 배열");
        for(int i =0;i <num.length;i++) {
            System.out.println(i);
        }
        System.out.println("main의 num =" + num);
        change(num);

        System.out.println("수정된 배열");
        for(int i : num) {
            System.out.println(i);
        }

    }

    public static void change(int[] num1) { //함수(메소드) - 멤버변수처럼 new 객체 생성 후 사용해야함
        //static - new 없이도 사용가능
        //리턴타입(처리후 반환값의 타입 - void : 반환값없음) 함수명(매개변수 명)

        System.out.println("change의 num1 =" + num1);
        num1[0] = 100;
    }
}
public class ArrayTest3 {

    public static void change1(int n) { // 정수하나를 매개변수로 받아서 사용 후 반환없이
        n =20;

    }

    public static void change2(int [] num) { // int배열을 매개변수로 받아 사용 후 반환은 없이
        System.out.println("change2 속 num주소 :" + num); // [I@15db9742
        num[2] =90;
    }

    public static void main(String[] args) {
        /*    
        //기본형 데이터
        int xxx =10; //main 함수 안에서만 사용 가능한 변수 : 로컬 변수(함수안에서만 사용가능)
        // call by value : pdt 값으 복사(저장) 후 사용
        System.out.println("호출전 xxx :" + xxx);
        change1(xxx);
        System.out.println("호출 후 xxx : " +xxx); /// xxx값 안바뀜  */


        //참조형 데이터 : 주소 들어있는 데이터 : call by reference : 동일 주소(데이터) 사용 함수에서 변경시 호출한 곳의 데이터도 변경
        int [] num = new int[3]; //num의 주소, 방 안에는 0값(기본값)
        num[0] = 10;
        num[1] = 20;
        num[2] = 30;
        System.out.println("main에서 num주소" + num); //주소 [I@15db9742
        System.out.println("호출 전 :" + num[2]); // 30
        change2(num);
        System.out.println("호출 후 :" + num[2]); //90

    }

}

배열 활용

public class Ex05_9 {

    public static void main(String[] args) {

        int [] source = {1,2,3,4,5,6};
        int [] destination = {10,9,8,7,6,5,4,3,2,1};

        System.arraycopy(source, 0, destination, 0, source.length);

        for(int i: destination) {
            System.out.print(i + " ");
        }    
    }    
}
import java.util.Arrays;

public class ArrayTest6 {

    public static void main(String[] args) {

        int[] num2 = {10,20,30,40,50};
        //1.배열복사
//        int[] xxx= Arrays.copyOf(num2, num2.length);
//        for(int i : xxx) {
//            System.out.println(">" + i);
//        }
//        
//        int[] xxx2 = Arrays.copyOf(num2, 5);
//        for(int i : xxx2) {
//            System.out.println(">>>" + i);
//        }


        //2. 채워넣기
//        Arrays.fill(num2, 100);
//        for (int i : num2) {
//            System.out.println("###" + i);
//        }
//        
//        Arrays.fill(num2, 0,3,200);
//        for(int i : num2) {
//            System.out.println("!!!" + i);
//        }

        //3. 값 비교

        int[] a = { 10, 20 };
        int[] b = { 10, 20 };

        System.out.println( a == b); // 참조 변수가 달라서 false출력
        System.out.println( Arrays.equals(a,b));


        //4. 정렬
        int [] xyz = {9,4, 15 ,54 ,63, 12, 5, 77};
        Arrays.sort(xyz);
        for (int i : xyz) {
            System.out.print(i + " ");
        }

    }
}

난수 발생

import java.util.Random;

public class RandomTest {

    public static void main(String[] args) {

    //랜덤 값 얻기
        Random r = new Random();

        int n = r.nextInt(5) + 1; //1~5
        System.out.println(n);


        boolean n2 = r.nextBoolean();
        System.out.println(n2);

        double n3 = r.nextDouble();
        float n4 = r.nextFloat();

        System.out.println(n3);
        System.out.println(n4);

    }
}

클래스

  • 인스턴스 변수 (멤버 변수) : 클래스의 특성을 표현하기 위한 속성값을 저장할 때 사용
  • 메소드 :(멤버 메소드) : 인스턴스 변수의 값을 관리하는 역할
  • 생성자(Constructor) : 인스턴스 변수에 값을 처음 저장하는 역할
// 클래스 이름 Student == 파일명, 첫문자 대문자
public class Student { // 모델 클래스 학생한명 객체를 생성, 저장할 모델 클래스
    //멤버 변수 영역, 인스턴스 변수
    //객체생성 - 객체가 모두 가지는 공통 변수 선언 : 접근지정자 타입 변수명
    //멤버 변수 : 객체 생성 후 사용(new로 객체 생성), 객체 생성시에 자동 초기값으로 설정
    //멤버 변수 : 클래스 블럭안에 선언, 클래스안의 함수, 생성자에서 모두 사용가능
    String name; // 이름
    int age;// 나이
    String address;// 주소

    //생성자(constructor) 영역 : 멤버 변수를 최초(객체 생성시) 초기화하는 역할 (가장 중요한 역할)
    //접근지정자 클래스이름(){} ==> 기본생성자(default constructor)
    //기본생성자 (명시적 기본생성자)
    //기본생성자 미작성시 jdk에서 자동으로 만들어서 코드에 넣어줌
    // 안적어줘도 자동클래스에 기본생성자 가지게 해줌 --> 다른클래스에서 new Student()할수 있게
    //개발자가 생성자를 명시적으로 작성, 선언 --> jdk가 자동으로 해주던거 안함
    public Student (String n) {
        System.out.println("매개변수 1개 생성자 호출");
        name = n;

    }

    // 명시적 생성자를 작성시에 jdk 만들어 주지 않는 기본생성자를 명시적으로 반드시 기재
    public Student() {
        System.out.println("기본 생성자 호출");
    }


    //1.명시적인 생성자 작성이 없으면 jdk가 기본 생성자 자동 생성
    //2. 명시적으로 생성자 작성 -> 기본생성자 생성안됨
    //3. 명시적 생성자 사용시 기본생성자 따로 만들어줘야함(필수)

    //함수영역, 메소드영역
}
public class TestStudent {

    public static void main(String[] args) {
        //1. 객체생성
        Student stu1 = new Student("홍길동");
        System.out.println(stu1);

        System.out.println(stu1.name +"\t" + stu1.age + "\t" + stu1.address );


        //2. 학생 2번 객체 생성
        Student stu2 = new Student();

    }
}

+ Recent posts