for문에 비해 while문은 구조가 간단하다.

while (조건식) {
	//조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다.
}
1. 조건식이 참(true)이면 블럭{}안으로 들어가고, 거짓(false)이면 while문을 벗어난다.
2. 블럭{}의 문장을 수행하고 다시 조건식으로 돌아간다.

 

 

for문과 while문의 비교

for(int i=1;i<=10;i++) {
	System.out.println(i);
}

 

while(i<=10) {
	System.out.println(i);
    i++;
}

for문과 while문은 항상 서로 변환이 가능하다.

초기화나 증감 식이 없다면 while문이 더 적합할 것이다.

 

while문의 조건식은 생략불가

for문은 조건식을 생략할 수 있으나 for( ; ; )이 가능하나

while문의 조건식은 생략할 수 없다. while( ) 은 불가능

따라서 while문은 적어도 while(true)를 적어줘야한다.

 

public class FlowEx23 {
	public static void main(String[] args) {
		int i = 5;

		while (i-- != 0) {
			System.out.println(i + " - I can do it.");
		}
	}	//main의 끝
}
4 - I can do it.
3 - I can do it.
2 - I can do it.
1 - I can do it.
0 - I can do it.

'JAVA 04강 조건문과 반복문 > 반복문 for, while' 카테고리의 다른 글

반복문 do-while  (0) 2021.07.15
반복문 for  (0) 2021.07.15

for문이나 while문에 속한 문장은 조건에 따라 한 번도 수행되지 않을 수 있지만 do-wheile문에 속한 문장은 무조건 최소한 한 번은 수행될 것이 보장된다.

주로 게임에서 이를 이용한다.(e.g. UI 튜토리얼)

기본적으로 while문과 구조가 같으나 조건식과 블록{}의 순서를 바꿔놓은 것이다.

do {
	//조건식의 연산결과가 참일 때 수행될 문장들을 적는다.
    } while {조건식);

그리 많이 쓰는 반복문은 아니다.

 

public class FlowEx28 {
	public static void main(String[] args) {
		int input = 0, answer = 0;

		answer = (int) (Math.random() * 100) + 1; // 1~100사이의 임의의 수를 저장
		Scanner scanner = new Scanner(System.in);

		do {
			System.out.print("1과 100사이의 정수를 입력하세요.>");
			input = scanner.nextInt();

			if (input > answer) {
				System.out.println("더 작은 수로 다시 시도해보세요.");
			} else if (input < answer) {
				System.out.println("더 큰 수로 다시 시도해보세요.");
			}
		} while (input != answer);

		System.out.println("정답입니다.");
		scanner.close();
	}
}
1과 100사이의 정수를 입력하세요.>50
더 큰 수로 다시 시도해보세요.
1과 100사이의 정수를 입력하세요.>75
정답입니다.

 

'JAVA 04강 조건문과 반복문 > 반복문 for, while' 카테고리의 다른 글

반복문while  (0) 2021.07.15
반복문 for  (0) 2021.07.15

model–view–controller, MVC는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다.

 

 

 

모델 뷰 컨트롤러를 사용하는 이유는 유지보수가 쉽기 때문이다.

 

모델은 모델의 상태에 변화가 잇을 때 컨트롤러와 뷰에 이를 통보한다. 모델이 잘못되면 이 소프트웨어 디자인 패턴의 유지보수에 심각한 문제가 생긴다.

어떠한 동작을 수행하는 코드를 의미하며 표시 형식에 의존하지 않는다.

 

는 사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 얻어온다. 만약 뷰와 모델의 연계가 안된다면, 마찬가지로 유지보수에 문제가 생긴다.

MVC에서 모델은 여러 개의 뷰(view)를 가질 수 있다. 뷰는 모델에게 질의를 하여 모델로 부터 값을 가져와 사용자에게 보여준다.

 

컨트롤러 모델에 명령을 보냄으로써 모델의 상태를 변경할 수 있다. 프로그래머가 주로 다루게 되며, 컨트롤러가 관련된 뷰에 명령을 보냄으로써 모델의 표시 방법을 바꿀 수 있다.

MVC의 뷰는 여러 개의 컨트롤러(controller)를 가지고 있다. 사용자는 컨트롤러를 사용하여 모델의 상태를 바꾼다. 컨트롤러는 모델의 mutator 함수를 호출하여 상태를 바꾼다. 이때 모델의 상태가 바뀌면 모델은 등록된 뷰에 자신의 상태가 바뀌었다는 것을 알리고 뷰는 거기에 맞게 사용자에게 모델의 상태를 보여 준다.

 

참고 자료 위키백과:https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC

 

모델-뷰-컨트롤러 - 위키백과, 우리 모두의 백과사전

모델, 뷰, 컨트롤러의 관계를 묘사하는 간단한 다이어그램. 웹 애플리케이션에서 일반적인 MVC 구성요소 다이어그램 모델-뷰-컨트롤러(model–view–controller, MVC)는 소프트웨어 공학에서 사용되는

ko.wikipedia.org

 

'JAVA준비 > 배경지식' 카테고리의 다른 글

트리구조(레드-블랙 트리)  (0) 2021.07.26
파일 할당 테이블fat  (0) 2021.07.23
트래픽 사이트)스탯카운터  (0) 2021.07.08
JAVA이클립스 기본적인 창 보는 법  (0) 2021.07.08
JAVA시작  (0) 2021.07.07

반복문은 어떤 작업이 반복적으로 수행되도록 할 때 사용된다.

for문과 while문은 구조와 기능이 유사하여 어느 경우에나 서로 변환이 가능하다.

 

for문

for문은 반복 횟수를 알고 있을 때 적합하다.

구조가 객관적이라 이해하기 쉽다.

for(int i=1i<=5;i++) {
	System.out.println("I can do it.");
}

변수에 i를 저장한 다음, 매 반복마다 i값을 i 증가시키고, 반복할 때마다 "I can do it"을 출력한다.

 

