SQLD, ECLIPS, JAVA,PYTHON, NODE....

[Eclips] Java class 3 - 배열, 2차원 배열, 본문

Java

[Eclips] Java class 3 - 배열, 2차원 배열,

D_Aiden 2023. 12. 11. 12:15
728x90
반응형
SMALL

2023.12.11

## 배열

동일한 자료형을 묶어 저장하는 참조 자료형.
생성할때 크기먼저 지정해야 되고 한번 크기를 지정하면 절대 변경될 수 없는 특징이 있음.

예시 자료형 [ ] 변수명 자료형 변수명 [ ]  
int [ ] a; int a[ ]; int 자료형만 저장 가능한 배열
double [ ] b; double b[ ]; double 자료형만 저장 가능한 배열
String [ ] c; String c[ ]; String 자료형만 저장 가능한 배열

 

## 배열 객체의 생성

new 자료형[배열의 길이]
예시


new int [3]; 정수형 3개 포함하는 배열 객체 생성
new double[5]; 실수형 5개를 포함하는 배열 객체 생성
new String [5]; 문자열 자료형 5개를 포함하는 배열 객체 생성
new int[]; 객체의 크기를 지정하지 않아 오류발생

배열에 저장된 값으로 객체 읽어보는 방법

0번째 1번째 2번째
3 4 6

배열 객체값 읽어오기

참조 변수형
[인덱스]
출력 명령어 결과 값
System.out.println( a[0] ) 3
System.out.println( a[1] ) 4
System.out.println( a[2] ) 6
System.out.println( a[-1] ) 예외 발생
System.out.println( a[3] ) 예외 발생
3번째 없음

배열 객채 생성과 함께 값 대입하기
자료형 [ ] 참조 변수명 = new 자료형 [ ] {값, 값, 값}
(예시)

명령어 결과값
int a=0; 기본 자료형
int[] b = null; 참조 자료형
System.out.pringln(a); 0출력
System.out.println(b); null 출력

a[0] = new int[3] --> int형 데이터 3개를 저장할 공간을 만들어 메모리에 넣고(new int[3]), 저장한 위치 정보를 a[0]에 저장.

※ 배열을 포함한 참조 자료형은 반드시 메모리 구조화 함께 이해하는 것이 매우 중요

배열의 선언과 객체의 대입을 분리해 표현 가능 / 불가능
가능

