[Java] 배열(Array) 실습

2022. 7. 28. 17:35·Language/Java
728x90

배열

자바에서 배열을 선언하고나면 배열의 길이는 바꿀 수 없다.

 

참조변수

배열을 갖고 있는 주소를 참조

데이터 타입
기본 타입 참조 타입
정수 타입 byte 배열 타입
char 열거 타입
short 클래스
int 인터페이스
long  
실수 타입 float  
double  
논리 타입 boolean  

깡으로 숫자(논리)가 아니고서는 전부 참조타입이라고 생각하면 된다. (String 은 참조변수) 

배열생성

int[] score; // 배열을 선언 → 데이터를 저장할 수 있는 공간이 아직 없음
score = new int[5]; // 배열을 생성

배열 만들때는 숫자 5를 써서 5개의 방을 만든다고 하는데 셀 때는 0부터 센다.

→ score[0],score[1],score[2],score[3],score[4] ...

배열을 생성하고 아무것도 넣어주지 않는다면 값은 전부 0이 된다.

→ score[0] = 0, score[1] = 0, score[2] = 0, score[3] = 0, score[4] = 0 ...

int[] score = new int[5]; // → 크기가 5인 정수형 배열을 생성한다.
score[0] = 100; score[1] = 88; score[2] = 77; score[3] = 97;score[4] = 9; // 배열에 값 넣기
int[] score = {55, 20, 45, 88, 91, 77}; // 크기를 안정해놓고 값을 바로 넣어도 알아서 지정된다.
int[] score = new int[]{55, 20, 45, 88, 91, 77};

배열의 총합과 평균 구하기

public static void main(String[] args) {
	int sum = 0; // 총점을 저장하기 위한 변수
    int avg = 0; // 평균을 저장하기 위한 변수
    
    int[] score = {88, 70, 91, 45, 30};
    
    //score[0] == 88, score[4] == 30
    for (int a = 0; a < score.length; a++) {
    	sum += score[a];
       }
       avg = sum / score.length;
       
       System.out.println("총점 : " + sum);
       System.out.println("평균 : " + avg);
    }
}

length << 배열원소의 개수. score안에 객체 수가 변해도 자동으로 변경된다.

length()는 String 문자열의 길이.

public static void main(String[] args) {
	// 시험 성적 중 가장 높은 점수와 가장 작은 점수는 무엇인가.
    int [] score = {70, 60, 88, 45, 97, 58};
    
    int max = score[0]; // 배열의 첫 번째 값으로 최대값을 초기화 한다.
    int min = score[0]; // 배열의 첫 번째 값으로 최소값을 초기화 한다.
    
    for (int a = 0; a < score.length; a++) {
    	if(min >= score[a]) min = score[a];
        else if(max >= score[a]) continue;
        else max = score[a];
    }
    System.out.println("최대값 : " + max); // 97
    System.out.println("최소값 : " + min); // 45
}

min과 score[a]를 비교하여 score[a]가 min보다 작거나 같으면 min에다 score[a]의 값이 들어가게 한다.

max와 비교했을 때, max 값이 더 크다면 반복문을 다시 실행한다. max값이 더 작다면 max에 score[a] 값이 들어가게 해준다. 굳이 continue를 넣어주지 않고 if문을 하나 더 사용하여 max가 작다면 score[a]의 값이 들어가게 해주면 더 간단해진다.

숫자 섞기

public static void main(String[] args) {
	int[] number = new int[10];
    System.out.println(number);
    
    for(int i = 0; i < number.length; i++) {
    	number[i] = i; // 배열을 0 ~ 9 까지의 정수로 초기화한다.
         System.out.print(number[i] + "\t");
    }
    System.out.println();
     
    // 첫 번째 방의 값과 랜덤하게 추출한 바으이 값을 100번 교환한다.
    for(int i = 0; i < 100; i++) {
    	int r = (int)(Math.random() * 10); // 0 ~ 9 사이의 임의의 정수를 추출한다.

        int 임시 = number[0];
        number[0] = number[r];
        number[r] = 임시;
    }
    for(int i = 0; i < number.length; i++) {
	    System.out.print(number[i] + "\t");
    }
}

첫번째 for문을 통해 배여르이 모든 값에 정수를 넣어준다. ( 빈 방이 없도록)

두번째 for문을 통해 0 ~ 9 사이의 임의의 정수를 추출하고,

		int 임시 = number[0];
		number[0] = number[r];
		number[r] = 임시;

이 과정을 통해 number[0] 에는 number[r]값이, number[r]에는 number[0]값이 들어가게 된다.

(결과로 출력되는 값에 겹치는 숫자가 안오는 이유)

 

이 과정을 100번 반복한다.

작은 수부터 왼쪽 정렬 (오름차순 정렬)

