일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 | 29 | 30 |
- java 로또
- Java 메소드
- java
- java 상속
- java string
- java Fish
- java 단축키
- sqld 자격증
- sqld grant
- SQLD 특강
- JAVA for문
- java spider
- sqld revoke
- java 구구단
- sqld deny
- sqld remame
- Java Cat
- JAVA 연산자
- SQLD 핵심포인트
- sqld 옵티마이져
- java 논리연산자
- sqld trigger
- PLSQL
- java 성별
- SQLD 옵티마이저
- SQLD 자격시험 개념정리
- SQL
- java Animal
- java 함수
- JAVA 제어문
- Today
- Total
SQLD, ECLIPS, JAVA,PYTHON, NODE....
[Eclips] Java class 3 - 배열, 2차원 배열, 본문
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 | |
불가능 | X |
## 제어문 복습
(예제1)
- 컴퓨터가 1~100 사이의 임의 수를 추출하여 변수에 보관
- 1 ~ 100 사이의 숫자를 입력
- 내가 입력한 수와 컴퓨터가 추출한 수를 비교하여 더 큰지, 작은지, 맞는지를 알려주기
- 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)
- Main 함수 실행 시 값을 넣기 위하여 “Run Configurations” 에서 “Arguments” 에 25 + 10 입력
- 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
'Java' 카테고리의 다른 글
[Eclips] Java Class 5 - 매개변수, 오버로딩, 메소드 문제 및 정답 (0) | 2023.12.13 |
---|---|
[Eclips] Java class 4 - 선언부, Method, signature, Overloading, windowbuilder 설치. (0) | 2023.12.12 |
[Eclips] Java class 2 - do while, switch, for 등 제어문 연습문제(다이아몬드 출력 등) (3) | 2023.12.08 |
[Eclips] Java class 2 - 논리연산자, 대입연산자, 논리시프트, 구구단, 짝수단, 배열, 로또, 동치연산자(가위바위보) (0) | 2023.12.08 |
[Eclips] Java class 1 - 연산자 문제 (4) | 2023.12.07 |