for문의 구조와 수행 순서

for문은 초기화, 조건식, 증감식, 블록{}으로 이루어져 있으며, 조건식이 참인 동안 블록{ } 내의 문장들을 반복한다.

for (초기화;조건식;증감식) {
	// 조건식이 참일 때 수행될 문장들을 적는다.
)
1. 초기화 수행
2. 조건식 참거짓 판별
3. 수행될 문장
4. 증감식
5. 다시 2로

 

초기화

반복문에 사용될 변수를 초기화하는 부분이며 처음에 한 번만 수행된다.

 

조건식

조건식의 값이 (boolean) 참(true)이면 반복을 계속하고, false이면 반복을 중단한다.

조건식을 잘못 만들면 한 번도 수행되지 않거나, 영원히 반복된다.

 

증감식

반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식이다.

 

public class FlowEx14 {
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) { // 반복횟수 가급적 for문에서는 시작의 변수는 하나만
			System.out.printf("%d \t%n", i);
		}
	}
}
1 	
2 	
3 	
4 	
5 	
6 	
7 	
8 	
9 	
10

 

중첩 for문

if안에 또 다른 if문을 넣을 수 있는 것처럼, for문 안에 또 다른 for문을 포함시키는 것도 가능하다.

public class FlowEx16 {
	public static void main(String[] args) {
		for(int i=1; i<=5;i++) {
			for(int j=1;j<=10;j++) {
				System.out.print("*");// 2 10
			}
			System.out.println();
		}
	}

}
**********
**********
**********
**********
**********
(j=1,i=1) 2,1 3,1 4,1 5,1
1,2 2,2 3,2 4,2 5,2
1,3 2,3 3,3 4,3 5,3
1,4 2,4 3,4 4,4 5,4
1,5 2,5 3,5 4,5 5,5

for( i증가식 ) {

for( j증가식) {

"*"}

}

연산순서

1. i 증가
2. j 증가
3. * 출력
4. j 증가 * 4
5. 다시 1번부터 4회 추가로 반복

 

향상된 for문(enhanced for statement)

JDK1.5부터 배열과 컬렉션에 저장된 요소에 접근할 때 기존보다 편리한 방법으로 처리할 수 있도록 for문의 새로운 문법이 추가되었다.

향상된 for문을 사용하려면 객체가 필요하다.

for ( 타입 변수명 : 배열 또는 컬렉션) {
	// 반복할 문장
}

 

int[] arr = {10,20,30,40,50);

for(int i=0; i < arr.length; i++) {
	System.out.println(arr[i]);
}

이 문장을 배열을 선언했을 때

int[] arr = {10,20,30,40,50);

for(int tmp : arr) {
	System.out.println(tmp);
}

이런 식으로 표현이 가능해진다.

그러나 향상된 for문은 일반적인 for문과 달리 배열이나 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용할 수 있다.

 

'JAVA 04강 조건문과 반복문 > 반복문 for, while' 카테고리의 다른 글

반복문while  (0) 2021.07.15
반복문 do-while  (0) 2021.07.15

찾으려면 ctrl+F한 뒤 class이름을 검색하자

각 calss밑에는 실행 시 나오는 console내용이 있다.

public class FlowEx01 {
	public static void main(String[] args) {
		int x = 0;
		System.out.printf("x=%d 일 때, 참인 것은%n", x);

		if (x == 0)
			System.out.println("x==0");
		if (x != 0)
			System.out.println("x!=0"); // f
		if (!(x == 0))
			System.out.println("!(x==0)"); // f
		if (!(x != 0))
			System.out.println("!(x!=0)");

		x = 1;
		System.out.printf("x=%d 일 때, 참인 것은 %n", x);

		if (x == 0)
			System.out.println("x==0"); // f
		if (x != 0)
			System.out.println("x!=0");
		if (!(x == 0))
			System.out.println("!(x==0)");
		if (!(x != 0))
			System.out.println("!(x!=0)"); // f

		if (true) {
			System.out.println("");
		}
	}
}
x=0 일 때, 참인 것은
x==0
!(x!=0)
x=1 일 때, 참인 것은 
x!=0
!(x==0)

 

 

public class FlowEx02 {
	public static void main(String[] args) {
		int input;

		System.out.print("숫자를 하나 입력하세요.>");

		Scanner scanner = new Scanner(System.in);
		String tmp = scanner.nextLine();
		input = Integer.parseInt(tmp);

		if (input == 0) {
//			System.out.println("입력하신 숫자는 0입니다.");
			System.out.println("입력하신 숫자는 0입니다.");
		}

		else if (input % 2 == 0) {
			System.out.println("입력하신 숫자는 짝수입니다.");
		}

		else if (input % 2 == 1) {
			// System.out.println("입력하신 숫자는 0이 아닙니다.");
//		System.out.printf("입력하신 숫자는 %d입니다.", input);
			System.out.println("입력하신 숫자는 홀수입니다.");

			scanner.close();
		}
	}
}
0입력시

숫자를 하나 입력하세요.>0
입력하신 숫자는 0입니다.
숫자를 하나 입력하세요.>1
입력하신 숫자는 홀수입니다.

 

 

public class FlowEx03 {
	public static void main(String[] args) {
		System.out.println("숫자를 하나 입력하세요.>");
		
		Scanner scanner = new Scanner(System.in);
		int input = scanner.nextInt();
		
		if(input==0) {
			System.out.println("입력하신 숫자는 0입니다.");
		} else {
			System.out.println("입력하신 숫자는 0이 아닙니다.");
		}
		scanner.close();
	}
}
숫자를 하나 입력하세요.>
1
입력하신 숫자는 0이 아닙니다.

 

 

