yoni
[08] 제어문 - 분기문(switch 문), 반복문(While, do-While), 배열(Array), 배열과 제어문의 사용 ★ 본문
java of educational by contents
[08] 제어문 - 분기문(switch 문), 반복문(While, do-While), 배열(Array), 배열과 제어문의 사용 ★
yoni-1117 2018. 12. 1. 12:27[01] 제어문 - 분기문 Switch 문
- 입력 값이 일정한 수치 형태로 나열되어 있는 경우 사용합니다. - case문에 올수 있는 데이터 타입은 byte, char, short, int, long처럼
정수 형태만 올 수 있습니다.
- 문자열(String, JDK 1.7 부터 지원), 실수(float, double)는 사용 불가능.
. 현재 개발 버전은 대부분 1.8을 기준으로 함(2018년 기준).
- switch문은 if문을 여러개 결합한 것과 같음으로 전부 if 문으로 변경 가능.
[실행 화면]
1월 January
2월 February
3월 March
1/4 분기만 가능합니다.
▷ SwitchTest.java 3월 March
1/4 분기만 가능합니다.
-------------------------------------------------------------------------------------
public class SwitchTest {
public static void main(String[] args) {
int month = 1;
switch(month) {
case 1:
System.out.println("1월 January");
break;
case 2:
System.out.println("2월 February");
break;
case 3:
System.out.println("3월 March");
break;
default:
System.out.println("1/4 분기만 가능합니다.");
}
}
}
-------------------------------------------------------------------------------------
[02] 제어문 - 반복문 While, do-While
1. While 문
- 참일동안 실행합니다.
- 조건을 만족하지 않으면 한번도 실행을 하지 않습니다.
- 순환 횟수를 정확히 지정할 수 없을 경우 사용합니다.
예) Network server
1) 1씩 증가시키는 누적 알고리즘
su = su + 1;
① JVM 메모리에서 su 변수의 값을 연산장치로 읽어옵니다.
② 연산장치는 su 변수의 값에 1을 더합니다.
③ 연산된 결과를 할당 연산자 '='의 명령에따라 su 변수의 메모리에 저장합니다.
④ su 메모리는 새로운 값으로 변경됩니다.
2) 1부터 5까지 출력
- 무한 루틴을 이용하는 경우: while(true){...
- while문에 조건을 명시한 경우: while(index <= 4){...
[실행 화면]
1
2
3
4
5
--------
true
1
true
2
true
3
true
4
true
5
--------
5: false
-------------------------------------------------------------------------------------
public class While1 {
public static void main(String[] args) {
int su = 0;
System.out.println("---------------");
su = 0;
System.out.println("--------");
System.out.println(su + ": " + (su <= 4)); // false
}
}
-------------------------------------------------------------------------------------
[실습 1] 1부터 시작하여 1씩 증가하면서
2 and 3 and 4 and 5 and 6의 배수가 발견되면
출력하고 종료하는 프로그램을 제작하세요.
[실행 화면]
60
▷ While2.java -------------------------------------------------------------------------------------
public class While2 {
public static void main(String[] args) {
int su = 0; // 4 byte, ±21억
}
}
-------------------------------------------------------------------------------------
2. do-While 문
- 조건에 관계 없이 무조건 최소 1회는 실행합니다. 예) 반드시 하나의 수 이상을 입력 받아야 하는 경우
[실행 화면]
평균: -60
▷ DoWhile1.java
-------------------------------------------------------------------------------------
public class DoWhile1 {
public static void main(String[] args) {
int avg = -60;
do {
System.out.println("평균: " + avg);
} while(avg >= 0); // 양수만 처리
}
}
[실습 2] 1부터 시작하여 1씩 증가하면서
2, 3, 4, 5, 6의 배수가 발견되면 출력하고 종료하는 프로그램을 제작하세요.
[실행 화면]
60
▷ DoWhile2.java -------------------------------------------------------------------------------------
public class DoWhile2 {
public static void main(String[] args) {
int su = 0; // 4 byte, ±21억
}
}
-------------------------------------------------------------------------------------
[실습 3] 1부터 100까지의 정수중에서 짝수와 홀수의 갯수를 출력하는 프로그램을 제작하세요.
[실행 화면]
[실행 화면]
짝수: 50
홀수: 50
▷ DoWhile3.java 홀수: 50
-------------------------------------------------------------------------------------
public class DoWhile3 {
// 1부터 100까지의 정수중에서 짝수와 홀수의 갯수를 출력하는 프로그램을 제작하세요.
// 변수는?
public static void main(String[] args) {
int su = 0; // 증가되는 수
int odd_count = 0; // 홀수 갯수
int even_count = 0; // 짝수 갯수
System.out.println("짝수: " + even_count);
System.out.println("홀수: " + odd_count);
}
}
-------------------------------------------------------------------------------------
[실습 4] 1부터 100까지의 정수중에서 짝수와 홀수의 합을 출력하는 프로그램을 제작하세요.
[실행 화면]
[실행 화면]
짝수: 2550
홀수: 2500
▷ DoWhile4.java 홀수: 2500
-------------------------------------------------------------------------------------
public class DoWhile4 {
// 1부터 100까지의 정수중에서 짝수와 홀수의 합을 출력하는 프로그램을 제작하세요.
// 변수는?
public static void main(String[] args) {
int su = 0; // 증가되는 수
int odd_total = 0; // 홀수의 합
int even_total = 0; // 짝수의 합
System.out.println("짝수: " + even_total);
System.out.println("홀수: " + odd_total);
}
}
-------------------------------------------------------------------------------------
[실습 5] 1/1.0, 1/2.0, 1/3.0 .... 1/10.0의 합을 출력하는 프로그램을 제작하세요.
[실행 화면]
[실행 화면]
2.9289
▷ DoWhile5.java -------------------------------------------------------------------------------------
public class DoWhile5 {
// 1/1.0, 1/2.0, 1/3.0 .... 1/10.0의 합을 출력하는 프로그램을 제작하세요.
public static void main(String[] args) {
double tot = 0.0; // 합계, 8 byte
int child = 1; // 분자
double parent = 0.0; // 분모
System.out.println(tot);
}
}
-------------------------------------------------------------------------------------
[실습 6] 1/2.0, 2/4.0, 3/6.0 .... 10/20.0의 합을 출력하는 프로그램을 제작하세요.
[실행 화면]
5.0
[실행 화면]
5.0
-------------------------------------------------------------------------------------
public class DoWhile6 {
// 1/2.0, 2/4.0, 3/6.0 .... 10/20.0의 합을 출력하는 프로그램을 제작하세요.
public static void main(String[] args) {
double tot = 0.0; // 합계, 8 byte
int child = 0; // 분자
double parent = 0.0; // 분모
System.out.println(tot);
}
}
-------------------------------------------------------------------------------------
[03] 배열(Array) 사용하기
- 배열의 장점:
. 통일된 하나의 변수명으로 다량의 데이터를 처리할수 있습니다.
. 순환문을 이용하여 각각의 데이터에 공통된 연산작업을 쉽게 적용할 수 있습니다.
. 변수 사용을 줄임으로 코드를 간결하게 할 수 있습니다.
- 배열의 단점:
. 배열의 사이즈는 필요에 따라 증가시키거나 감소할 수가 없습니다.
. 배열의 크기를 선언하고 이용하지 않으면 메모리 낭비가 발생합니다.
- 배열의 사용예:
. 사이즈가 변경되지 않는 데이터 배열인 경우
. 배열생성시에 사이즈와 초기값이 지정되어 사용되는 경우
예) 1월 ~12월, 월요일~일요일, 각종 지정된 공휴일
각 학교의 학년(1~6, 1~2, 1~3, 1~2, 2.6, 3, 4) 데이터를 구분하는 코드값
- index(순서)를 통한 배열 요소의 구분: 배열명[인덱스(순서)]=값, index는 0부터 시작
- new: 배열에 메모리를 할당하는 명령어
1. 배열의 선언: [] 대괄호 이용, 순서 값(index)는 0부터 시작
1) 값이 지정되지 않은 경우, 메모리를 할당만 한 경우
ⓐ int[] data= new int[5]; (범위: data[0]~data[4]), 5 * 4 =20 byte
ⓑ int data[] = new int[5];
2) 값이 지정되어 있는 경우, 4 * 2 = 8 바이트 할당
ⓒ int data[] = {100, 200}; 자동으로 메모리가 부여되고 값이 할당됨.
2. 배열요소에 값 저장: 순서값(index)이 0부터 시작
int[] data = new int[3];
data[0] = 3;
data[1] = 6;
data[2] = 100;
3. 5개의 요소를 저장 할 수 있는 1차원 배열: index 순서 값은 0부터 시작합니다.
1) 문자열 저장 및 출력
[실행 화면]
JAVA
HTML5
CSS3
Javascript
JSP
CSS3
Javascript
JSP
배열의 크기: 5
--------------
2013 ← 배열의 값을 while(true){..., if문을 이용하여 출력하세요.
2014
20152016
2017
▷ DevEnvironment.java
-------------------------------------------------------------------------------------
public class DevEnvironment {
public static void main(String[] args) {
String[] dev = new String[5];
dev[0] = "JAVA";
dev[1] = "HTML5";
dev[2] = "CSS3";
dev[3] = "Javascript";
dev[4] = "JSP";
System.out.println(dev[0]);
System.out.println(dev[1]);
System.out.println(dev[2]);
System.out.println(dev[3]);
System.out.println(dev[4]);
System.out.println("배열의 크기: " + dev.length);
System.out.println("-------------------");
int[] years = new int[5];
years[0] = 2013;
years[1] = 2014;
years[2] = 2015;
years[3] = 2016;
years[4] = 2017;
int index = -1;
}
}
-------------------------------------------------------------------------------------
[실습] 콘솔에서 월을 입력받아 월에 해당하는 영문이름을 출력하세요.
- 월: "January", "February", "March", "April", "May", "June", "Juliy", "August", "Setember", "October", "November", "December"
[실행 화면]
/ws_java/control/bin>java Array1 1
January
/ws_java/control/bin>java Array1 2
February
/ws_java/control/bin>java Array1 3
March
▷ Array1.java
- 배열을 사용하지 않으면 12개의 if문이 필요할 수도 있습니다.
[실습] 콘솔에서 월을 입력받아 월에 해당하는 영문이름을 출력하세요.
- 월: "January", "February", "March", "April", "May", "June", "Juliy", "August", "Setember", "October", "November", "December"
[실행 화면]
/ws_java/control/bin>java Array1 1
January
/ws_java/control/bin>java Array1 2
February
/ws_java/control/bin>java Array1 3
March
▷ Array1.java
- 배열을 사용하지 않으면 12개의 if문이 필요할 수도 있습니다.
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
public class Array1 {
public static void main(String[] args) {
String[] months = {"January", "February", "March",
"April", "May", "June",
"Juliy", "August", "September",
"October", "November", "December"};
System.out.println(months[index]);
}
}
4. 2차원 배열 이용
- 행과 열의 구조, 하나의 면을 구성함.
- 2차원 배열은 메모리 낭비가 심함으로 특별한 경우가 아니면 사용하지
않습니다.
- 메모리 낭비 문제를 해결하기위한 JCF(Java Collection Framework)라고
하는 처리 기술이 배열의 단점을 개선하였습니다.
- int[][] score = new int[행의 갯수][열의 갯수];
[실행 화면]
0열 1열
↓ ↓
0행 → 80, 100 <-- 3행 2열 배열
↓ ↓
0행 → 80, 100 <-- 3행 2열 배열
1행 → 75, 85
2행 → 90, 95
-------------------------------------------------------------------------------------
public class TwoArray {
public static void main(String[] args) {
int[][] score = new int[3][2]; // 3행 2열
score[0][0] = 80; score[0][1] = 100;
score[1][0] = 75; score[1][1] = 85;
score[2][0] = 90; score[2][1] = 95;
System.out.println(score[0][0] + ", " + score[0][1]);
System.out.println(score[1][0] + ", " + score[1][1]);
System.out.println(score[2][0] + ", " + score[2][1]);
}
}
-------------------------------------------------------------------------------------
5. 3차원 배열
- 0, 0, 0: 면, 행, 열의 구조- 실무에서 거의 쓰이지 않음
- Game, 3D/Graphic 분야에 쓰임.
- 선언: int[면][행][열] datas = new int[면][행][열];
예) int[][][] datas = new int[2][3][4];
'java of educational by contents' 카테고리의 다른 글
[10] for문의 다양한 실습 ★ (0) | 2018.12.01 |
---|---|
[09] 반복문(for 문), for문의 순환 횟수 실습, 구구단 ★ (0) | 2018.12.01 |
[07] if문 실습, 문자열 비교 2 ★ (0) | 2018.12.01 |
[06] if문 실습, 문자열 비교 1 ★ (0) | 2018.12.01 |
[05] 제어문 - 분기문(if) - 다양한 if문 ★ (0) | 2018.12.01 |
Comments