제어문에 대해서 알아보자.
제어문(Control statemant)
대부분 프로그램은 위에서 아래로 한 줄 씩 순차적으로 실행되는데 (절차식:bath 파일) 프로그램의 흐름을 바꾸는 제어하는 기술. C에서는 goto가 흐름을 변경했었다.
분기문 :if, switch
반복문: for, while, do ~ while
if문 :
단순 if 문: if문의 조건이 참이면 if문을 실행 하고, 거짓이면 아무 것도 실행하지 않는다.
package java04;
public class Test01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int n = 50;
String str = null;
// String 자료형 : 문자열, 기본값은 null, 기본 자료형은 아니다.
if(n == 50){ //()안은 무조건 True/False 의 조건이어야 한다.
str = "n은 50입니다.";
System.out.println(str);
} //{ } 사이를 코드블럭이라고 하며 하나(suite)로 작동된다.
System.out.println("50이 아닙니다.");
if(n != 50){ //괄호안의 값이 false일 경우엔 아래쪽 연산을 수행하지 않음
str = "n은 50이 아닙니다."; }
System.out.println(str);
}
}

if~ else 문 :if 문의 조건이 참이면 if문을 실행하고, 거짓이면 else문을 실행한다.
package java04;
public class Test02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int n = 49;
String str = null;
if( ++n >= 50) { // 이 경우 n은 1+n이어서 51
str = "n은 50이상입니다.";
} else {
str = "n은 50 미만입니다.";
}
System.out.println(str);
// if 조건이 True이면 else를 실행하지 않고 코드블럭을 벗어나서 프린트하고,
} // if 조건이 False면 if를 실행하지 않고 else를 실행해서 프린트한다.
}

Q1)
출생년도를 입력받고, 30세 이상이면 " 어른이 다 되었습니다 ", 30세 이하면 " 아직 청춘입니다 " 를 보이고, 마지막에 " 감사합니다 "를 출력하시오.
package java04;
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.println("출생년도를 입력해주세요.");
int year = scan.nextInt();
int age = (2022 - year +1);
System.out.println("현재 나이는"+age+"세 입니다.");
if (age >= 30) {
System.out.println("어른이 다되었습니다");
}else {
System.out.println("아직 청춘입니다.");
}
System.out.println("감사합니다.");
}
}

다중 if문 : 여러 개의 조건 비교가 필요한 경우 if ~ else if ~else if ~ else 문으로 끝낸다.
if
else if
else if
else
package java04;
import java.util.Scanner;
public class Test04 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.println("점수를 입력해주세요.");
int num = scan.nextInt();
String str = ""; //String 문자열의 초기화
if(num >= 90) { // 만일 이 조건에 해당되면 아래는 수행하지 않음
str = "A";
}else if (num >= 80) {
str = "B";
}else if (num >= 70) {
str = "C";
}else if (num >=60) {
str = "D";
}else {
str = "F";
}
System.out.println("당신의 등급은 "+str+" 입니다.");// 어느 경우든지 이 두줄은 실행됨
System.out.println("수고 하셨습니다.");
}
// System.out.println("잘 했습니다");
}

Swich ~ case 문
if 문과 비슷하지만 if 문은 골호 안에 인자 값이 true, 혹은 false로 결정 되는 조건식이 들어가야 하고, swich문은 인자 값으로 조건이 아닌 비교할 값이 들어가야 한다.
case로 여러 특정 조건을 나열한다. 특정 조건을 만족하면 바로 실행되어 case문을 벗어나야 하기 때문에 각 case 문 끝에는 break;를 기술한다.
모든 case에 해당 되는 조건이 없으면 if나 else if 문의 어느 조건도 충족되지 못하면 맨 아래 else문을 수행 하듯이 여기서도 case 문장의 어느 조건도 충족하지 못하면 맨 아래 default 문을 실행한다.
Swich문은 이해하기 쉽고 if 문에 비해 처리속도가 빠르다.
Swhich문은 대부분 if ~ else if~ else if ~ else ~ 문으로 대체할 수 있다.
package java04;
import java.util.Scanner;
public class Test08 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.println("하고 싶은 것을 선택하세요 => 1: 게입하기, 2:게임소개, 3:게임종료");
int n = scan.nextInt();
switch (n) { // 인자로 비교할 값이 들어가야한다.
case 1: // 인자로 비교할 첫 번째 조건 값이 들어간다.
System.out.println("1: 게임하기");
break;
case 2: // 인자로 비교할 두 번째 조건 값이 들어간다.
System.out.println("2: 게임소개");
break;
case 3: // 인자로 비교할 세 번째 조건 값이 들어간다.
System.out.println("3: 게임종료");
break;
default:
System.out.println("메뉴 선택이 올바르지 않아요.");
break;
}
}//main
}

For 문 :for 문은 주어진 범위에서 반복한다. 반복될 범위는 for(i=시작; i <=끝; i++/i--)식으로 지정한다.
package java04;
import java.util.Iterator;
public class Test11 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i;
for (i=0; i<=3; i++) {
System.out.println("hello, it's me");
// System.out.println("oh, yeag!!");
}
System.out.println("oh, yeah!!");
}
}

***Nested(중첩된) if/for, .....는 하나의 if-문, for-문 안에 다른 if-문, for-문이 들어있는 경우를 말한다.
package java04;
public class Test12 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i, j;
for(j=2; j<=9; j++) {
for(i=1; i<=9; i++) {
System.out.println(j+" x "+i+" = "+j*i);
}
}
}//main
}