int [ ] [ ] a = new int[ ] [ ] {{1,2,3},{4,5,6}} Ok
int [ ] [ ] b;
b = new int [ ] [ ] {{1,2,3},{4,5,6}}
Ok
int [ ] [ ] a = {{1,2,3}, {4,5,6}} Ok
불가능 int [ ] [ ] b;
b = {{1,2,3},{4,5,6}
X

 

## 제어문 복습

(예제1)

  1. 컴퓨터가 1~100 사이의 임의 수를 추출하여 변수에 보관
  2. 1 ~ 100 사이의 숫자를 입력
  3. 내가 입력한 수와 컴퓨터가 추출한 수를 비교하여 더 큰지, 작은지, 맞는지를 알려주기
  4. N번만에 맞추었는지 알려주기
import java.util.Scanner;
public class NumberGame {
	public static void main(String[] args) {
	
// 컴퓨터가 1~100사이의 임의 수를 추출하여 변수 random 에 보관		
		int random = (int)(Math.random()*100)+1;
// 1 ~ 100사의 숫자를 입력하기 위해 “ Scanner ” 객체 선언		
		Scanner scan = new Scanner(System.in);
		int cout = 0;
// 반복 횟수가 정해져 있지 않으므로 while문 또는 do – while문을 사용		
// 해당 코드에서는 한번은 실행되어야 해서 do – while문을 사용
		do {
// “num” 변수에 숫자를 입력 받기 위하여 “ nextInt “ 를 통하여 숫자 입력		
			System.out.print("숫자를 입력 하세요 : "); int num = sc.nextInt();
			cout += 1; // 입력 횟수를 출력 하기위한 변수 선언
// 내가 입력한 수와 컴퓨터가 추출한 수 비교를 하기 위하여 if 문을 사용		
// 변수 random 과 변수 num 을 통해서 두 수를 비교		
// 두 수를 비교하여 더 큰지, 더 작은지 , 맞는지를 알려주기 구현		
			if(random > num) {		
				System.out.println("숫자가 작습니다.");		
			} else if(random < num){		
				System.out.println("숫자가 큽니다.");		
			} else if(random == num) {		
				System.out.println("정답입니다. " + cout + "번 입력하여 맞추었습니다.");		
				break;		
			}
// 반복 횟수가 정해져 있지 않을 경우 조건에 true 값 지정하여		
// 반복문 안에서 종료를 할 수 있도록 처리		
		} while(true)
	}	
}

 

(예제2)

  1. Main 함수 실행 시 값을 넣기 위하여 “Run Configurations” 에서 “Arguments” 에 25 + 10 입력
  2. Main 함수를 실행하게 입력된 값을 통해서 + - * / % 연산 처리
public class ArrayEx3 {
	public static void main(String[] args) {
// String 타입의 args 배열에 저장된 값을 변수에 저장
// 현재 args 배열의 타입은 String 타입으로 변수에 저장된 숫자도 String 타입
// 따라서 “ Integer.parseInt “ 함수를 이용하여 int 타입으로 변경
		
		int num1 = Integer.parseInt(args[0]);
		
// args[1] 배열에 있는 첫번째 방 추출 ( charAt() 사용 )
		char op = args[1].charAt(0);
		
		int num3 = Integer.parseInt(args[2]);
		
// 만약 main 함수에 입력된 값이 3개를 초과 하게 될 경우 처리 할 if문
		if(args.length != 3) {
			System.out.println("실행방법 : java ArrayEx3 숫자 연산자 숫자");
			System.exit(0); // 프로그램 종료 기능을 가진 함수 ( .exit(0) )
		}
		
		Int result = 0; // 연산 된 값을 저장 하기 위하여 result 이름으로 변수 선언
		
// 간단한 계산 처리로 Switch – case 문으로 처리
		Switch(op){		
		Case ‘ + ’ :		
			result = num1 + num2; break; **// 값을 계산하여 result 값에 저장하고 break 를 통하여 종료		
		Case ‘ - ‘ :		
			result = num1 - num2; break;		
		Case ‘ / ‘ :		
			result = num1 / num2; break;
		
// main 함수에 값을 넣을 때에는 * 을 입력 할 수 가 없어서 ‘ x ‘ 또는 ‘ X ‘ 로 입력		
// ‘ x ‘ 와 ‘ X ‘ 2가지 모두 인식될 수 있도록 대,소문자 처리가 가능하게 작성 되어진 코드		
		Case ‘ X ‘ :		
		Case ‘ x ‘ :		
			result = num1 * num2; break;		
		Case ‘ % ‘ :		
			result = num1 % num2; break;

// 함수의 return 값이 존재할 경우 default 값은 무조건 있어야 한다.
		default :		
			System.out.println(“지원되지 않은 연산입니다.”);		
		}
		System.out.println(“결과 : ” + num1 + op + num2 + “ = “ = result);		
	}
}

 

## 배열의 길이

배열참조 변수. length    -->  배열의 가리키는 곳으로 가서,방의 개수를 알아오는 것
ex) a.length = 2 

## for each 문

for(원소 자료형 변수명 : 집합 객체) {
 

## 2차원 배열

: 배열 순서는 0,1,2 ...로 정함.

1) 1차원 배열

int [ ]  a = new int[5];         // {1,2,3,4,5} 형태
           a는 데이터의 위치값 저장.

2) 2차원 배열

int [ ] [ ] b = new int [2][3] ;      // 2행 3열      ex. int = [c].length  --> c행의 모든 열을 의미.
   
(참고)
: 배열의 선언과 객체의 대입은 분리해서 표현 불가능
1) int [][] a = {{1,2,3}, {4,5,6}}                    // 가능
    int [][] a = new int[][] {{1,2,3},{4,5,6}}  // 가능
2) int [][] b;
     b = {{1,2,3}, {4,5,6}}                  // 불가능  --> 해결:  new int를 선언해야 됨
    int [][] b:
    b = new int[][] {{1,2,3},{4,5,6}}  // 가능

2차원 정방행렬 배열 객체를 생성하고 값 대입하기
자료형[ ] [ ] 참조 변수명 = new 자료형 [행의 길이] [열의 길이]; 
참조 변수명 [0][0] = 값;
참조 변수명 [0][1] = 값;
...
참조 변수명[행의 길이-1] [열의 길이-1] = 값; 
int [ ] [ ] a = new int[2][3];