public class FlowEx04 {
	public static void main(String[] args) {
		int score = 0;
		char grade = ' ';

		System.out.print("점수를 입력하세요.>");
		Scanner scanner = new Scanner(System.in);
		score = scanner.nextInt();

		if (score >= 90) {
			grade = 'A';
		} else if (score >= 80) {
			grade = 'B';
		} else if (score >= 70) {
			grade = 'C';
		} else {
			grade = 'D';
		}


		System.out.println("당신의 학점은 "+ grade +"입니다.");
		scanner.close();
	}
}
점수를 입력하세요.>30
당신의 학점은 D입니다.

 

 

public class FlowEx05 {
	public static void main(String[] args) {
		int score = 0;
		char grade = ' ', opt = '0';

		System.out.print("점수를 입력해주세요.>");

		Scanner scanner = new Scanner(System.in);
		score = scanner.nextInt();

		System.out.printf("당신의 점수는 %d입니다.%n", score);

		if (score >= 90) {
			grade = 'A';
			if (score >= 98) {
				opt = '+';
			} else if (score < 94) {
				opt = '-';
			}
		} else if (score >= 80) {
			grade = 'B';
			if (score >= 88) {
				opt = '-';
			}
		} else {
			grade = 'C';
		}
		System.out.printf("당신의 학점은 %c%c입니다.%n", grade, opt);
		scanner.close();
	}
}
점수를 입력해주세요.>85
당신의 점수는 85입니다.
당신의 학점은 B0입니다.

 

 

public class FlowEx06 {
	public static void main(String[] args) {
		System.out.println("현재 월을 입력하세요.>");
		
		Scanner scanner = new Scanner(System.in);
		int month = scanner.nextInt();
		
		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;
			default:
			case 12: case 1: case 2:
				System.out.println("현재의 계절은 겨울입니다.");
		}
		scanner.close();
	}// main의 끝
}
현재 월을 입력하세요.>
7
현재의 계절은 여름입니다.

 

 

public class FlowEx07 {
	public static void main(String[] args) {
		System.out.print("가위(1),바위(2),보(3) 중 하나를 입력하세요.>");
		
		Scanner scanner = new Scanner(System.in);
		int user = scanner.nextInt();
		int com = (int)(Math.random() * 3) +1;
		
		System.out.println("당신은 "+ user +"입니다.");
		System.out.println("컴은 "+ com +"입니다.");
		
		switch(user-com) {
		case 2: case -1:
			System.out.println("당신이 졌습니다.");
			break;
		case 1: case -2:
			System.out.println("당신이 이겼습니다.");
			break;
		case 0:
			System.out.println("비겼습니다.");
			break;
		}
		scanner.close();
	}//main의 끝
}
가위(1),바위(2),보(3) 중 하나를 입력하세요.>1
당신은 1입니다.
컴은 1입니다.
비겼습니다.

 

 

public class FlowEx08 {
	public static void main(String[] args) {
		System.out.println("당신의 주민번호를 입력하세요. (011231-1111222)>");
		
		Scanner scanner = new Scanner(System.in);
		String regNo = scanner.nextLine();
		
		char gender = regNo.charAt(7);
		
		switch(gender) {
		case '1': case '3':
			System.out.println("당신은 남자입니다.");
			break;
		case '2': case '4':
			System.out.println("당신은 여자입니다.");
			break;
			default:
				System.out.println("유효하지 않은 주민등록번호입니다.");
		}
		scanner.close();
	}// main의 끝

}
당신의 주민번호를 입력하세요. (011231-1111222)>
830721-1351228
당신은 남자입니다.

 

public class FlowEx09 {
	public static void main(String[] args) {
		char grade = ' ';
		
		System.out.print("당신의 점수를 입력하세요.(1~100)>");
		
		Scanner scanner = new Scanner(System.in);
		int score = scanner.nextInt();
		
		switch(score) {
		case 100: case 99: case 98: case 97: case 96:
		case 95: case 94: case 93: case 92: case 91: case 90:
		grade = 'A';
		break;
		case 89: case 88: case 87: case 86: case 85:
		case 84: case 83: case 82: case 81: case 80:
		grade = 'B';
		break;
		case 79: case 78: case 77: case 76: case 75:
		case 74: case 73: case 72: case 71: case 70:
		grade = 'C';
		break;
		default :
			grade = 'F';
			scanner.close();
		} // end of switch
		System.out.println("당신의 학점은 "+ grade +"입니다.");
	}
}
당신의 점수를 입력하세요.(1~100)>99
당신의 학점은 A입니다.

 

 

public class FlowEx10 {
	public static void main(String[] args) {
		int score = 0;
		char grade = ' ';
		
		System.out.println("당신의 점수를 입력하세요.(1~10)>");
		
		Scanner scanner = new Scanner(System.in);
		String tmp = scanner.nextLine();
		score = Integer.parseInt(tmp);
		
		switch(score/10) {
		case 10:
		case 9:
			grade = 'A';
			break;
		case 8:
			grade = 'B';
			break;
		case 7 :
			grade = 'C';
			break;
			default :
				grade = 'F';
		}// end of switch
		scanner.close();
		System.out.println("당신의 학점은 "+ grade +"입니다.");
	}//main의 끝
}
당신의 점수를 입력하세요.(1~10)>
5
당신의 학점은 F입니다.

 

 

 

public class FlowEx11 {
	public static void main(String[] args) {
		System.out.print("당신의 주민번호를 입력하세요. (011231-1111222)>");
		
		Scanner scanner = new Scanner(System.in);
		String regNo = scanner.nextLine();
		char gender = regNo.charAt(7);
		
		switch(gender) {
		case '1': case '3':
			switch(gender) {
			case '1':
				System.out.println("당신은 2000년 이전에 출생한 남자입니다.");
				break;
			case '3':
				System.out.println("당신은 2000년 이후에 출생한 남자입니다.");
			}
			break;
		case '2': case '4':
			switch(gender) {
			case '2':
				System.out.println("당신은 2000년 이전에출생한 여자입니다.");
				break;
			case '4':
				System.out.println("당신은 2000년 이후에 출생한 여자입니다.");
				break;
			}
			break;
			default:
				System.out.println("유효하지 않은 주민등록번호입니다.");

		}
		scanner.close();
	}//main의 끝
}
당신의 주민번호를 입력하세요. (011231-1111222)>354321-3205664
당신은 2000년 이후에 출생한 남자입니다.

 

 