public static void main(String[] args) {
	int[] number = new int[10];

	for (int i = 0; i < number.length; i++) {
		System.out.print((number[i] = (int) (Math.random() * 10)) + " ");
	}
	System.out.println();
	// 작은 숫자가 왼쪽에 오도록 정렬해주세요!
		
	// (세로방향) 전체 작업은 2개씩 비교하므로 number.length보다 1 작은 만큼한다.
	for (int i = 0; i < number.length; i++) {
	// (가로방향) number.length보다 1 작은 만큼 작업을 하는데,
	// 한 번 작업이 끝나면 작업 횟수를 1씩 감소시킨다.
		for (int j = 0; j < number.length - 1 - i; j++) {
	// 오른쪽의 작업이 끝난 방은 다음 작업에서 제외시킨다.(-i)
			if (number[j] > number[j + 1]) {// 오른쪽 방의 값이 왼쪽 방의 값보다 크면 교환한다.
				int 임시 = number[j];
				number[j] = number[j + 1];
				number[j + 1] = 임시;
			  }
			}
			// 작업이 모두 끝나면 정렬된 결과를 출력한다.
			for (int k = 0; k < number.length; k++) {
				System.out.print(number[k]);
			}
			System.out.println();
		}
	}

출력 결과

제일 위에 나온 수를 작은 수 부터 정렬했다.

그런데 2번째 줄에 이미 정렬이 끝났는데 10줄이 출력 되었다.

만약 중복되는 값이 있을 때 정지시키고 싶다면  어디에 코드를 추가 해야 할까?

변수를 설정해서 한줄만 출력하게 할 수 있다.

number 변수를 설정한 곳에 count 변수를 따로 설정한다.

이후 if문이 실행된 곳에 마지막으로 count++;를 넣어준다.

이로써 if문이 실행되면 count의 수가 늘어나고, if문이 실행되지 않으며 count가 늘어나지 않게 된다.

if(count == 0 && i != 0) break;
else count = 0;

제일 마지막 for문 (결과 출력 문장) 위에 넣어준다.

 

i != 0 을 넣어준 이유 : 만약 운이 좋아서 시작하자마자 작은 수부터 정렬이 된 숫자가 나왔을 때 출력이 아예 되지 않는 경우를 방지

count 변수를 boolean형으로 만들고 fasle를 준 뒤, if문을 통과하면 값을 true 바꿔주는 형태로 사용해도 된다.

만약 내림차순으로 정렬하고 싶다면 if값의 부등호만 바꿔주면 된다.

10개의 무작위 숫자를 생성한 뒤, 각각의 숫자의 수를 구하기

public static void main(String[] args) {
		
	int[] number = new int[10];
	int[] counter = new int[10];
	int[] num = new int[2];	// 배열값에 아무것도 안줬을때 확인용
	System.out.println(num[0]++);	// 0
	System.out.println(num[0]);	// 1
	System.out.println(num[1]);	// 0
		
	// 0 ~ 9 까지 임의의 정수를 추출하여 number 방에 저장한다.
	for(int a =0; a< number.length; a++) {
		System.out.print(number[a] = (int)(Math.random() * 10));
	}
	System.out.println();
	// 0 ~ 9 까지의 정수가 각각 몇 개인지 알려주세요.
	for (int a= 0; a < number.length; a++) {
		counter[number[a]]++;
	}
	for (int a=0; a<number.length; a++) {
		System.out.println(a + "의 개수 : " + counter[a]);
	}
}

배열에 ++를 달아주면 그 배열 안의 값이 1이 올라간다. 이를 이용해 각 정수가 출력된 횟수를 구할 수 있다.

출력 결과

'Language > Java' 카테고리의 다른 글

[Java] Array 실습 (length)  (0) 2022.07.28
[Java] Array 내림차순  (0) 2022.07.28
[Java] 별 모양 출력  (0) 2022.07.26
[Java] 별 그리기 ★★★  (0) 2022.07.26
[Java] 별 그리기 ★★  (0) 2022.07.26
'Language/Java' 카테고리의 다른 글
  • [Java] Array 실습 (length)
  • [Java] Array 내림차순
  • [Java] 별 모양 출력
  • [Java] 별 그리기 ★★★
arajo
arajo
  • arajo
    아라 메모장
    arajo
  • 전체
    오늘
    어제
    • 분류 전체보기 (509)
      • Language (298)
        • HTML (55)
        • CSS (11)
        • JavaScript (70)
        • TypeScript (8)
        • Python (33)
        • Java (119)
        • C (0)
        • C# (2)
      • Programming (92)
        • Programming (14)
        • Web (51)
        • Apache (1)
        • MySQL (23)
        • AWS (3)
      • Framework | Library (26)
        • Framework | Library (3)
        • Vue.js (2)
        • React.js (5)
        • React Native (4)
        • Node.js (1)
        • Ajax (1)
        • Bootstrap (8)
        • Spring (1)
        • Flutter (1)
      • etc (2)
      • 휴식 (19)
        • 책 (13)
        • 일기 (5)
        • 게임 일기 (1)
      • A (71)
        • 공부 (18)
        • 기타 (6)
        • 일 (47)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    array
    리액트
    타입스크립트
    객체
    파이썬
    자바스크립트
    Python
    web
    event
    제어문
    object
    MySQL
    react
    TypeScript
    Java
    JavaScript
    CSS
    next.js
    HTML
    변수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
arajo
[Java] 배열(Array) 실습
상단으로

티스토리툴바