DAY+7 배열(단어 기본정리)/for-each, 복사, 난수, 2차원배열
2020. 8. 30. 23:32ㆍWeb_Back-end/JAVA_선행
◎ 단어 정리
- 인수
- 인수는 메소드(함수) 또는 생성자를 호출할 때, 괄호안에 적으며, 미리 선언해 두었던 매개변수에 값을 대입함
- 인스턴스
- "객체는 클래스의 인스턴스다" 처럼 관계를 설명할 때 주로 사용
- 매개변수
- 매개변수는 실제로 값이 존재하지 않고, 어떤 형태로 입력값이 들어올 것인지를 정의해 준다
- 함수에 값을 전달하는 변수, 기본형과 참조형으로 나뉜다
기본형 | 참조형 |
boolean, char, byte, short, int, long, float, double | String, StringBuffer, List, 배열 등 기본형제외 나머지 |
계산을 할 수 있는 타입 '값'을 가지는 자료형 | 참조값 즉, '주소'를 가지는 자료형 |
◎ 고급배열
- 무명배열
- 배열의 이름을 지정하지 않고 초기값만으로 배열 생성
- 즉시 배열을 만들어서 함수의 인수로 전달하고자 할 때 사용
- 안드로이드 프로그래밍에서 많이 사용
- 생성 방법 : new int[]{1,2,3,4,5} --> 초기값의 개수에 따라 배열의 크기가 결정된다
- 한 번만 필요하고 다시는 참조할 일이 없는 곳에서 사용됨
- 그냥 생성하는게 아니고(<-문법오류남) 어딘가에 인수로 전달할 때 쓰는것
◎ for-each 루프
- 사용법
- for ( 변수 : 배열 {....} ) ;
- 특징
- for의 향상된 루프이며 배열에 사용하기 적합하다
- 첫번째 요소부터 마지막 요소까지 변수에 차례대로 대입된다
- 이점(+)
- 배열의 크기를 신경 쓰지 않아도 된다
- 인덱스 값을 저장하는 변수를 따로 선언하지 않아도 된다
- 사용이 간결하다
- 요소를 하나씩 꺼내서 처리한다면 for-each가 좋다
- 예외 : 배열 요소의 값 변경, 역순으로 배열 요소 처리, 일부 요소만 처리, 하나의 반복루프에서 두개 이상의 배열 처리하는 경우에는 사용할 수 없다
< 예제1/ 무명배열, for-each 예제 >
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("함수인자로 전달하는 무명배열 사용 예: "+sum(new int[] {1,2,3,4}));
System.out.println("for-each루프에서도 무명배열 사용가능");
for(int value: new int[] {1,2,3,4})
System.out.print(value+" ");
}
//배열을 변수로 받아서 합 구하는 함수
public static int sum(int[] nums) {
int total = 0;
for(int i=0; i<nums.length; i++) {
total+=nums[i];
}
return total;
}
▽ console
더보기

예제 1 콘솔창

◎ 배열복사 ( 참조 )
- 하나의 배열 변수를 다른 배열 변수로 복사할 수 있다.
- 두개의 변수가 동일한 배열을 "참조" 하게 된다 <배열 : 참조형 변수이기때문 >
- 사용법
- 기존배열 int[] list = {1,2,3,4,5}; → {1,2,3,4,5} //배열의 참조값=주소 를 참조함(list, list2 둘다)
- 복사한 배열 int[] list 2 = list; ---------↑
◎ 배열복사 ( 진짜 복사copy 의 의미 )
- 방법
- Arrays 클래스의 copyOf() 메소드를 사용
- copyOf(복사하려는 배열, 복사되는 배열의 크기)
- 이때 복사되는 배열은 주소참조가 아닌 자체 값을 가지게 된다
< 예제 2/ 배열 복사 예제 >
int[] list = {10,20,30,40,50};
int[] list2 = list; //list2는 list를 단순히 복사-참조한다
list[0] = 1; //list 와 list2 의 0번 index 가 같음-참조했기 때문
System.out.print("list: ");
for(int num: list)
System.out.print(num+" ");
System.out.print("\nlist2: ");
for(int num: list2)
System.out.print(num+" ");
System.out.print("\nlist3: ");
//2*list 배열크기 즉 10크기만큼 복사 list가 5크기임-나머지 5크기는 초기화값이 출력
//list3은 맨처음 선언한 list를 진짜복사 했기 때문에
int[] list3 = Arrays.copyOf(list, 2*list.length);
//list3의 0번 index는 100으로 바뀜
list3[0] = 100;
for(int num: list3)
System.out.print(num+" ");
▽ console
더보기