public class FlowEx12 {
	public static void main(String[] args) {
		int i = 1;
		for (; i <= 5; i++) {
			System.out.println(i);// i의 값을 출력한다
		}

		for (; i <= 5;) {
			System.out.println(i);// i의 값을 출력한다
			i++;
		}

		for (; i <= 5; i++) {
			System.out.print(i);
		}

		System.out.println();
	}
}

 

 

 

public class FlowEx12 {
		public static void main(String[] args) {			
			for (int i = 1; i <= 5; i++) {
				System.out.println(i);
			}

			for (int i = 1; i <= 5; i++) {
				System.out.print(i);
			}

			System.out.println();
		}

	}
1
2
3
4
5
12345

 

 

 

public class FlowEx13 {
	public static void main(String[] args) {
		// 1부터 10까지의 합 구하기
		int sum = 0;	// 합계를 저장하기 위한 변수

		for (int i = 1; i <= 10; i++) {
			sum += i; //	sum = sum + i;
			System.out.printf("1부터 %d 까지의 합: %2d%n", i, sum);
		}
	}
}
1부터 1 까지의 합:  1
1부터 2 까지의 합:  3
1부터 3 까지의 합:  6
1부터 4 까지의 합: 10
1부터 5 까지의 합: 15
1부터 6 까지의 합: 21
1부터 7 까지의 합: 28
1부터 8 까지의 합: 36
1부터 9 까지의 합: 45
1부터 10 까지의 합: 55

 

 

 

public class FlowEx14 {
	public static void main(String[] args) {
		for (int i = 1, j = 10; i <= 10; i++, j--) { // 반복횟수 가급적 for문에서는 시작의 변수는 하나만
			System.out.printf("%d \t %d%n", i, j);
		}

		for (int i = 1; i <= 10; i++) {

		}

		for (int i = 0; i < 10; i++) {
			
		}
	}
}
1 	 10
2 	 9
3 	 8
4 	 7
5 	 6
6 	 5
7 	 4
8 	 3
9 	 2
10 	 1

 

 

public class FlowEx15 {
	public static void main(String[] args) {
//		 ctrl + F find/replace
		System.out.println("i \t 2*i \t 2*i-1 \t i*i \t 11-i \t i%3 \t i/3");
		System.out.println("--------------------------------------");
		
		for(int i=1;i<=10;i++)
			System.out.printf("%d \t %d \t %d \t %d \t %d \t %d \t %d%n ", i, 2*i, 2*i-1, i*i, 11-i, i%3, i/3);
	}
}
i 	 2*i 	 2*i-1 	 i*i 	 11-i 	 i%3 	 i/3
--------------------------------------
1 	 2 	 1 	 1 	 10 	 1 	 0
 2 	 4 	 3 	 4 	 9 	 2 	 0
 3 	 6 	 5 	 9 	 8 	 0 	 1
 4 	 8 	 7 	 16 	 7 	 1 	 1
 5 	 10 	 9 	 25 	 6 	 2 	 1
 6 	 12 	 11 	 36 	 5 	 0 	 2
 7 	 14 	 13 	 49 	 4 	 1 	 2
 8 	 16 	 15 	 64 	 3 	 2 	 2
 9 	 18 	 17 	 81 	 2 	 0 	 3
 10 	 20 	 19 	 100 	 1 	 1 	 3

 

 

public class FlowEx16 {
//반피라미드형
	public static void main(String[] args) {

		for (int i = 1; i <= 5; i++) {

			for (int j = 1; j <= i; j++) {
				
				System.out.printf("*");

			}
			System.out.println();
		}
	}

}
*
**
***
****
*****

 

 

public class FlowEx17 {
	public static void main(String[] args) {
		int num = 0;
		
		System.out.print("*을 출력할 라인의 수를 입력하세요.>");
		
		Scanner scanner = new Scanner(System.in);
		String tmp = scanner.nextLine();
		num = Integer.parseInt(tmp);
		
		for(int i =0; i<num;i++) {
			for(int j=0; j<=i;j++) {
				System.out.print("*");
			}
			System.out.println();
		}
		scanner.close();
	}
}
*을 출력할 라인의 수를 입력하세요.>10
*
**
***
****
*****
******
*******
********
*********
**********

 

 

public class FlowEx18 {
	public static void main(String[] args) {
		for(int i=2;i<=9;i++) {	//8
			for(int j=1;j<=9;j++) {	//9
				System.out.printf("%d x %d = %d%n", i, j, i*j); // 72
			}
		}
	}
}
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
4 x 7 = 28
4 x 8 = 32
4 x 9 = 36
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
6 x 5 = 30
6 x 6 = 36
6 x 7 = 42
6 x 8 = 48
6 x 9 = 54
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
8 x 1 = 8
8 x 2 = 16
8 x 3 = 24
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72
9 x 1 = 9
9 x 2 = 18
9 x 3 = 27
9 x 4 = 36
9 x 5 = 45
9 x 6 = 54
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81

 

 

 

public class FlowEx19 {
	public static void main(String[] args) {
		for(int i=1; i<=3;i++)
			for(int j=1;j<=3;j++)
				for(int k=1;k<=3;k++)
					System.out.println(""+i+j+k);
	}
}
111
112
113
121
122
123
131
132
133
211
212
213
221
222
223
231
232
233
311
312
313
321
322
323
331
332
333

 

 

 

public class FlowEx20 {
	public static void main(String[] args) {
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=5;j++) {
				System.out.printf("[%d,%d]",i,j);
			}
			System.out.println();
		}
	}
}
[1,1][1,2][1,3][1,4][1,5]
[2,1][2,2][2,3][2,4][2,5]
[3,1][3,2][3,3][3,4][3,5]
[4,1][4,2][4,3][4,4][4,5]
[5,1][5,2][5,3][5,4][5,5]

 

 

 

