정리 노트/쌍용 KDT_(자바 Spring)

23.02.14(화): 배열 기초, 배열의 배열(다차원 배열)

우주바다 2023. 6. 26. 18:50
728x90

오늘 배운 내용

01. 배열 



01. 배열

실습080 ~ 088 


가변 배열(동적 배열):
자바의 배열은 한 번 자리가 정해지면 늘리거나 줄일 수 없다.
하지만 가변배열을 사용하면 기존 배열의 포인터를 끊고, 
새로운 영역에 다시 자리를 만든 후 포인터를 연결한다. 

참고: 배열
https://wikidocs.net/206


실습080

반복문의 반복 횟수가 배열 길이보다 크면 런타임 에러 발생.

더보기
/*=============[ 2/14 화 ]================
			배열 기본 실습 1
--------------------------------------
임의의 정수로 구성된 배열의 숫자 데이터 중
짝수만 출력하고, 3의 배수만 출력한다.

임의 정수: 4 7 9 1 3 2 5 6 8

실행 예)

배열 요소 전체 출력
 4 7 9 1 3 2 5 6 8
짝수 선택적 출력
4 2 6 8
3의 배수 선택적 출력
9 3 6
=========================================*/

public class Test080
{
	public static void main(String[] args)
	{	
		int[] arr = {4, 7, 9, 1, 3, 2, 5, 6, 8};

		System.out.println("배열 요소 전체 출력");
		for (int i = 0; i < arr.length; i++)
			System.out.print(arr[i] + " ");
		System.out.println();
	
		System.out.println("짝수 선택적 출력");
		for (int i = 0; i < arr.length; i++)
		{	
			if (arr[i] % 2 == 0 && arr[i] % 3 != 0)
				System.out.print(arr[i] + " ");		 			
		}System.out.println();

		System.out.println("3의 배수 선택적 출력");
		for (int i = 0; i < arr.length; i++)
		{	
			if (arr[i] % 3 == 0)
				System.out.print(arr[i] + " ");
		}System.out.println();
				
	}
}

// 반복문의 반복 횟수가 배열보다 길면 더 가져올 게 없어서 런타임 에러.

/*
	배열 요소 전체 출력
	4 7 9 1 3 2 5 6 8
	짝수 선택적 출력
	4 2 8
	3의 배수 선택적 출력
	9 3 6
	계속하려면 아무 키나 누르십시오 . . .
*/

실습081

대문자 A-Z 출력하기 . 알파벳과 아스키코드.

/*
char 자료형을 요소로 가지는 배열을 만들고 
대문자를 모두 담은 후 출력한다.
배열을 만들어 채우는 구문과 출력 구문은 분리한다.

실행 예)
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
*대문자 A~ Z == 65 ~80
*/
char a = 65;
char[] alpa = new char[26]; 

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

코드가 길고 복잡하다고 무조건 나쁜 건 아니다! 

+) 변수 2개로 구성하는 방법 


실습082

인원수 사용자 입력 받기 (유효성 검사)

-> 인원 수만큼 이름, 전화번호 입력 받기

-> 받은 값을 이름 배열, 전화번호 배열로 따로 출력 .


코드블록(082)

더보기
import java.util.Scanner;
public class Test082
{
	public static void main(String[] args)
	{	
		int n = 0; // 학생 수
		String[] name = new String[10]; // 이름
		String[] tels = new String[10];  // 번호
		Scanner sc = new Scanner(System.in);

		do
		{
			System.out.print("입력 처리할 학생수 입력(명, 1~10): ");
			n = sc.nextInt();
		}
		while (0 >= n || n > 10);
				
		for (int i = 0; i < n ; i++) // 학생 수 만큼 이름, 번호 입력받기 
		{
			System.out.printf("이름 전화번호 입력[%d] (공백 구분): ", i+1);
			name[i] = sc.next();
			tels[i] = sc.next();
		}
		
		System.out.print("\n학생 수:" + n);
		System.out.println("\n==== 이름 목록 ====");
		for (int i = 0; i < n; i++ )
			System.out.println(name[i]);

		System.out.println("\n==== 전화 번호 목록 ====");
		for (int i = 0; i < n; i++ )
			System.out.println(tels[i]);
		System.out.println();
	}
}

실습083 (과제)

정수를 임의의 개수만큼 사용자 입력 받고 그 중 최대값을 출력한다.
조건:  입력값을 배열로 담아 처리한다.

코드블록(083)

