22.01.25 JAVA 배열

최고고·2022년 1월 25일
0
post-custom-banner

데이터구조(DataSturcture)

대량의 데이터를 효율적으로 관리하는 방법

Queue(FIFO구조), Tree(각 이름을 붙여 노드안에 데이터 저장 - 나무 구조), array(순차적 저장), Stack(FILO구조 핸드폰 뒤로가기), 리스트 (array와 비슷, 별칭을 달아줌)

배열

-인덱스와 인덱스에 대응하는 데이터로 이루어진 연속적 자료구조
-대량의 데이터를 효율적으로 관리하기위한 메커니즘
-같은 타입의 여러변수를 하나의 묶음으로 다룸! 같은 종류의 데이터들이 순차적으로 저장됨
-길이가 고정적이다. 길이 지정해줘야됨.
-각위치의 번호(인덱스)가 있고 0부터 시작한다.
-길이는 배열명.length를 통해 알 수 있다.
-배열의 레퍼런스 변수로 배열의 주소를 저장한다.

  • 배열 복사 ->레퍼런스 복사는 주소의 복사가 일어남
배열이름[길이array.length]
int[] array = new int[10]; // 정수형 배열 길이 고정 [10]
		//배열명.length 배열의길이를 알 수 있다.
int cnt = 70; //인덱스값
for (int i = 0; i < array.length; i++) {
			array[i] = cnt;
			cnt += 10;
		}
		// 0이라는 해당 인덱스에 접근
		// array[0] = 70;
		// array[1] = 80;
		// array[2] = 90;
		// System.out.println(array);
for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
		// 해당인덱스안에 있는 값 꺼내기
		// System.out.println(array[0]);
		// System.out.println(array[1]);
		// System.out.println(array[2]);
        
..........

//길이가 3인 정수형 배열 안에 10,20,30 넣기
//배열 생성방법
//1.배열 생성 후 -> 각 인덱스안에 값넣기 - 어떠한 값이 들어갈지 모를 때
int[] array1 = new int[3];
array1[0] = 10;
array1[1] = 20;
array1[2] = 30;
        
//2. 배열생성과 동시에 값을 넣음 - 어떠한 값이 들아갈지 인지하고 있을 때 
int [] array2 = {10,20,30}; 

예제 : 다음과 같이 배열의 값이 정해져있을 때 3의 배수와 개수 추출

int[] array = { 3, 10, 4, 8, 17, 22, 31 };



	int a = 0;
	for (int i = 0; i < array.length; i++) {
		if (array[i] % 2 == 1) {
				System.out.print(array[i] + " ");
				a++;

			}
		}
	System.out.println("가 있고, 총" + a + "개 입니다");

-> 인덱스 0부터 마지막 인덱스(array.length -1) 까지  변수 i를 통해 검사 실시

예제 : 1~ 5번째까지 점수를 입력받고, 크기가5인 배열에 값을 넣어주고 최대점수 최저점수 합, 평균을 구하기

Scanner sc = new Scanner(System.in);
		int[] array = new int[5];
		int a = 1;
		for (int i = 0; i < array.length; i++) {
			System.out.print(a + "번째입력 : ");
			array[i] = sc.nextInt();
			a++;
		}
		System.out.print("입력받은 점수 : ");
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i]+ " ");
		}
		
		int max = array[0];   //배열 인덱스 초기화해줌
		int min = array[0];
		int sum = 0;
		for (int i = 0; i < array.length; i++) {
			if (max < array[i]) {
				max = array[i];  //초기화값과 비교해서 i인덱스가 더 크면 i인덱스를 max 에 담아준다 =>레퍼런스 변수의 치환!
			}

			if (min > array[i]) {
				min = array[i];
			}

		}

		for (int i = 0; i < array.length; i++) {
			sum += array[i];
		}
		System.out.println();
		System.out.println("최고 점수 : " + max);
		System.out.println("최저 점수 : " + min);
		System.out.println("총합 : " + sum);
		System.out.println("평균 : " + (double)sum/array.length);

예제 : 1~10의 정수중에서 중복없는 로또 숫자 추출하기

Random rd = new Random();

System.out.println("===로또타임===");
System.out.println("이번주 출력번호는요...!!두구두구두구!!!!");

int[] arr = new int[5]; //크기 5인 배열 생성
        
	for (int i = 0; i < arr.length; i++) {
		arr[i] = rd.nextInt(10) + 1;
		//배열 인덱스 i에 랜덤 숫자 1~10 추출, 1씩 증가됨
	for (int j = 0; j < i; j++) {
		if (arr[i] == arr[j]) {
		i--; // 전 값과 비교해서 중복이 있다면 인덱스값을 이전으로 돌림
        break;  //근접 반복문 멈추고 처음for문으로 돌아가기
        }
	}

	}
		
	System.out.println(Arrays.toString(arr));
		//잘뽑혔는지 확인 출력문

또는 while문으로도 구할 수 있다.

Random rd = new Random();
int[] lotto = new int[5];

while(true) {
	for(int i = 0; i<lotto.length; i++) {
	lotto[i] = rd.nextInt(6)+1;
	}
	boolean isCheck = true; //중복 판별 변수
	for(int i = 0; i < lotto.length - 1; i++) {
			for(int j = i + 1; j<lotto.length; j++) {
					if (lotto[i] ==  lotto[j]) {
						isCheck = false;
						}
			}
		}
			if(isCheck) {
				break;
			}
			
		}
post-custom-banner

0개의 댓글