public class FlowEx21 {
	public static void main(String[] args) {
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=5;j++) {
				if(i==j) {
					System.out.printf("[%d,%d]",i,j);
				}else {
					System.out.printf("%5c",' ');
				}
			}
			System.out.println();
		}
	}
}
[1,1]                    
     [2,2]               
          [3,3]          
               [4,4]     
                    [5,5]

 

 

 

public class FlowEx22 {
	public static void main(String[] args) {
		int[] arr = {10,20,30,40,50};
		int sum = 0;
		
		for(int i=0;i<arr.length;i++)
			System.out.printf("%d ", arr[i]);
		System.out.println();
		
		for(int tmp : arr) {
			System.out.printf("%d ", tmp);
			sum +=tmp;
		}
		System.out.println();System.out.println("sum="+sum);
	}
}
10 20 30 40 50 
10 20 30 40 50 
sum=150

 

 

public class FlowEx23 {
	public static void main(String[] args) {
		int i = 5;

		while (i-- != 0) {
			System.out.println(i + " - I can do it.");
		}
	}	//main의 끝
}
4 - I can do it.
3 - I can do it.
2 - I can do it.
1 - I can do it.
0 - I can do it.

 

 

 

public class FlowEx24 {
	public static void main(String[] args) {
		int i = 11;

		System.out.println("카운트 다운을 시작합니다.");

		while (i-- != 0) {
			System.out.println(i);

			for (int j = 0; j < 2_000_000_000; j++) {	//슬립함수로 변형
				;
			}
		}
		System.out.println("GAME OVER");
	}
}
카운트 다운을 시작합니다.
10
9
8
7
6
5
4
3
2
1
0
GAME OVER

 

 

 

public class FlowEx25 {
	public static void main(String[] args) {
		int num = 0, sum = 0;
		System.out.print("숫자를 입력하세요. (예:12345)>");

		Scanner scanner = new Scanner(System.in);
		String tmp = scanner.nextLine();// 화면을 통해 입력받은 내용을 tmp에 저장;
		num = Integer.parseInt(tmp); // 입력받은 문자열(tmp)을 숫자로 변환

		while (num != 0) {
			// num을 10으로 나눈 나머지를 sum에 더함
			sum += num % 10; // sum = sum + num%10;
			System.out.printf("sum=%3d num%d%n", sum, num);

			num /= 10; // num = num / 10; num을 10으로 나눈값을 다시 num에 저장
		}

		System.out.println("각 자리수의 합:" + sum);
		scanner.close();
	}
}
숫자를 입력하세요. (예:12345)>123
sum=  3 num123
sum=  5 num12
sum=  6 num1
각 자리수의 합:6

 

 

public class FlowEx26 {
	public static void main(String[] args) {
		int sum = 0;
		int i	= 0;
		
		// i를 1씩 증가시켜서 sum에 계속 더해나간다.
		while((sum += ++i) <= 100) {
			System.out.printf("%d - %d%n", i, sum);
		}
	}//main의 끝
}
1 - 1
2 - 3
3 - 6
4 - 10
5 - 15
6 - 21
7 - 28
8 - 36
9 - 45
10 - 55
11 - 66
12 - 78
13 - 91

 

 

 

public class FlowEx27 {
	public static void main(String[] args) {
		int num;
		int sum = 0;
		boolean flag = true;	// while문의 조건식으로 사용될 변수
		Scanner scanner = new Scanner(System.in);
		
		System.out.println("합계를 구할 숫자를 입력하세요. (끝내려면 0을 입력)");
		
		while(flag) {	// flag의 값이 true이므로 조건식은 참이 된다.
			System.out.println(">>");
			
			String tmp = scanner.nextLine();
			num = Integer.parseInt(tmp);
			
			if(num!=0) {
				sum += num;	// num이 0이 아니면, sum에 더한다.
			}else {
				flag = false;	// num이 0이면, flag의 값을 flase로 변경.
			}
		}	// while문의 끝
		System.out.println("합계:"+sum);
		scanner.close();
	}
}
합계를 구할 숫자를 입력하세요. (끝내려면 0을 입력)
>>
55
>>
33
>>
78
>>
0
합계:166

 

 

 

public class FlowEx28 {
	public static void main(String[] args) {
		int input = 0, answer = 0;

		answer = (int) (Math.random() * 100) + 1; // 1~100사이의 임의의 수를 저장
		Scanner scanner = new Scanner(System.in);

		do {
			System.out.print("1과 100사이의 정수를 입력하세요.>");
			input = scanner.nextInt();

			if (input > answer) {
				System.out.println("더 작은 수로 다시 시도해보세요.");
			} else if (input < answer) {
				System.out.println("더 큰 수로 다시 시도해보세요.");
			}
		} while (input != answer);

		System.out.println("정답입니다.");
		scanner.close();
	}
}
1과 100사이의 정수를 입력하세요.>50
더 큰 수로 다시 시도해보세요.
1과 100사이의 정수를 입력하세요.>75
더 큰 수로 다시 시도해보세요.
1과 100사이의 정수를 입력하세요.>87
더 큰 수로 다시 시도해보세요.
1과 100사이의 정수를 입력하세요.>93
더 작은 수로 다시 시도해보세요.
1과 100사이의 정수를 입력하세요.>90
정답입니다.

 

 

 

