[Day 05] Java 0401 - 내용 정리

Doyeon Kim·2022년 4월 3일
1

Java

목록 보기
7/16
post-thumbnail

🌞for-each 반복문

  • 배열의 요소만큼 반복 실행하기 위해서는 다음과 같은 반복문을 사용할 수 있다.
for (자료형 변수명 : 배열명) {

}
int []data = {10, 20, 30, 40, 50};

for (int n : data) {
	System.out.println(n);
}
String []data = {"홍길동", "이순신", "유관순"};
for (String name : data) {
	System.out.println(name);
}

🌞2차원 배열

int []a = new int[3]; //1차원 배열   	[][][]
	 0 1 2
	0[][][]
	1[][][]
	2[][][]
	3[][][]
    
    int [][]b = new int[4][3]; // 2차원 배열 4행3열
  • 자바의 2차원 배열에서는 행마다 열의 크기가 다를 수 있다.
	ex) [][]
		[][][][]
		[][][]
		
		int [][]a = new int[3][];
		a[0] = new int[2];
		a[1] = new int[4];
		a[2] = new int[3];

🌞3차원 배열

  • 면, 행, 열로 구성된 배열
	[][][][][]
	[][][][][]
	[][][][][]
	
	[][][][][]
	[][][][][]
	[][][][][]
	
	
	int [][][]a = new int[2][3][5]; //3줄있고 5칸있는 면이 2장 있다.

🌞컬렉션

  • 위의 배열의 단점을 해결하기 위하여 자바에서 컬렉션을 제공한다.

🌞컬렉션의 종류

  • Set, List, Map
  • List: ArrayList

🌞ArrayList

  • 데이터를 넣을 때 마다 자동으로 크기가 늘어난다.

int []a = new int[100]; //일반 배열은 이렇게 값을 지정해줘야만 했다.

ArrayList list = new ArrayList(); // 내가 데이터를 넣는 만큼 배열의 크기가 정해진다.

🌞메소드

  • 어떤 기능을 수행하기 위한(어떤 문제해결을 하기 위한) 서로 관련있는 명령어들의 집합

🌞예제

🌟(ArrayList) 예제1🌟

4행 5열의 2차원 배열을 생성하고 각 배열의 요소에 1부터 1씩 증가한 값을 저장하고 맨 마지막 열에는 각 행의 합을 누적하도록 하여 모든 배열의 요소를 출력한다.

public class ArrayPractice {

	public static void main(String[] args) {
		int[][] a = new int[4][5]; // 3행 4열의 2차원 배열 ==> 12개의 정수형 메모리가 잡힌다.
		
		/*
		 		  0  1  2  3  4
		 		0[1][2][3][4][10]    a[0][4]
		 		1[][][][][]	 		 a[1][4]
		 		2[][][][][]  		 a[2][4]
		 		3[][][][][]  		 a[3][4]
		 */
		
		
		
		
		// 중첩반복문을 이용하여 각 배열에 요소에 1부터 1씩 증가한 값을 저장해보자.
		int n = 1;
		for (int i = 0; i < 4; i++) { // 줄 수(행 수)
			for (int j = 0; j < 4; j++) { // 열 수인데 마지막은 더해준 값을 저장하기 위하여 4까지만 설정해준다.
				a[i][j] = n++;
				a[i][4] += a[i][j];
			}
		}

		// 모든 배열의 요소를 출력해보자.

		for (int i = 0; i < a.length; i++) {
			for (int j = 0; j < a[i].length; j++) {
				System.out.print(a[i][j] + " \t"); // \t 탭설정하는 만큼 공백을 설정
			}
			System.out.println(); // 줄이 끝날 때마다 줄바꿈
		}

	}

}

🌟(Array) 예제2🌟

5행 5열의 정수형 2차원 배열을 생성하고, 1부터 1씩 증가한 값을 차례대로 저장한다. 단, 각 맨 마지막 열에는 각 행의 합이 누적되도록 한다. 또, 맨 마지막 행에는 각 열의 합이 누적되도록 한다, 그리고, 맨 마지막 행, 열에는 모든 요소의 총 합이 누적되도록 한다.

public class MatrixSumTest {