확장 for - 문
for의 () 안에서 반복 범위를 지정하지 않고 배열이나, 셀렉션 클래스에서는 요소의 개수에 맞춰서 반복시키는 경우를 말한다.
int[ ] a = {1, 2, 3, 4}
for (int b : a); 식으로 표현하는데 Python의 slicing과 유사하다.
이 구문에서는 b는 요소를 대입하기 위한 변수로써 이 자리에서 바로 선언해서 사용한다. 이렇게 기술하면 요소의 처음과 끝의 개수를 미리 지정하지 않아도 된다. a에는 배열이나 컬렉션 클래스로 지정한다. 이렇게 하면 d에 a요소를 처음부터 차례대로 대입하는데 몇 개의 요소인지는 몰라도 있는 한 처리를 계속하게 된다.
package java04;
public class Test13 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] season = {"Spring", "Summer", "Autumn", "Winter"};
for (String s : season){
System.out.println(s);
}
}
}

배열(Array)
배열은 다수의 동일한 데이터형을 하나의 변수로 묶은 것인데, 다량의 동일한 데이터 타입을 다룰 때 매우 편리하다. 배열의 선언도 new 연산자를 사용해서
int[ ] a(OR int a[ ]) =new int[4];식으로 하는데 예전방식이다. 여기서 int[ ]는 배열 요소들의 데이터 타입이고 a가 배열_변수_명이며, new int[4]는 크기(size)가 4(요소의 개수 4개)인 배열이라는 뜻으로 앞으로 배열 변수 a[ ]로 사용하면 요소 4개가 함께 묶여서 사용될 수 있다.
배열의 첨자(Index)는 0부터 시작하기 때문에 크기가 4인 배열의 요소에 각각 접근하려면 순서적으로 a[0], a[1], a[2], a[3]으로 해주어야 한다.
배열의 선언과 동시에 초기화 한다면 { } 안에 요소를 열거 해서
int[ ] a = new int [ ] {1, 2, 3 ,4};식으로 해주거나
int[4] a = {1, 2, 3, 4}; 해서 간략히 해도 된다.
=> a[0]=1, a[1]=2, a[2]=3, a[3]=4 식으로 index를 사용해서 배열의 요소 값에 접근할 수 있다.
배열 요소 하나 하나는 일반 변수처럼 참조와 대입이 가능하다.
package java04;
public class Test14 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = new int[4]; //4개의 요소를 가지고 있는 배열 a
int b[] = new int[4]; //An array b which has 4 elements
int c[] = {1, 2, 3, 4}; // An array c which hs 4 elements by 1, 2, 3, 4
// System.out.println(a[n]);
// System.out.println(b[n]);
System.out.println(c[2]); // output of 3
System.out.println(c[1]);
}
}

package java04;
public class Test15 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int c[] = {1, 2, 3, 4};
System.out.println(c[0]);
System.out.println(c[1]);
System.out.println(c[2]);
System.out.println(c[3]);
System.out.println(c[4]); //범위를 넘어서서 오류!!!!
}
}

다차원 배열
표와 같이 행과 열이 있는 경우에는 다차원 배열이 편리하다. 1차원 배열은 요소 수가 행(옆으로)으로 늘어가지만 2, 3차원 배열에서는 종(수직으로)으로도 요소수가 늘어갈 수 있다.
| 1차원 배열 | int[] a = new int[3]; | //x방향 요소 개수 |
| 2차원 배열 | int[][] a = new int[2][3]; | //y 방향과 x방향 요소 개수 |
| 3차원 배열 | int [][][] a = new int [2][2][3]; | //z 방향, y방향, x방향 요소 개수 |
package java04;
public class Test15 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] [] a= {{10, 20, 30}, //2차원 배열 선언과 요소들 2행X3열
{40,50,60}
};
System.out.println(a[0][2]);
//int [] a= {10, 20, 30, 40}//1차원 배열 선언과 요소들
a[0][2] =0; //원래 요소의 값은 30
System.out.println(a[0][0]); //1행X1열
System.out.println(a[1][2]); //2행X3열
System.out.println(a[0][2]); //1행X3열
}
}

package java04;
public class Test16 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [][] a = {{10,20}, //3행 2열
{30, 40},
{50, 60},
};
System.out.println("a[0][0]=" +a[0][0]+" a[0][1]="+ a[0][1]);
System.out.println("a[0][0]=" +a[1][0]+" a[0][1]="+ a[1][1]);
System.out.println("a[0][0]=" +a[2][0]+" a[0][1]="+ a[2][1]);
}//-main
}

package java04;
public class Test17 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [][] a = {{10,20, 30},
{30, 50},
{60},
};
System.out.println("a[0][0]=" +a[0][0]+" a[0][1]="+ a[0][1]);
System.out.println("a[0][2]=" +a[0][2]+" a[1][0]="+ a[1][0]);
System.out.println("a[1][1]=" +a[1][1]+" a[2][0]="+ a[2][0]);
}
}

package java04;
public class Test18 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] a = new int[4]; // 1차원 배열
int b = a.length;
System.out.println(b);
int[][] c = {{1,2,3}, {4,5}}; // 다차원 배열
int d = c.length;
System.out.println(d);
int e = c[1].length;
System.out.println(e);
}
}

'JAVA' 카테고리의 다른 글
| [JAVA] do while 문 (0) | 2022.07.26 |
|---|---|
| [JAVA] 배열 / Scanner/ 난수 (0) | 2022.07.22 |
| [JAVA]문제 풀이 1 (0) | 2022.07.20 |
| [JAVA]연산자 (0) | 2022.07.20 |
| [JAVA]변수 타입2 (0) | 2022.07.19 |
댓글