public class FlowEx29 {
	public static void main(String[] args) {
		for (int i = 1; i <= 100; i++) {
			System.out.printf("i=%d ", i);

			int tmp = i;

			do {
				// tmp%10이 3의 배수인지 확인(0 제외)
				if (tmp % 10 % 3 == 0 && tmp % 10 != 0)
					System.out.print("짝");
				// tmp /=10은 tmp = tmp / 10과 동일

			} while ((tmp /= 10) != 0);

			System.out.println();
		}
	}
}
i=1 
i=2 
i=3 짝
i=4 
i=5 
i=6 짝
i=7 
i=8 
i=9 짝
i=10 
i=11 
i=12 
i=13 짝
i=14 
i=15 
i=16 짝
i=17 
i=18 
i=19 짝
i=20 
i=21 
i=22 
i=23 짝
i=24 
i=25 
i=26 짝
i=27 
i=28 
i=29 짝
i=30 짝
i=31 짝
i=32 짝
i=33 짝짝
i=34 짝
i=35 짝
i=36 짝짝
i=37 짝
i=38 짝
i=39 짝짝
i=40 
i=41 
i=42 
i=43 짝
i=44 
i=45 
i=46 짝
i=47 
i=48 
i=49 짝
i=50 
i=51 
i=52 
i=53 짝
i=54 
i=55 
i=56 짝
i=57 
i=58 
i=59 짝
i=60 짝
i=61 짝
i=62 짝
i=63 짝짝
i=64 짝
i=65 짝
i=66 짝짝
i=67 짝
i=68 짝
i=69 짝짝
i=70 
i=71 
i=72 
i=73 짝
i=74 
i=75 
i=76 짝
i=77 
i=78 
i=79 짝
i=80 
i=81 
i=82 
i=83 짝
i=84 
i=85 
i=86 짝
i=87 
i=88 
i=89 짝
i=90 짝
i=91 짝
i=92 짝
i=93 짝짝
i=94 짝
i=95 짝
i=96 짝짝
i=97 짝
i=98 짝
i=99 짝짝
i=100

 

 

 

public class FlowEx30 {
	public static void main(String[] args) {
		int sum = 0;
		int i = 0;
		
		while(true) {
			if(sum > 100)
				break;
			++i;
			sum +=i;
		}// end of while
		
		System.out.println("i=" + i);
		System.out.println("sum=" + sum);
	}
}
i=14
sum=105

 

 

 

public class FlowEx31 {
	public static void main(String[] args) {
		for (int i = 0; i <= 10; i++) {
			if (i % 3 == 0)
				continue;
			System.out.println(i);
		}
	}
}
1
2
4
5
7
8
10

 

 

 

public class FlowEx32 {
	public static void main(String[] args) {
		int menu = 0;
//		int num = 0;

		Scanner scanner = new Scanner(System.in);

		while (true) {
			System.out.println("(1) square");
			System.out.println("(2) square root");
			System.out.println("(3) log");
			System.out.println("원하는 메뉴(1~3)를 선택하세요. (종료:0)>");

			String tmp = scanner.nextLine();// 화면에서 입력받은 내용을 tmp에 저장
			menu = Integer.parseInt(tmp);

			if (menu == 0) {
				System.out.println("프로그램을 종료합니다.");
				break;
			} else if (!(1 <= menu && menu <= 3)) {
				System.out.println("메뉴를 잘못 선택하셨습니다.(종료는 0)");
				continue;
			}

			System.out.println("선택하신 메뉴는 " + menu + "번입니다.");
		}
		scanner.close();
	}
}
(1) square
(2) square root
(3) log
원하는 메뉴(1~3)를 선택하세요. (종료:0)>
1
선택하신 메뉴는 1번입니다.
(1) square
(2) square root
(3) log
원하는 메뉴(1~3)를 선택하세요. (종료:0)>
0
프로그램을 종료합니다.

 

 

 

public class FlowEx33 {
	public static void main(String[] args) {
		// for문에 Loop1이라는 이름을 붙였다.
//		Loop1:
			for (int i = 2; i <= 9; i++) {
			for (int j = 1; j <= 9; j++) {
				if (j == 5)
//					break Loop1;
//				break;
//				continue Loop1;
				continue;
				System.out.println(i + "*" + j + "=" + i * j);
			} // end of for i
			System.out.println();
		} // end of Loop1
	}
}
2*1=2
2*2=4
2*3=6
2*4=8
2*6=12
2*7=14
2*8=16
2*9=18

3*1=3
3*2=6
3*3=9
3*4=12
3*6=18
3*7=21
3*8=24
3*9=27

4*1=4
4*2=8
4*3=12
4*4=16
4*6=24
4*7=28
4*8=32
4*9=36

5*1=5
5*2=10
5*3=15
5*4=20
5*6=30
5*7=35
5*8=40
5*9=45

6*1=6
6*2=12
6*3=18
6*4=24
6*6=36
6*7=42
6*8=48
6*9=54

7*1=7
7*2=14
7*3=21
7*4=28
7*6=42
7*7=49
7*8=56
7*9=63

8*1=8
8*2=16
8*3=24
8*4=32
8*6=48
8*7=56
8*8=64
8*9=72

9*1=9
9*2=18
9*3=27
9*4=36
9*6=54
9*7=63
9*8=72
9*9=81

 

 

 

import java.util.*;