더보기
import java.util.Scanner;
public class Test083
{
	public static void main(String[] args)
	{	
		/* ====== ① 주요 변수 선언 ====== */	
		Scanner sc = new Scanner(System.in);
		System.out.print("입력할 데이터의 개수: ");
		int n = sc.nextInt();    //데이터 개수
		
		int[] arr = new int[n]; // 입력값 길이의 배열 생성 
		int num;			    // 데이터 담을 변수
		int max = 0;				// 최대값 담을 변수 	
        
		/* ====== ② 배열 값 담기 ====== */
		for (int i = 0; i < n; i++)
		{
			if (i == 0) // 첫 루프만 실행
				System.out.print("데이터 입력(공백 구분): "); 
			
			num = sc.nextInt();
			arr[i] = num;
		}
		/* ======== ③ 최대값 연산 ======== */
		for (int i = 1; i < n; i++)
		{	
			max =  arr[0]; // 최대값 판별 임시 변수
							  // 배열의 0번째 값으로 초기화
			if (arr[i] > max) // 1번 인덱스부터 현재 최대값과 비교
				max = arr[i];
		}
		/* ========== ④ 결과 출력 ========== */			
		System.out.printf("\n>> 가장 큰 수: %d\n", max);
	}
}
/* --------------------- 실행 결과 ---------------------------

입력할 데이터의 개수: 12
데이터 입력(공백 구분): 76 85 22 54 64 91 21 78 32 11 88 20

>> 가장 큰 수: 76
계속하려면 아무 키나 누르십시오 . .
-------------------------------------------------------------*/

실습084(과제)

학생 수를 사용자 입력받고 그 만큼 점수(int)를 입력받는다.
전체 학생 점수의 합,  평균,  편차를 출력한다. 

/*=================[ 2/14 화 ]==================
		배열 기본 실습 5 (과제 10)
	     - 배열의 선언과 초기화
------------------------------------------------
* 편차 (deviation): 
	평균보다 크거나 작은 정도를 나타내는 값으로,
	평균 또는 중앙값에서 대상값을 뺀 값.  
================================================*/

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Test084
{
	public static void main(String[] args) throws IOException
	{
		/* ====== ① 주요 변수 선언 ====== */	
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		System.out.print("학생 수 입력: ");
		int n = Integer.parseInt(br.readLine()); // 학생 수 입력값 
		double score = 0, sum = 0, avg = 0, dev = 0; // 점수, 합계, 평균, 편차		
		double[][] result = new double[n][2];  // (학생수 * 2)의 배열 생성
				//실수기반 연산을 위해 모든 변수 double로 선언 
		/* ====== ② 배열 값 담기 ====== */
		for (int i = 0; i < n; i++) //학생 수 만큼 점수 묻고 담는 루프
		{ 
			System.out.printf("%d번 학생의 점수: ", i + 1);
			score  = Double.parseDouble(br.readLine()); 	
			
			result[i][0] = score; // i번째 학생 점수를 배열에 저장
			// result[i][1]    // ** 점수별 편차는 먼저 연산 필요
		}	
		/* ======== ③ 연산 (합계, 평균, 편차) ======== */
		for (int i = 0; i < n; i++)
			sum += result[i][0]; // 합계
	
		avg = (sum / n); // 평균
		
		for (int i = 0; i < n; i++) // 편차 계산 및 배열 담기 
		{	
			dev = avg - result[i][0] ; // 평균 - 점수 
			result[i][1] = dev;    // **점수별 편차 저장
		}	 
		 /* ============= ④ 결과 출력 ============= */	
		System.out.printf(">> 합: %.0f\n>> 평균: %.1f\n>> 편차:\n", sum, avg);
			
		for (int i = 0; i < n; i++) // 배열 출력 (점수 , 편차)
		{ 
			System.out.printf("%.0f  :  ", result[i][0]); // 
			System.out.printf("%.1f\n", result[i][1]); 
		}
	}
}
/*실행 결과-------------------------------

학생 수 입력: 5
1번 학생의 점수: 90
2번 학생의 점수: 82
3번 학생의 점수: 64
4번 학생의 점수: 36
5번 학생의 점수: 98
>> 합: 370
>> 평균: 74.0
>> 편차:
90  :  -16.0
82  :  -8.0
64  :  10.0
36  :  38.0
98  :  -24.0
계속하려면 아무 키나 누르십시오 . . .
----------------------------------------*/

실습085 다차원배열 

// 상략
/* === 배열 선언, 초기화 === */

// 방법 ① arr1
int[][] arr1 = new int[3][3];

arr1[0][0] = 1;
arr1[0][1] = 2; 
arr1[0][2] = 3;
// ...중략...
arr1[2][2] = 9;

// 방법 ② arr2
int[][]arr2 = {{1,2,3},{4,5,6},{7,8,9}};

