공지사항

  • 깃허브랑 블로그의 운영 고민과 결론
즐거운 개발계발
무한한 계발
즐거운 개발계발

블로그 메뉴

  • 글쓰기
  • 관리자 페이지
  • 분류 전체보기 (26)
    • GitHub Project (0)
    • 소소한 공부 메모 (12)
    • 오픈 다이어리 (0)
    • WEB (3)
      • [자바 웹개발 워크북 - 프리렉 출판] (2)
      • 서블릿 & JSP (1)
    • Java (5)
    • DB (Oracle) (0)
    • Spring (0)
    • SQLD (1)
    • Front-End (1)
      • CSS (1)
    • Tools (3)
      • Git (1)
      • Visual Studio Code (1)
      • 파워포인트 (1)
    • CI_CD (0)
    • Coding Test (1)
      • Problem Solving (0)
      • Tips (1)
hELLO · Designed By 정상우.
즐거운 개발계발

무한한 계발

Java

배열, for 문 예제

2022. 8. 29. 19:07

오늘 학원에서 주로 배열에 관한 내용을 배웠다. 사용하는 자바는 11버전이다.


예제 1

배열을 선언하면, 스택메모리에 번지수를 저장을 한다. 그리고 실제로 배열의 요소가 저장되는 곳은 힙메모리에 저장이 된다. 자바에서는 스택에 저장된 변수명으로만 메모리에 접근이 가능하다.

package arrays;

public class ArrayTest01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
				//데이터타입[] 변수이름;
				
				int[] intArr; //집합에 접근하는 이름. 스택메모리에 번지수를 저장함, 4바이트,레퍼런스 타입
				double[] douArr; //stack메모리 4바이트: ref는 4바이트
				String[] strArr;
				
				//arrayRefVar = new dataType[arraySize];
				intArr = new int[10]; //heap 영역에 실질적으로 저장함// 10 * 4바이트, int 타입
				douArr = new double[3]; //heap메모리 3 * 8바이트, double 타입
				strArr = new String[5]; 
				
				int[] arr1 = new int[3];
				int[] arr2 = {10,20,30}; //초기화 리스트로 선언가능
				
				//배열이름[인덱스번호]로 데이터에 접근 가능: 인덱스 번호는 0부터 시작
				System.out.println("arr1[0] : " + arr1[0]);
				System.out.println("arr1[1] : " + arr1[1]);
				System.out.println("arr1[2] : " + arr1[2]);
				
				System.out.println("arr2[0] : " + arr2[0]);
				System.out.println("arr2[1] : " + arr2[1]);
				System.out.println("arr2[2] : " + arr2[2]);
			}
}

 

실행결과


예제2

for 반복문을 써서, 배열의 요소들을 초기화 해주고 출력하는 예제.

그리고 Arrays.toString( 배열명 )을 사용하면 쉽게 출력할 수 있다. 

Arrays.toString 출력문을 직접 하드코딩으로 구현해보았다.

import java.util.Arrays;

public class Practice01 {
	public static void main(String[] args) {
//////////////////////////////////////////////////////////////////////////
		// 데이터타입[] 변수이름;

		int[] exam = new int[7];
		// exam[0], exam[1], exam[2], exam[3]
		System.out.println("배열의 개수 : " + exam.length);

		for (int i = 0; i < exam.length; i++) {
			exam[i] = i + 1;
		}

		for (int i = 0; i < exam.length; i++) {
			System.out.println(exam[i]);
		}
		// 배열을 관리하는 클래스가 있다.
		System.out.println();
		System.out.println(Arrays.toString(exam));
		System.out.println();
		
		// Arrays.toString(exam)의 출력결과를 똑같이 구현해봄
		System.out.print("[");
		for (int i = 0; i < exam.length; i++) {
			System.out.print(exam[i]);
			if (i == exam.length - 1) continue;
			System.out.print(", ");
		}
		System.out.print("]");

	}
}

실행결과


예제3. 

정수값들의 합을 평균을 낼 때, 실수형으로 형변환을 해주는 것에 유의한다. 안그러면 소수점 이하 값들은 버려진다.

import java.util.Arrays;

public class Practice01 {
	public static void main(String[] args) {
//////////////////////////////////////////////////////////////////////////
		// 데이터타입[] 변수이름;

		// 초기화 리스트 사용은 배열변수 선언과 동시에만 가능
//		int[] arr1 = { 1, 2, 3 };
//		int[] arr2 = new int[] { 1, 2, 3 };
//
//		int[] arr3;
//		arr3 = new int[] { 1, 2, 3 };

		int[] scores = { 90, 70, 100, 95 };
		int len = scores.length;
		int tot=0;//총점, 지역변수
		
		
		for (int i = 0; i < len; i++) {
			tot += scores[i];
		}
		System.out.println("총점 : " + tot);
		System.out.println("평균 : " + tot/(double)len);
	}
}

실행결과


예제4.

서로 관련있는 배열을 두 개 만들어서 동시에 조회하였다. 이는 사실 상당히 불편한 방법이다. 나중에 클래스와 객체를 배운다면, 서로 관련있는 데이터들을 동시에 다룰 방법을 배우게 된다.

com 배열은 name 배열길이보다 한칸 더 길게 만들어, com배열의 마지막 칸을 총점을 저장하는 칸으로 활용하였다.

