JAVA

Java 배열, 랜덤

서묘_ 2021. 11. 30. 22:46

변수는 하나의 값을 저장하는 공간이라고 했다.

하지만 하나 하나 저장해서 쓰기엔 값이 많을 땐 번거로움이 있다.

데이터 저장소는 발전한다.

 

배열

같은 타입의 데이터들을 모아서(묶음) 저장한다. 

각 데이터마다 인덱스(번호)를 붙여서 관리하며, 인덱스는 0부터 시작한다.

 

타입[] 배열이름 = new 타입[개수];

타입 배열이름[] = new 타입[개수];

두가지 모두 사용 가능하다.

 

배열이름[0] = 10; -> 배열의 0번 인덱스에 10이라는 값을 저장한다.

 

* 타입[] 배열이름 = { 값1, 값2, 값3, ... }; -> 선언과 인덱스 저장을 한번에 할 수도 있다.

단, 이렇게 사용하려면 한번에 사용해야한다.

타입[] 배열이름;

배열이름 = { 값1, 값2, 값3, ... };   //error

 

 

학생 3명의 점수를 받아 총점을 구하는 메서드를 작성해보자.

 

배열을 사용하지 않는다면

    public int sum ( int a, int b, int c ){

        return a+b+c;

    }

    사용시 : 참조변수.sum(10,20,30);

 

배열을 사용한다면

1.

    int[] point = new int[3]; -> 배열 객체를 생성, 값을 지정하지 않았기에 기본값으로 초기화된다.

    point[0] = 10;

    point[1] = 20;

    point[2] = 30;

2.

    int[] point = {10,20,30}

 

1 or 2 의 방법으로 배열을 만든 뒤

    public int sum(int[] point){

        for(int i = 0; i < point.length; i++){

            sum += point[i];

        }

    }

* .length : 해당 값의 크기를 알려준다.

 

이렇게 보면 배열을 사용하지 않는게 더 간단하지않나 ? .. 라는 생각이 들 수 도있지만

학생이 100명이라면..? 1000명이라면 .. ?

 

 

배열 복사

 

 

System.arraycopy(배열1, 시작인덱스, 배열2, 시작인덱스, 복사할개수)

System.arraycopy(arr1, 0, arr2, 3, 5);

-> arr1배열의 0번 인덱스부터 복사해서

    arr2배열의 3번 인덱스부터 5개 저장한다.

아래 console창에 보면 배열 순서대로 3번 인덱스부터 5개 값이 복사된걸 확인할 수 있다.

 

Arrays.copyOf() : 배열 전체 복사

Arrays.copyOfRange() : 배열의 일부를 복사해 새로운 배열을 만든다.

 

 

다차원 배열

2차원 이상의 배열을 말한다. 왠만하면 2차원까지만 사용한다고한다.

int[][] score = {{100,100,100},
                    {50,50,50},
                    {30,30,30},
                    {40,40,40}};

 

 

 

* Arrays.sort(배열이름);

배열의 값들을 오름차순으로 정렬해줌

 

* Arrays.toString(arr);

배열의 값들을 문자열로 바꿔줌

 

 

 

* 랜덤값(난수) 생성

 

(int)(Math.random()*범위)+시작값 -> 공식처럼 사용한다.

 

원리를 굳이 보자면..

Math.random() : 0.0 ~ 1.0 -> 실제는 0.0 ~ 0.999999...인 double타입이다.


Math.random() * 범위 : (0.0 ~ 1.0) * 범위 

예를들어 범위를 10이라고하면
Math.random() * 10 : (0.0 ~ 1.0) * 10 => 0.0 ~ 10.0 -> 실제는 0.0 ~ 9.9999999...

 

int로 명시한다.
(int)Math.random() * 범위 : (0.0 ~ 1.0) * 범위 
(int)Math.random() * 10 : (int)(0.0 ~ 1.0) * 10 -> (int)(0.0 ~ 9.9999999...) -> 0 ~ 9 와 같아진다.


(int)Math.random() * 범위 + 시작값 : (0.0 ~ 1.0) * 범위 + 시작값
(int)Math.random() * 10 + 1 -> (0 ~ 9) + 1 -> 1 ~ 10 사이의 랜덤 값을 가져온다.