// 방법 ③ arr3 
int[][]arr3 = new int[3][3];
int n = 1; 
for (int i = 0; i < arr3.length; i++) //웅~ 0,1,2 !
{
	for (int j = 0; j < arr3[i].length; j++) //숑숑! 0,1,2 !
	{	//System.out.println("i:" + i + ", j:" + j);
		arr3[i][j] = n;
		n++;
	}
}
/* === arr3 배열의 전체 요소 출력 === */

for (int i = 0; i < arr3.length; i++) //웅~ 0,1,2 !
{
	for (int j = 0; j < arr3[i].length; j++) //숑숑! 0,1,2 !
	{	
		System.out.printf("%2d", arr3[i][j]);
	}
	System.out.println();
} //하략

실습086 다차원배열 


실습 코드블록(086)

더보기
public static void main(String[] args)
	{
		/* === 선언, 초기화 === */
		int n = 1;
		int[][] arr1 = new int[5][5];
		
		for (int i = 0; i < arr1.length ; i++)
		{
			for (int j = 0; j < arr1[i].length; j++)
			{
				arr1[i][j] = n;
				n++;
			}
		}
		/* === 전체 요소 출력 === */		
		for (int i = 0; i < arr1.length ; i++)
		{
			for (int j = 0; j < arr1[i].length; j++)
				System.out.printf("%3d",arr1[i][j]);
			System.out.println();
		}	
	}

실습087 다차원배열 

더보기
public static void main(String[] args)
{	
int[][] arr = new int[5][5]; // 배열 생성 

for (int i = 0; i < arr.length; i++) // 값 할당
{	
	int n = 1 + i; // n 선언 및 초기화 

	for (int j = 0; j < arr[i].length; j++)
	{
		arr[i][j] = n;
		n++;
	}
}

for (int i = 0; i < arr.length ; i++) // 출력 
{
	for (int j = 0; j < arr[i].length; j++)
		System.out.printf("%3d",arr[i][j]);
	System.out.println();
}

실습088 다차원배열

/*=================[ 2/14 화 ]==================
		배열 기본 실습 9
	       - 배열의 배열(2차원 배열) 
------------------------------------------------
다차원 배열으로 다음과 같이 구성하고 출력한다.
단, 배열 구성, 출력 코드는 분리한다.

실행 예)		 

1  2  3  4  5   
5  1  2  3  4   (0,1)부터 출력
4  5  1  2  3   (0,2)부터 출력 
3  4  5  1 2    (0,3)부터 출력 
2  3  4  5  1	(0,4)부터 출력 

* 힌트 : 값이 아니라 인덱스를 활용
================================================*/
public static void main(String[] args)
{
	int[][] arr = new int[5][5]; // 배열 생성

	for (int i = 0; i < arr.length; i++) // 값 할당
	{				
		for (int j = i, n = 1; n <= 5; n++) // j를 i로 하면 1씩 증가할 수 있다.
		{		
			//System.out.print(i + "," + j + "[" + n + "]"); 좌표값 확인 
			
			arr[i][j] = n; 
			j++; // 인덱스 넘치는 순간 0으로 초기화 하기???
		}
		System.out.println();
	}
	/*================= 출력 =============*/
	for (int i = 0; i < arr.length ; i++)
	{
		for (int j = 0; j < arr[i].length; j++)
			System.out.printf("%3d",arr[i][j]);
		System.out.println();
	}

실습089 다차원배열


예시와 같은 배열 구현 후 출력 
단, 배열 구성 코드와 출력 코드는 분리

실행 예)
1 8 9 16 17    
2 7 10 15 18  
3 6 11 14 19  
4 5 12 13 20 

public class Test089 // 강사님 코드 
{
	public static void main(String[] args)
	{
		int[][] arr=new int[4][5]; //이례적으로 웅웅 4번 숑숑 5번//i,j 자리 바꿔쓰기
		
		int n=0;

		for (int i = 0; i < 5; i++ )
		{
			for (int j = 0; j < 4; j++ )
			{			
				n++;
				if (i % 2 == 0)
				{
					arr[j][i]=n; //i가 짝수 
				}
				else
				{
					arr[3-j][i] = n;//i가 홀수 1 3
				}
			}
		}	
		for (int i=0; i<arr.length;i++ )
		{
			for (int j=0;j<arr[i].length ;j++ )
				System.out.printf("%3d", arr[i][j]);
			System.out.println();
		}
	}
}

오늘 느낀 점

89번 실습이 어려워서 시간 안에 못풀었다.

반복문을 중첩하거나조건식을 여러개 쓰거나.. 증가가 아니라 감소하게 하는 등.. 

가장 기본적인 식이 아니면 헷갈린다. 연습이 많이 필요할 것 같다. 

728x90
반응형