public class FlowEx34 {
	public static void main(String[] args) {
		int menu = 0, num = 0;
		
		Scanner scanner = new Scanner(System.in);
		
		outer:
			while(true) {
				System.out.println("(1) square");
				System.out.println("(2) square root");
				System.out.println("(3) log");
				System.out.println("원하는 메뉴(1~3)를 선택하세요.(종료0)>");
				
				String tmp = scanner.nextLine();	// 화면에서 입력받은 내용을 tmp에 저장
				menu = Integer.parseInt(tmp);		// 입력받은 문자열(tmp)를 숫자로 변환
				
				if(menu==0) {
					System.out.println("프로그램을 종료합니다.");
					break;
				}else if (!(1<= menu && menu <=3)) {
					System.out.println("메뉴를 잘못 선택하셨습니다.(종료는0)");
					continue;
				}
				
				for(;;) {
					System.out.print("계산할 값을 입력하세요.(계산 종료:0, 전체 종료:99)>");
					tmp = scanner.nextLine();		// 화면에서 입력받은 내용을 tmp에 저장
					num = Integer.parseInt(tmp);	// 입력받은 문자열(tmp)를 숫자로 변환
					
					if(num==0)
						break;
					
					if(num==99)
						break outer;
					
					switch(menu) {
					case 1:
						System.out.println("result="+ num*num);
						break;
					case 2:
						System.out.println("result="+ Math.sqrt(num));
						break;
					case 3:
						System.out.println("result="+ Math.log(num));
						break;
					}
				} // for(;;)
			} // while의 끝
	}// main의 끝

}
(1) square
(2) square root
(3) log
원하는 메뉴(1~3)를 선택하세요.(종료0)>
1
계산할 값을 입력하세요.(계산 종료:0, 전체 종료:99)>25
result=625
계산할 값을 입력하세요.(계산 종료:0, 전체 종료:99)>0
(1) square
(2) square root
(3) log
원하는 메뉴(1~3)를 선택하세요.(종료0)>
2
계산할 값을 입력하세요.(계산 종료:0, 전체 종료:99)>25
result=5.0
계산할 값을 입력하세요.(계산 종료:0, 전체 종료:99)>0
(1) square
(2) square root
(3) log
원하는 메뉴(1~3)를 선택하세요.(종료0)>
3
계산할 값을 입력하세요.(계산 종료:0, 전체 종료:99)>100
result=4.605170185988092
계산할 값을 입력하세요.(계산 종료:0, 전체 종료:99)>99

 

 

if문은 조건이 많아질수록 else-if문을 계속 추가해야 하므로 조건식이 많아져서 복잡해지고, 여러 개의 조건식을 계산해야 하므로 처리시간도 많이 걸린다.

switch문은 단 하나의 조건으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하므로 알아보기 쉽다.

 

switch문의 연산방식

1. 조건식을 계산한다.
2. 조건식의 결과와 일치하는 case문으로 이동한다.
3. 이후의 문장들을 수행한다.
4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.
switch문의 제약조건

1. switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
2. case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.

 

 

 

 

public class FlowEx07 {
	public static void main(String[] args) {
		System.out.print("가위(1),바위(2),보(3) 중 하나를 입력하세요.>");
		
		Scanner scanner = new Scanner(System.in);
		int user = scanner.nextInt();
		int com = (int)(Math.random() * 3) +1;
		
		System.out.println("당신은 "+ user +"입니다.");
		System.out.println("컴은 "+ com +"입니다.");
		
		switch(user-com) {
		case 2: case -1:
			System.out.println("당신이 졌습니다.");
			break;
		case 1: case -2:
			System.out.println("당신이 이겼습니다.");
			break;
		case 0:
			System.out.println("비겼습니다.");
			break;
		}
		scanner.close();
	}//main의 끝
}
실행결과1

가위(1),바위(2),보(3) 중 하나를 입력하세요.>1
당신은 1입니다.
컴은 1입니다.
비겼습니다.
실행결과2

가위(1),바위(2),보(3) 중 하나를 입력하세요.>2
당신은 2입니다.
컴은 1입니다.
당신이 이겼습니다.

만약 if문으로 하면 중첩if문 3개를 사용했어야 했겠지만, switch조건문을 사용하면 switch한개로 처리가 된다.

 

 

switch문의 중첩

if문처럼 switch문도 중첩이 가능하다.

public class FlowEx11 {
	public static void main(String[] args) {
		System.out.print("당신의 주민번호를 입력하세요. (011231-1111222)>");
		
		Scanner scanner = new Scanner(System.in);
		String regNo = scanner.nextLine();
		char gender = regNo.charAt(7);
		
		switch(gender) {
		case '1': case '3':
			switch(gender) {
			case '1':
				System.out.println("당신은 2000년 이전에 출생한 남자입니다.");
				break;
			case '3':
				System.out.println("당신은 2000년 이후에 출생한 남자입니다.");
			}
			break;
		case '2': case '4':
			switch(gender) {
			case '2':
				System.out.println("당신은 2000년 이전에출생한 여자입니다.");
				break;
			case '4':
				System.out.println("당신은 2000년 이후에 출생한 여자입니다.");
				break;
			}
			break;
			default:
				System.out.println("유효하지 않은 주민등록번호입니다.");

		}
		scanner.close();
	}//main의 끝
}

방법은 if문이랑 큰 차이가 없다.

만약 이걸 if문으로 적으려고 했으면 보기도 힘들어질 것이다.

'JAVA 04강 조건문과 반복문 > 조건문 if, switch' 카테고리의 다른 글

if, if else조건문  (0) 2021.07.14

조건문은 조건식과 문장을 포함하는 블록{}으로 구성되어 있으며,

조건식의 연산 결과에 따라 실행할 문장이 달라져서 프로그램의 실행 흐름을 변경할 수 있다.

주로 if문이 많이 사용된다.

처리할 경우의 수가 많을 때는 if문보다 switch문이 효율적이다.

 

if문

if문의 조건식이 참(true)이면 괄호{} 안의 문장들을 수행한다.

if (조건식) {
	//조건식이 참(true)일 때 수행될 문장들을 적는다.
}

 

if문에 사용되는 조건식은 일반적으로 비교연산자와 논리 연산자로 구성된다. 

비교 연산자와 논리 연산자는 값이 boolean 타입으로 나온다.

 

if문에 들어가는 조건식

	public static void main(String[] args) {
		int x = 0;
		System.out.printf("x=%d 일 때, 참인 것은%n", x);

		if (x == 0)
			System.out.println("x==0");
		if (x != 0)
			System.out.println("x!=0"); // f
		if (!(x == 0))
			System.out.println("!(x==0)"); // f
		if (!(x != 0))
			System.out.println("!(x!=0)");
            }
     }
x=0 일 때, 참인 것은
x==0
!(x!=0)

if (x != 0)이 조건으로 들어간 식과 if (!(x == 0))이 조건으로 들어간 식은 실행이 안 되는 것을 확인할 수 있다.

 

블록{ }

{ }를 이용해서 여러 가지 문장을 하나의 단위로 묶을 수 있으며, if의 조건문이 참일 때 같이 실행이 된다.