예제2 콘솔창

◎ 배열 정렬 ( 크기순 )
- 가장 좋은 방법
- 퀵 정렬 ( 일반적인 경우에 가장 빠르고 효율적)
- 사용방법은 여러가지임
- 예) Arrays 클래스의 sort() 메소드 사용
- Arrays.sort(배열);
◎ 난수 발생하는 방법
- Random 클래스를 이용
- boolean, int, long, float, double 난수를 얻을 수 있음
- Math.random() 이용
- Math 클래스는 최상위 클래스 Object 클래스 안에 있어서 import 안해줘도 됨
- double 형의 무작위 숫자 반환(0.0~1.0)
- 정수를 사용하고 싶을 때 - (int)Math.random()
- 정수인데 0~10 사이의 숫자 반환 - (int)Math.random()*10
< 예제 3/ 난수생성 예제 > - 난수 10개를 생성하여 배열에 저장한 후 정렬 (난수생성 ,퀵정렬)
int[] nums = new int[10];
for(int i=0; i<nums.length; i++) {
int random = (int)(Math.random()*100); //*100 은 0~100까지의 난수발생의미
nums[i] = random;
}
System.out.println("최초의 리스트: ");
//for each 문은 for(변수: 배열) 이렇게 사용-> 배열값을 출력할때 간단히 쓰려고 만든 문법
for(int i : nums)
System.out.print(i+" ");
System.out.println("\n정렬된 리스트: ");
Arrays.sort(nums); //배열 정렬-퀵정렬 Arrays 클래스의 sort()메소드 사용
for(int i : nums)
System.out.print(i + " ");
▽ console
더보기

예제3 콘솔창 - 난수출력 따라서 변동됨

◎ 2차원 배열
- 선언 방법
- int[] [] s = new int [3] [5] ---> 3 : 행 / 5 : 열
- 3행 5열의 요소를 가지는 2차원 배열
- 2차원 배열의 처리는 중첩 루프를 이용
//3행 5열 2차원 배열처리-중첩루프
int[][] s = new int[3][5];
for(int i = 0; i<3; i++){
for(int j = 0; j<5; j++){
System.out.println(s[i][j]);
}
}
s[0][0] | s[0][1] | s[0][2] | s[0][3] | s[0][4] |
s[1][0] | s[1][1] | s[1][2] | s[1][3] | s[1][4] |
s[2][0] | s[2][1] | s[2][2] | s[2][3] | s[2][4] |
◎ 2차원 배열 초기화
- 1차원 배열과 마찬가지로 초기화 리스트가 존재하는 경우 new연산자 생략가능
//ex
int [][] array = {
{10,20,30},
{100,200,300},
{1000,2000,3000},
];
◎ 2차원 배열에서 length 사용법
- 전체적으로 하나의 length 필드가 있고 : 이것은 행의 개수
- 각 행마다 별도의 length 필드가 있다 : 이것은 각 행이 가지고 있는 열의 개수
//ex
int[][] array = {
{10,20,30},
{100,200,300},
{1000,2000,3000}
};
for(int i=0; i<array.length; i++){
for)int j=0; j<array[i].length; j++){
System.out.println(i+"행"+j"열:"+array[i][j]);
}
}
◎ 다차원 배열
- 3차원 배열 생성 방법
- int[][][] dacha = new int[3][2][10];
'Web_Back-end > JAVA_선행' 카테고리의 다른 글
DAY+9 클래스,객체,메소드 (1) | 2020.09.01 |
---|---|
DAY+8 배열(ragged,jagged array & ArrayList) (1) | 2020.09.01 |
DAY+6 배열(기본, 특징) (1) | 2020.08.28 |
DAY+5 for문을 활용한 별찍기(중첩반복문) (0) | 2020.08.17 |
DAY+4 선택과 반복(조건문, 반복문), 난수 생성 (0) | 2020.08.16 |