import java.util.Scanner;
 class Practice01 {
	public static void main(String[] args) {
//////////////////////////////////////////////////////////////////////////

		String[] name = { "조인성", "이광수", "차태현", "진욱", "강동원" };
		int n = name.length;
		int[] com = new int[n + 1]; // 마지막 배열요소는 총점

		// 점수는 키보드로 입력받는다.
		Scanner in = new Scanner(System.in);

		////////////////////
		for (int i = 0; i < n; i++) {
			System.out.print(name[i] + " 점수 : ");
			com[i] = in.nextInt();
			com[n] += com[i]; // 총점 누적
		}
		//////////////////////////
		in.close();

		System.out.println("총점 : " + com[n]);
		System.out.println("평균 : " + (double) com[n] / n);
	}
}

실행결과


예제5.

이번 예제에는 조금 어려운 내용이 있다. 버블정렬에 관해 강사님이 설명을 해주셨고, 코드로 구현하였다.

import java.util.Arrays;
 class Practice01 {
	public static void main(String[] args) {
//////////////////////////////////////////////////////////////////////////

		int[] arr = { 31, 25, 3, 4, 5, 10, 20, 80, 70, 60, 85, 65, 75, 66, 22 };

		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}

		System.out.println();
		System.out.println();

		for (int i = arr.length - 1; i >= 0; i--) {
			System.out.print(arr[i] + " ");
		}

		System.out.println();
		System.out.println();
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == 22) {
				System.out.println("22는 인덱스 " + i + "번 째에 존재");
				System.out.println("22는 앞에서 순서 " + (i + 1) + "번 째에 위치");
			}
		}

		// 오름차순 정렬 :버블정렬
		int tmp = 0;
		int len = arr.length;
		int count = 0;
		for (int i = 0; i < len - 1; i++) {
			for (int j = 0; j < len - 1 - i; j++) {
				if (arr[j] > arr[j + 1]) {
					tmp = arr[j + 1];
					arr[j + 1] = arr[j];
					arr[j] = tmp;
				}
				count++;
			}
		}

		System.out.println(count);
		System.out.println(Arrays.toString(arr));

	}
}

 

실행결과

버블정렬은 배열내의 값들이 무작위로 배치되어있을 때, 이를 오름차순 또는 내림차순으로  정렬해주는 알고리즘이다.

배열요소간의 인접한 요소들 끼리 비교하여, 앞의 배열요소가 뒤의 배열요소보다 값이 크다면, 서로 값을 교환하는 것을 여러번 반복해준다. 이러한 반복작업을 한번 끝내고 나면, 한번 배열을 탐색할때, 가장 큰수는 반드시 맨 뒤로 가게 된다.
이러한 정렬을 한번 더 해준다면, 그보다 작은 값이 맨뒤보다는 한칸 앞으로 가게 된다. 이렇게 차곡차곡 값들이 정렬되면 결국 오름차순으로 배열이 정렬되게 된다. 


예제 6.

반복문을 표현하는 또 다른 방법

import java.util.Arrays;
 class Practice01 {
	public static void main(String[] args) {
//////////////////////////////////////////////////////////////////////////


		int[] arr = new int[] { 6, 5, 4, 3, 2, 1 };

		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
		System.out.println();
		System.out.println("----------");
		
		
		// 아래의 표현식을 자주 사용한다.
		for (int num : arr ){
			System.out.print(num+" ");
		}
	}
}

실행결과


예제7. 

숫자를 입력받으면 그 숫자만큼 6자리번호의 로또 번호를 생성해주는 프로그램

 

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
 class Practice01 {
	public static void main(String[] args) {
//////////////////////////////////////////////////////////////////////////

		int[] lotto = new int[6];
		Random ran = new Random();

		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt(); // 숫자를 입력받음:

		for (int k = 0; k < num; k++) {
			createLotto(lotto); // 메서드를 만들어서 사용함
		}

		sc.close();
		// 정렬해서 출력할것
		// System.out.println(ran);
		// System.out.println(Arrays.toString(lotto));
	}

/////////////////////////////////////////////////////////////
	private static void createLotto(int[] lotto) {
		Random ran = new Random();

		for (int i = 0; i < 6; i++) {
			lotto[i] = ran.nextInt(45) + 1; // 난수발생
			// 1. 중복체크하고 중복값이 없으면 난수 저장.
			// 중복체크는 저장된 개수만큼
			for (int j = 0; j < i; j++) {
				if (lotto[j] == lotto[i]) {
					// 중복발생
					i--;
					break;
				}
			}
		}
		displayLotto(lotto);
	}

///////////////////////////////////////////////
	private static void displayLotto(int[] lotto) {
		// TODO Auto-generated method stub
		Arrays.sort(lotto); // 직접 버블정렬 구현해보며 연습해볼것

		for (int i = 0; i < 6; i++) {
			System.out.printf("%02d ", lotto[i]);
		}
		System.out.println();
	}
}

여기서 main 메서드 바깥으로 내가 직접 메서드를 두개를 만들어서 재사용이 가능하도록 만들었다.

그리고 createLotto 메서드는 로또 번호를 이중 반복문을 걸쳐서, 로또번호가 중복이 생기지 않도록 뽑은 번호를 검사하고, 중복이 발생할 경우 재할당 하는 코드이다.

 

실행결과


 

'Java' 카테고리의 다른 글

jdbc가 뭐지?  (0) 2022.09.25
2차원 배열 예제  (0) 2022.08.29
If 문, If else , Switch 를 활용한 예제  (0) 2022.08.29
자바 환경설정  (0) 2022.08.29
    'Java' 카테고리의 다른 글
    • jdbc가 뭐지?
    • 2차원 배열 예제
    • If 문, If else , Switch 를 활용한 예제
    • 자바 환경설정
    즐거운 개발계발
    즐거운 개발계발
    웹개발을 공부하며 기록을 남기기 위한 블로그 입니다. 댓글로 서로 소통하며 같이 공부해요 깃허브: https://github.com/klssh3126

    티스토리툴바