제어문
* 프로그램은 기본적으로 위에서 아래로 순차적으로 실행된다.
* 다만, 순차적인 흐름을 바꾸고자 할 때는 "제어문"을 사용하여 제어한다.
* 종류
1. 조건문 : 선택적으로 실행하는 선택문(if, if-else, if-else if, switch)
2. 반복문 : 반복적으로 실행하는 실행문(while, do-while, for)
3. 분기문 : 그 이외의 흐름을 제어하는 구문(break, continue)
조건문
* 조건식을 통해 결과가 참, 거짓을 판별하여, 조건이 참일 경우 구문을 실행하낟.
* 조건식의 결과는 true, false라는 논리값만 나와야한다.
* 조건식에서는 비교연산자, 논리연산자를 주로 사용한다.
단독 if문
* 조건을 단독적으로 한개만 제시할 경우
* [표현법]
* if(조건식){
* 해당 조건식의 결과가 true일 경우에 실행할 코드
* }
* => 조건식의 결과가 true일 경우, 중괄호 블럭 안에 있는 코드가 실행된다.
* => 조건식의 결과가 false일 경우, 중괄호 블럭 안의 코드를 무시하고 넘어간다.
*
*
--------------------------------------------------------------------------------------------------
package com.kh.chap01.condition;
import java.util.Scanner;
public class A_If {
public void method1() {
Scanner sc = new Scanner(System.in);
System.out.print("정수 값 : ");
int num = sc.nextInt();
sc.nextLine();
if(num > 0) {
System.out.println("양수이다.");
}
if(num == 0) {
System.out.println("0이다.");
}
if(num < 0) {
System.out.println("음수이다.");
}
}
public void method2() {
Scanner sc = new Scanner(System.in);
System.out.print("정수 값 : ");
int num = sc.nextInt();
sc.nextLine();
if((num % 2 == 0)) {
System.out.println("짝수다");
}
if((num % 2 == 1)){
System.out.println("홀수다");
}
}
public void method3() {
Scanner sc = new Scanner(System.in);
System.out.print("나이 : ");
int num = sc.nextInt();
sc.nextLine();
if(num <=13) {
System.out.println("어린이입니다");
}
if(num >=14 && num <=19) {
System.out.println("청소년입니다");
}
if(num >= 20) {
System.out.println("성인입니다");
}
}
public void method4() {
Scanner sc = new Scanner(System.in);
System.out.print("주민번호 입력(-포함): ");
String personId = sc.nextLine();
char gender = personId.charAt(7);
if((gender=='1') || (gender=='3')) {
System.out.println("남자입니다");
}
if((gender=='2') || (gender=='4')) {
System.out.println("여자입니다.");
}
if((gender != '1')&&(gender != '2')&&
(gender != '3')&&(gender != '4')) {
System.out.println("잘못된 주민번호 입니다.");
}
}
}
--------------------------------------------------------------------------------------------------
if-else문
* 두개의 조건으로 경우의 수를 나눌 경우에 사용한다.
* [표현법]
* if(조건식){
* 조건이 참일 경우 실행할 코드
* }else{
* 조건이 거짓일 경우 실행할 코드
* }
* => 조건식의 결과가 true인 경우, if블럭을 실행
* => 조건식의 결과가 false인 경우, else블럭을 실행
* => 둘 중 하나만 실행이 된다.
*
--------------------------------------------------------------------------------------------------
package com.kh.chap01.condition;
import java.util.Scanner;
public class B_Else {
public void method1() {
Scanner sc = new Scanner(System.in);
System.out.print("정수 값 : ");
int num = sc.nextInt();
sc.nextLine();
if(num % 2 == 0) {
System.out.println("짝수다");
}else {
System.out.println("홀수다");
}
}
public void method2() {
Scanner sc = new Scanner(System.in);
System.out.print("양수 값 : ");
int num = sc.nextInt();
sc.nextLine();
if(num > 0) {
if(num %2==0) {
System.out.println("짝수다.");
}else {
System.out.println("홀수다.");
}
}else {
System.out.println("양수를 입력해야 한다.");
}
}
public void method3() {
Scanner sc = new Scanner(System.in);
System.out.print("사용자의 이름 입력 : ");
String name = sc.nextLine();
if(name.equals("홍길동")) {
System.out.println("본인입니다. 어서오세요");
}else {
System.out.println("본인이 아닙니다. 돌아가주세요");
}
}
--------------------------------------------------------------------------------------------------
if -else if문
* 동일한 비교대상을 가지고, 여러 개의 조건을 제시해주고자 할 경우 사용한다.
*
* [표현법]
* if(조건식1) {
* 실행할 코드1;
* }
* else if(조건식2) {
* 실행할 코드2;
* }
* else if(조건식3) {
* 실행할 코드3;
* }
* else{
* 앞의 조건들이 모두 false경우, 실행할 코드4;
* }
--------------------------------------------------------------------------------------------------
public void method4() {
Scanner sc = new Scanner(System.in);
System.out.print("정수 입력 : ");
int num = sc.nextInt();
sc.nextLine();
if(num > 0 ) {
System.out.println("양수입니다.");
}else if(num == 0) {
System.out.println("0입니다.");
}else {
System.out.println("음수입니다.");
}
}
public void method5() {
Scanner sc = new Scanner(System.in);
System.out.print("점수 입력 : ");
int score = sc.nextInt();
sc.nextLine();
char grade = ' ';
if(score>=0 && score<=100) {
if(score >= 90) {
grade = 'A';
System.out.println(grade);
}else if(score >= 80 ) {
grade = 'B';
System.out.println(grade);
}else if(score >= 70 ) {
grade = 'C';
System.out.println(grade);
}else {
grade = 'D';
System.out.println(grade);
}
System.out.printf("당신의 점수는 %d점이고, 등급은 %c입니다."
,score,grade);
}
else {
System.out.println("잘못 입력했습니다.");
}
}
public void method6() {
Scanner sc = new Scanner(System.in);
System.out.print("나이 입력 : ");
int age = sc.nextInt();
sc.nextLine();
String str = "";
if(age > 0) {
if(age > 19) {
str = "성인";
}else if(age >13) {
str = "청소년";
}else {
str = "어린이";
}
System.out.printf("당신의 나이는 %d세이며, \"%s\" 입니다.",age,str);
}else {
System.out.println("잘못 입력하셨습니다.");
}
}
}
--------------------------------------------------------------------------------------------------
Switch문
* 표현하고 싶은 경우의 수가 여러 개일 경우 사용 가능하다.
* 단, ==(동등비교연산자)이 포함된 조건인 경우에만 사용이 가능하다.
*
* switch문과 if문의 차이점
* if(조건식) => 조건식을 복잡하게 기술할 수 있다.(사용가능한 연산자의 가짓수가 많다)
* 조건식에서 숫자의 범위를 표현할 수 있다.
* Switch(조건식x)=> 확실한 값의 조건만 가능하다.(동등 비교 수행)
*
* [표현법]
* switch(동등 비교를 할 대상자){
* case 값1 : 실행할코드1; // 만약 앞으로 동등비교를 할 대상자 == 값1이면
* // 실행할 코드 1을 실행한다.
* break; // 실행할 코드 1을 실행하고, 중괄호 영역을 빠져나간다.
* case 값2 : 실행할코드2; // 만약 앞으로 동등비교를 할 대상자 == 값2이면
* // 실행할 코드 2를 실행한다.
* break; // 실행할 코드 2를 실행하고, 중괄호 영역을 빠져나간다.
* ...
* case 값n : 실행할코드n;
* break;
*
* default : 실행할코드; // case 값1에서 n번까지 동등비교를 수행하고
* // 하나도 실행되지 않았을 때 실행된다(=else)
* // break;를 쓰지 않는다.
* }
--------------------------------------------------------------------------------------------------
package com.kh.chap01.condition;
import java.util.Scanner;
public class C_Switch {
public void method1() {
Scanner sc = new Scanner(System.in);
System.out.print("숫자 입력 : ");
int num = sc.nextInt();
sc.nextLine();
String light = "";
switch(num) {
case 1 :
light = "빨간불";
break;
case 2 :
light = "파란불";
break;
case 3 :
light = "초록불";
break;
default :
System.out.println("잘못 입력하셨습니다.");
return;
}
System.out.printf("%s입니다.",light);
}
public void method2() {
Scanner sc =new Scanner(System.in);
System.out.println("-----Welcome 과일가게 -----");
System.out.print("구매할 과일명 입력 : ");
String fruit = sc.nextLine();
int price = 0;
switch(fruit) {
case "사과" :
price = 1000;
break;
case "바나나" :
price = 2000;
break;
case "복숭아" :
price = 5000;
break;
default :
System.out.println("입력하신 과일은 존재하지 않습니다.");
return;
}
System.out.printf("%s의 가격은 %d원 입니다.",fruit,price);
}
public void method3(){
Scanner sc = new Scanner(System.in);
System.out.print("주민번호 입력(-포함) : ");
String personId = sc.nextLine();
char gender = personId.charAt(7);
String result = "";
switch(gender) {
case '1' :
case '3' :
result = "남자입니다";
break;
case '2' :
case '4' :
result = "여자입니다";
break;
default :
System.out.println("잘못 입력하셨습니다.");
return;
}
System.out.println(result);
}
public void method4() {
Scanner sc =new Scanner(System.in);
System.out.print("월 입력 : ");
int month = sc.nextInt();
sc.nextLine();
switch(month) {
case 3:
case 4:
case 5:
System.out.println("봄입니다.");
break;
case 6:
case 7:
case 8:
System.out.println("여름입니다.");
break;
case 9:
case 10:
case 11:
System.out.println("가을입니다.");
break;
case 12:
case 1:
case 2:
System.out.println("겨울입니다.");
break;
default :
System.out.println("1~12사이의 숫자를 입력해주세요.");
}
}
}
--------------------------------------------------------------------------------------------------
반복문
* 프로그램의 흐름을 제어하는 제어문 중 하나로, 어떤 실행구문을 반복적으로 실행한다.
for문
* 코드를 반복시켜주는 구문 중 하나이다.
* 단, 내가 반복할 횟수를 알고 있을 때 사용한다.
* 괄호 안에 반복을 지정하는 부분이 (초기식;조건식;증감식)으로 이루어져 있다.
*
* [표현법]
* for(초기식;조건식;증감식){
* 반복시키고자 하는 코드;
* }
* => 소괄호 : 몇번 반복을 할지를 지정한다.
* => 중괄호 : 무엇을 반복하여 출력할지를 지정한다.
*
* 초기식 : 반복문이 실행될 때, "초기에 단 한번만 실행되는 구문"이다.
* (반복문 안에서 사용할 Variable을 선언 및 초기화한다.)
* 조건식 : 반복문이 실행될 때, "해당 반복이 수행될 조건"을 지정한다.
* (초기식에서 지정한 Variable을 가지고 조건을 지정한다)
* => 조건식의 결과가 true : 반복을 진행한다.
* => 조건식의 결과가 false : 반복을 종료 후 반복문을 빠져나온다.
* 증감식 : 반복문을 제어하는 Variable값을 증감시킨다.
* (초기식에서 지정한 Variable을 가지고 증감을 한다)
*
* [실행 순서]
* 초기식 -> 조건식(true) ->코드 -> 증감식
* -> 조건식(true) ->코드 -> 증감식
* -> 조건식(true) ->코드 -> 증감식
* ...
* -> 조건식 (false) ->코드를 실행하지 않고, 반복문 종료 후 빠져나옴.
package com.kh.chap02.loop;
import java.util.Scanner;
public class A_For {
public void method1() {
for(int i=1; i<=5; i++) {
System.out.println("안녕하세요.");
}
System.out.println();
for(int i=1; i<6; i++) {
System.out.println("반갑습니다.");
}
System.out.println();
for(int i=11; i<16; i++) {
System.out.println("어서오세요");
}
System.out.println();
for(int i=1;i<=10; i+=2) {
System.out.println("저리가세요");
}
System.out.println();
for(int i=10; i>=6; i-=1) {
System.out.println("하이");
}
}
public void method2() {
int j = 0;
for(int i=0; i<10; i++) {
System.out.println((i+1)+"번째 출력문");
if(i==1) {
j=i+1;
System.out.println(j+"번째 출력문");
}else {
}
}
}
public void method3() {
for(int i=0; i<10; i++) {
System.out.printf("%d ",(i+1));
}
}
public void method4() {
int sum = 0 ;
for(int i=1; i<=10; i++) {
sum = sum + i;
System.out.print(i);
if(i == 10) {
System.out.print(" = ");
}else {
System.out.print(" + ");
}
}
System.out.println(sum);
System.out.println("1에서 10까지의 합 : "+sum);
}
public void method5() {
Scanner sc = new Scanner(System.in);
System.out.print("양수 값 : ");
int num = sc.nextInt();
sc.nextLine();
if(num>0) {
int sum = 0;
for(int i=1; i<=num; i++) {
System.out.print(i);
if(i==num) {
System.out.print(" = ");
}else {
System.out.print(" + ");
}
sum = sum+i;
}
System.out.println(sum);
System.out.println("누적합 : "+sum);
}else{
System.out.println("잘못 입력하셨습니다.");
}
}
난수
* 매번 임의로 발생하는 랜덤값
* Math클래스
* 수학 계산과 관련된 모든 상수, method를 포함하고 있는 Class
* Java에서 이미 제공하고 있는 Class
*
* [특징]
* 모든 Variable과 Method앞에 static이 붙어있다.
* => Method를 호출할 때, new를 이용하여 대변할 이름을 만들 필요가 없다.
* 바로 Class명.Method명();으로 호출해준다.
* random()
* 매번 다른 랜덤값을 리턴해준다.
* 0.0 ~ 0.999999 사이의 랜덤값을 발생한다.
* 0.0 <= 랜덤값 < 1.0
*
* [표현법]
* 0.0 <= Math.random(); < 1.0
* 0.0 ~ 0.999...
* 0.0 ~ 9.999...(*10)
* 1.0 ~ 10.999...(+1)
* 1 ~ 10 (강제형변환 : int)
* [공식화]
* (Math.random() * 랜덤값 개수)+시작수
* 11~20사이의 숫자 중 랜덤값
* (Math.random() * 10)+11
public void method6() {
int random = (int)(Math.random()*10)+1;
System.out.println(random);
int sum = 0;
for(int i=1; i<=random; i++) {
sum+=i;
}
System.out.printf("1부터 %d까지의 총 합은 %d이다",random,sum);
}
public void method7() {
for(int i=1; i<= 10; i += 2) {
System.out.print(i + " ");
}
System.out.println();
for(int i=1; i<=10; i++) {
if(i%2==1) {
System.out.print(i+" ");
}
}
}
public void method8() {
for(int i=1; i<=9; i++) {
System.out.printf("2 * %d = %d \n",i,(2*i));
}
}
public void method9() {
System.out.println("====구구단 생성기====");
Scanner sc = new Scanner(System.in);
System.out.print("2~9 사이의 단수 입력 : ");
int gugudan = sc.nextInt();
sc.nextLine();
if(gugudan>=2 && gugudan<=9) {
for(int i=1; i<=9; i++) {
System.out.printf("%d * %d = %d \n"
,gugudan,i,(gugudan*i));
}
}else {
System.out.println("단수를 잘못 입력하셨습니다.");
}
}
public void method10() {
for(int i=2; i<=9; i++) {
System.out.println("-----"+i+"단-----");
for(int j=1; j<=9; j++) {
System.out.printf("%d * %d = %d \n",i,j,(i*j));
}
}
}
public void method11() {
for(int i=0; i<3; i++) {
for(int j=1; j<=5; j++) {
System.out.print(j+" ");
}
System.out.println();
}
}
public void method12() {
for(int i=0; i<20; i++) {
System.out.print("*");
if((i+1)%5 == 0 ) {
System.out.println();
}
}
}
public void method13() {
for(int i=1; i<=4; i++) {
for(int j=1; j<=4; j++) {
if(i==j) {
System.out.print(j);
}else {
System.out.print("*");
}
}
System.out.println();
}
}
public void method14() {
Scanner sc = new Scanner(System.in);
System.out.print("문자열 입력 : ");
String str = sc.nextLine();
for(int i=0; i<3; i++) {
System.out.println((i+1)+"번째 문자 : " + str.charAt(i));
}
}
public void method15() {
Scanner sc = new Scanner(System.in);
for(int i=0; true; i++) {
System.out.print("아무 문자열이나 입력받으세요 : ");
String str = sc.nextLine();
if(str.equals("exit")) {
System.out.println("프로그램을 종료합니다.");
return;
}else {
System.out.println("입력된 문자열 : "+str);
}
}
}
public void method16() {
Scanner sc = new Scanner(System.in);
System.out.print("정수1 입력 : ");
int num1 = sc.nextInt();
System.out.print("정수2 입력 : ");
int num2 = sc.nextInt();
if(num1 < num2) {
for(int i=num1; i<=num2; i++) {
System.out.print(i+" ");
}
}else if(num1 > num2) {
for(int i=num1; i>=num2; i-- ) {
System.out.print(i+" ");
}
}else {
System.out.print("값이 동일합니다.");
}
}
}
while문
* 반복문의 일종으로 조건식의 결과가 true일 경우에만 반복을 진행
* 조건식의 결과가 false인 경우, 반복문을 빠져나옴.
*
* [표현법]
* [기본]
* while(조건식 - true/false){
* 반복적으로 실행할 내용물;
* }
*
* [응용]
* 초기식; : 반복에 필요한 변수를 선언 및 초기화(필수 아님)
* while(조건식 - true/false){
* 반복적으로 실행할 내용물;
* 증감식;(필수 아님)
* }
*
* [응용2]
* while(true){
* 반복적으로 실행할 내용물;
* }
* => 무한반복이 일어남.
package com.kh.chap02.loop;
import java.util.Scanner;
public class B_while {
public void method1() {
int i=0;
while(i<5) {
System.out.println("안녕하세요");
i++;
}
System.out.println("i = "+i);
System.out.println();
while(i>=1) {
System.out.println("i = "+--i);
}
System.out.println("i = "+i);
}
public void method2() {
int i=1;
int sum=0;
while(i<=10) {
sum += i;
i++;
}
System.out.println("총 합계 : "+sum);
}
public void method3() {
int i=1;
int sum=0;
int random = (int)((Math.random()*100)+1);
while(i<=random) {
sum = sum+i;
i++;
}
System.out.println("i : "+i);
System.out.println("랜덤 총합계 : "+sum);
}
public void method4() {
Scanner sc = new Scanner(System.in);
while(true) {
System.out.print("아무 문자열이나 입력하세요 : ");
String str = sc.nextLine();
System.out.println("입력 문자 : "+str);
if(str.equals("exit")) {
System.out.println("프로그램을 종료합니다.");
return;
}
}
}
do-while문
* do로 우선 실행을 하고, while을 통해 조건을 제시한다.
*
* [표현법]
* 초기식;
* do{
* 실행할 코드;
* 증감식;
* }while(조건식);
*
* 조건식이 true이면? 실행할 코드를 다시 실행.
* 조건식이 false이면? 그래도 do문을 실행하고 빠져나온다.
* 즉, while문은 조건 검사를 먼저 하고, true여야지만 실행.
* do-while문은 일단 실행을 하고 나서, 조건 검사를 하여 true이면 돌아가서 실행
* 최초의 while문이 false여도 최소 한번은 실행함.
public void method5() {
int i=0;
do {
System.out.println("하이");
}while(i==1);
}
public void method6() {
for(int i=1; i<=5; i++) {
System.out.print(i + " ");
}
int i=1;
while(i<=5) {
System.out.print(i+" ");
i++;
}
int j=1;
do {
System.out.print(j + " ");
j++;
}while(j<=5);
}
}
break문
* break문을 만나는 순간
* "현재 내 위치로부터 가장 가까운 반복문 한 겹"을
* 빠져나가게끔 해주는 구문
* 즉, 해당 break문이 속해 있는 반복문 한 겹을 빠져나감.
*
* [표현법]
* break;
*
* [주의할점]
* 분기문에서의 break와 switch문에서의 break는 다른 개념임.
* switch에서의 break문은 단순히 해당 switch영역을 빠져나가는 용도일 뿐.
* 반복문에서의 break문은 break문의 위치에서 한겹을 빠져나가는 것임.
*
* [return과 break의 차이점]
* break의 경우, 해당 while문을 한겹 빠져나가 무한반복문을 빠져나가고 다음 코드로 진행함.
* return의 경우, a.method1();로 다시 가기 때문에
* 무한반복의 while문을 벗어나지 못하여 반복문 다음의 코드를 진행하지 못함.
*
* [오류메세지]
* Unreachable code
package com.kh.chap03.branch;
import java.util.Scanner;
public class A_Break {
public void method1() {
int i=0;
int random=0;
while(true) {
random = (int)((Math.random()*100)+1);
if(random%2==1) {
break;
}
System.out.println("랜덤 : "+random);
}
System.out.println("끝났습니다.");
}
public void method2() {
Scanner sc = new Scanner(System.in);
while(true) {
System.out.print("아무 문자열이나 입력하세요 : ");
String str = sc.nextLine();
if(str.equals("exit")) {
break;
}else {
System.out.println("\""+str+"\"" + " 의 길이 : "+str.length());
}
}
System.out.println("프로그램을 종료합니다.");
}
public void method3() {
Scanner sc = new Scanner(System.in);
while(true) {
System.out.print("양수 입력 : ");
int num = sc.nextInt();
if(num>0) {
for(int i=1; i<=num; i++) {
System.out.print(i+" ");
}
break;
}else {
System.out.println("다시 입력해주세요.");
}
System.out.println();
}
}
}
continue문
* 반복문 안에서 사용하는 구문
* continue를 만나게 되면, 그 뒤에 어떤 구문이 있더라도 실행하지 않고
* 가장 가까운 반복문으로 올라감.
package com.kh.chap03.branch;
import java.util.Scanner;
public class B_Continue {
public void method1() {
for(int i=1; i<=10; i+=2) {
System.out.print(i+" ");
}
System.out.println();
for(int i=1; i<=10; i++) {
if(i%2==1) {
System.out.print(i+" ");
}
}
System.out.println();
for(int i=1; i<=10; i++) {
if(i%2==0) {
continue;
}
System.out.print(i+" ");
}
}
public void method2() {
int sum=0;
for(int i=1; i<=100 ; i++) {
if(i%6==0) {
continue;
}
sum=sum+i;
System.out.println(i+" ");
}
System.out.print("6의 배수를 제외한 1~100의 합 : "+sum);
}
public void method3() {
for(int i=2; i<=9; i++) {
System.out.println("====="+i+"단 =====");
for(int j=1; j<=9; j++) {
if(i%4==0){
continue;
}
System.out.printf("%d * %d = %d \n",i,j,(i*j));
}
}
System.out.println("구구단 종료");
}
public void method4() {
Scanner sc =new Scanner(System.in);
while(true) {
System.out.print("연산자(+,-,*,/,%) : " );
String operator = sc.nextLine();
if(operator.equals("exit")) {
System.out.println("프로그램을 종료합니다.");
break;
}
if(operator.equals("+")||
operator.equals("-")||
operator.equals("*")||
operator.equals("/")||
operator.equals("%")){
System.out.print("정수1 입력 : ");
int num1 = sc.nextInt();
sc.nextLine();
System.out.print("정수2 입력 : ");
int num2 = sc.nextInt();
sc.nextLine();
switch(operator) {
case "+" : System.out.println(num1 + " + " +num2 + " = " + (num1+num2));break;
case "-" : System.out.println(num1 + " - " +num2 + " = " + (num1-num2));break;
case "*" : System.out.println(num1 + " * " +num2 + " = " + (num1*num2));break;
case "/" :
if(num2==0) {
System.out.println("0으로 나눌 수 없습니다. 다시 입력하세요.");
continue;
}else {
System.out.println(num1 + "/" +num2 + " = " + (num1/num2));
break;
}
case "%" :
if(num2==0) {
System.out.println("0으로 나눌 수 없습니다. 다시 입력하세요.");
continue;
}else {
System.out.println(num1 + "%" +num2 + " = " + (num1%num2));
break;
}
}
}else {
System.out.println("없는 연산자입니다. 다시 입력해주세요.");
}
}
}
}