	public static void main(String[] args) {
		int[][] a = new int[5][5];

		int n = 1;
		for (int i = 0; i < a.length - 1; i++) { // 행
			for (int j = 0; j < a[0].length-1; j++) { // 열
				a[i][j] = n++;
				a[i][4] += a[i][j]; //마지막 열에는 각 행의 합을 누적
				a[4][j] += a[i][j]; //마지막 행에는 각 열의 합을 누적
				a[4][4] += a[i][j]; //맨 마지막 행, 열은 모두 요소의 합을 누적
			}

		}
		
		//출력
		for (int i = 0; i < a.length; i++) {
			for (int j = 0; j < a[i].length; j++) {
				System.out.print(a[i][j] + " \t"); // \t 탭설정하는 만큼 공백을 설정
			}
			System.out.println(); // 줄이 끝날 때마다 줄바꿈
		}

	}
}

/*
 	 0 1 2 3 4	
	0[][][][][]   [0][4]
	1[][][][][]   [1][4]
	2[][][][][]   [2][4]
	3[][][][][]   [3][4]
	4[][][][][]                        [4][4]
[4][0]/[4][1]/[4][2]/[4][3]

*/

🌟(Method) 예제3🌟

n을 매개변수로 전달받아 1에서 n까지의 합을 누적하여 반환하는 메소드를 만들고, 호출하기.

import java.util.Scanner;

public class MethodPractice02 {
	public static int getSum(int n) {
		int sum = 0;
		for (int i = 1; i <= n; i++) {
			sum += i;
		}
		return sum;
	}

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int n;

		System.out.println("1부터 어디까지 출력할까요? ");
		n = sc.nextInt();
		System.out.println("1부터 " + n + "까지의 합은 " + getSum(n));
		
		
		
		
		
		
		
//		int r = getSum(10);
//
//		System.out.println("1부터 10까지의 합은: " + r);
//		System.out.println("1에서 100까지의 합은: " + getSum(100));

	}

}

🌞연습문제

👑연습문제1👑

학생의 이름배열과 점수배열을 매개변수로 전달받아 점수가 가장 높은 학생의 이름을 반환하는 메소드를 정의(단, 중복된 점수가 없다고 가정)

public class MethodTest08_Array {
	public static String getScoreName(String[] name, int[] score) {
		String max_name = "";
		int max = score[0];
		int idx = 0; // 인덱스가 궁금
		for (int i = 1; i < score.length; i++) { // 점수가 가장 높은사람의 자리를 구하기
			if (score[i] > max) {
				max = score[i];
				idx = i; // i를 인덱스에 담는다.
			}
		}
		max_name = name[idx];
		return max_name;
	}

	public static void main(String[] args) {
		String[] name = { "유관순", "이순신", "홍길동", "김유신", "강감찬" };
		int[] score = { 60, 70, 80, 100, 50 };

		System.out.println("가장 높은 점수의 학생이름은: " + getScoreName(name, score));
	}

}

👑연습문제2👑

4지 선다형 문항의 답안 10개를 입력받아 답이 옳은지 판별하여 맞으면 'O', 틀리면 'X'로 출력하고, 정답 수와 틀린 답 수를 각각 구하여 출력합니다. (단, 모범답안은 프로그램에서 미리 초기화 합니다.)

import java.util.Scanner;

public class Practice04 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int []dap = {1,2,3,4,1,2,3,4,1,2}; //10개의 모범답안을 미리 생성
		int []user = new int[10];
		
		for(int i=0; i<user.length; i++) {
			System.out.print((i+1) + "번 답을 입력하세요: ");
			user[i] = sc.nextInt();
			
		}
		
		for (int i=1; i<=10; i++) { //문제를 출력
			System.out.print(i + "  "); //1~10번 문제를 출력
		}
		System.out.println(); //줄바꿈
		
		int n = 0;//정답수를 위한 n을 선언
		for(int i=0; i<10; i++) {
			if(dap[i] == user[i]) { //배열에 있는 답과 user가 쓴 답이 같을 때
				System.out.print("O  "); //O을 출력
				n++;
			} else { //같지 않다면
				System.out.print("X  "); //x를 출력
			}
		}
		
		System.out.println();
		System.out.println("정답 수:" + n);
		System.out.println("틀린답 수: " +(10-n));
	}

}

👑연습문제3👑

다음과 같은 2차원 배열을 순회하면서 전체 요소 값을 화면에 출력하는 프로그램을 작성해라.

public class Practice130_14 {

	public static void main(String[] args) {
		int[][] a = { { 1, 2, 3 }, { 1, 2 }, { 1 }, { 1, 2, 3 } };


		for(int i=0; i<a.length; i++) {
			for(int j=0; j<a[i].length; j++) {
				System.out.print(a[i][j] + " \t");
				
			}
			System.out.println(); // 줄이 끝날 때마다 줄바꿈
		}
		



	}
}
profile
꾸준히 성장하는 개발자✨

0개의 댓글

관련 채용 정보