if(score > 60) 
블럭의 시작{
	System.out.printlm("합격입니다.");
	System.out.printlm("축하드립니다.");
	} if문 블럭의 끝
합격입니다.
축하드립니다.

만약 블럭{ }이 없었다면 합격입니다. 만 if문에 의해 출력이 되고 축하드립니다는 블록을 벗어날 것이다.

블록이 없다면 score의 점수가 60이 안됬을 때 그냥 축하드립니다만 출력이 된다.

합격점수가 안됐는데 축하한다니 인성에 의문을 가지게 되는 코드가 되는 것이다.

 

if-else문

if-else문은 if문에 else가 추가된 것이다.

if (조건식) {
	조건식이 참(true)일 때 수행될 문장들을 적는다.
    } else {
    조건식이 거짓(false)일 때 수행될 문장들을 적는다.
    }

if-else는 if문을 두 개 써야 하는 것보다 조금 더 쉽게 접근할 수 있게 한다.

익숙해지면 if문을 두 개 쓰는 것보다 if else문이 더 보기 편해진다.

 

if-else if문

if-else문은 두 가지 경우 중 하나가 수행되는 구조인데, 처리해야 할 경우의 수가 셋 이상인 경우에는 if를 더 붙여서 쓰면 된다.

if (조건식1) {
	//조건식1의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식2) {
	//조건식2의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식3) {
	//조건식3의 연산결과가 참일 때 수행될 문장들을 적는다.
} else {
	//어느 조건도 만족하지 않을 때 수행될 문장들을 적는다.
}

 

결과가 참인 조건식을 만날 때까지 코드를 실행한다.

참인 조건식을 만나면 해당 블록{}을 수행한다.

if-else if문 전체를 빠져나온다.

 

public class FlowEx04 {
	public static void main(String[] args) {
		int score = 0;
		char grade = ' ';

		System.out.print("점수를 입력하세요.>");
		Scanner scanner = new Scanner(System.in);
		score = scanner.nextInt();

		if (score >= 90) {
			grade = 'A';
		} else if (score >= 80) {
			grade = 'B';
		} else if (score >= 70) {
			grade = 'C';
		} else {
			grade = 'D';
		}


		System.out.println("당신의 학점은 "+ grade +"입니다.");
		scanner.close();
	}
}
점수를 입력하세요.>90
당신의 학점은 A입니다.

중첩 if문

if문의 블럭 내에 또 다른 if문을 포함시키는 것이 가능한데 이것을 중첩 if문이라고 부르며 중첩의 횟수에는 거의 제한이 없다.

 

public class FlowEx05 {
	public static void main(String[] args) {
		int score = 0;
		char grade = ' ', opt = '0';

		System.out.print("점수를 입력해주세요.>");

		Scanner scanner = new Scanner(System.in);
		score = scanner.nextInt();

		System.out.printf("당신의 점수는 %d입니다.%n", score);

		if (score >= 90) {
			grade = 'A';
			if (score >= 98) {
				opt = '+';
			} else if (score < 94) {
				opt = '-';
			}
		} else if (score >= 80) {
			grade = 'B';
			if (score >= 88) {
				opt = '-';
			}
		} else {
			grade = 'C';
		}
		System.out.printf("당신의 학점은 %c%c입니다.%n", grade, opt);
		scanner.close();
	}
}
점수를 입력해주세요.>88
당신의 점수는 88입니다.
당신의 학점은 B-입니다.

위의 예제는 모두 3개의 if문으로 이루어져 있으며 중첩 if문이다.

if(학점 입력) { if(90점 이상일 시) else if (80점 이상일 시) else(그 외)}

 

'JAVA 04강 조건문과 반복문 > 조건문 if, switch' 카테고리의 다른 글

switch조건문  (0) 2021.07.15

조건 연산자? :

조건 연산자는 조건식, 식 1, 식 2 모두 세 개의 피연산자를 필요로 하는 삼항 연산자이며,

삼항 연산자는 조건 연산자 하나뿐이다.

 

(조건식)? (참이면 반환) : (거짓이면 반환)

 

public class OperatorEx32 {
	public static void main(String[] args) {
		int x, y, z;
		int absX, absY, absZ;
		char signX, signY, signZ;
		
		x = 10;
		y = -5;
		z = 0;
		
		absX = x >= 0 ? x : -x; // x의 값이 음수이면, 양수로 만든다.
		absY = y >= 0 ? y : -y;
		absZ = z >= 0 ? z : -z;
		
		signX = x > 0 ? '+' : (x==0 ? ' ' : '-'); //조건 연산자를 중첩
		signY = y > 0 ? '+' : (y==0 ? ' ' : '-');
		signZ = z > 0 ? '+' : (z==0 ? ' ' : '-'); 
		
		System.out.printf("x=%c%d%n", signX, absX);
		System.out.printf("y=%c%d%n", signY, absY);
		System.out.printf("z=%c%d%n", signZ, absZ);
		
	}

}
x=+10
y=-5
z= 0

 

대입 연산자 = op=

대입 연산자는 변수와 같은 저장공간에 값 또는 수식의 연산 결과를 저장하는 데 사용된다.

특이한 점은 연산 진행방향이 오른쪽에서 왼쪽이다.

대입 연산자의 왼쪽 피연산자를 lvalue(left value)이라 하고, 오른쪽 피연산자를'rvalue(right value)라고 한다.

 

복합 대입 연산자

대입 연산자는 다른 연산자(op)와 결합하여 op=과 같은 방식으로 사용될 수 있다.

 

op= =
i +=3; i = i + 3;
i -= 3; i = i - 3;
i *= 3; i = i * 3;
i /= 3; i = i / 3;
i %= 3; i = i % 3;
i <<= 3; i = i << 3;
i >>= 3; i = i >> 3;
i &= 3; i = i & 3;
i ^= 3; i = i ^ 3;
i |= 3; i = i | 3;

+ Recent posts