a[0][0] = 1;   a[0][1] = 2;   a[0][2] = 3;

a[1][0] = 4;   a[1][1] = 5;   a[1][2] = 6;
배열 명령어 결과 값은 모두 동일함
int [ ] [ ]  array1 = new int [2][3];
array1[0][0] = 1;
array1[0][1] = 2;
array1[0][2] = 3;
array1[1][0] = 4;
array1[1][1] = 5;
array1[1][2] = 6;
1 2 3
4 5 6
int [ ] [ ]  array2;
array2 = new int[2][3];
array2[0][0] = 1;
array2[0][1] = 2;
array2[0][2] = 3;
array2[1][0] = 4;
array2[1][1] = 5;
array2[1][2] = 6;
1 2 3
4 5 6
int [ ] [ ] array3 = new int[ ][ ]{{1,2,3},{4,5,6}};  1 2 3
4 5 6
int [ ] [ ] = array4;
array4 = new int[ ] [ ] {{1,2,3},{4,5,6}};
1 2 3
4 5 6
int [ ] [ ] array5 = {{1,2,3},{4,5,6}} 1 2 3 
4 5 6

 
 3) 3차원 배열

int [ ] [ ] [ ] c = new int[2][3][4];
   
  
(연습1) 1~5까지 숫자를 5줄로 배열하시오.

		int [] dd=new int[3];
		dd[0] = 3;
		dd[1] = 4;
		dd[2] = 5;
		System.out.println(dd[0] + " " + dd[1] + " " + dd[2]);
		
		int cnt =1;
		int [][] a = new int [5][9];
			for (int g=0; g<a.length; g++) {     	// 행의 수
				for(int d=0; d<a.length; d++) {     // 열의 수
					a[g][d]=cnt++;
					System.out.print(a[g][d] +"\t");
				}
				System.out.println();
				}
			}
	}

(결과)

3 4 5

1	2	3	4	5	
6	7	8	9	10	
11	12	13	14	15	
16	17	18	19	20	
21	22	23	24	25

 
(연습2) 성적표 범위 내에서 합계, 평균, 총점을 출력하시오.

// 성적표 제목 출력
		int [][] score = 
			{{90,85,65},
					{20,76,100},
					{30,30,30}, 
					{40,80,90}, 
					{100,70,60}};
		int koreaTotal = 0;
		int englishTotal= 0;
		int mathTotal = 0;
// 학생별 성적 총점, 평균 구하여 출력
// 과목별 합계 누적
		System.out.println("번호\t국어\t영어\t수학\t총점\t평균");
		System.out.println("=============================================");
		for(int a=0; a<score.length; a++) {
			System.out.print(a+1 + "\t");
			int	sum =0;		
			koreaTotal +=score[a][0];
			englishTotal +=score[a][1];
			mathTotal +=score[a][2];
			for(int b=0; b<score[a].length; b++) {
				sum+=score[a][b];
				System.out.print(score[a][b] + "\t");
			}
			System.out.print(sum +"\t");
			System.out.println(sum/3);
		}
		System.out.println("=============================================");
		System.out.println("합계: \t" + koreaTotal +"\t"+ englishTotal+"\t"+ mathTotal);
	}
}

(결과)

번호	국어	영어	수학	총점	평균
=============================================
1	90	85	65	240	80
2	20	76	100	196	65
3	30	30	30	90	30
4	40	80	90	210	70
5	100	70	60	230	76
=============================================
합계: 	280	341	345


(연습3) 가변형 배열을 출력하시오.
가변(可變) : 사물의 모양이나 성질이 바뀌거나 달라질 수 있음. 또는 사물의 모양이나 성질을 바꾸거나 달라지게 할 수 있음.

//가변형 배열선언
		char [][] str = null;
		str = new char[5][];
		for(int z=0; z<str.length; z++) {
			str[z] = new char[z+1];
		}
// 값 초기화
		char temp = 'A';
		for(int a=0; a<str.length; a++) {
				for(int b=0; b<str[a].length; b++) { // 배열의 범위 지정
				str[a][b]=(char)temp;  				 // 배열에 값을 넣고
					System.out.print(str[a][b]);     // 배열의 값을 출력
				temp+=1;
			}
			System.out.println();
		}
	}
}

(결과)

A
BC
DEF
GHIJ
KLMNO

 

728x90
반응형
LIST