
While문
언제 종료될지 모를 때
한번 실행되면 종료되지 않음
예시) 한번 전구를 키면 엄청 빠른 속도로 깜빡거림. 끝이 없음
데몬 프로세스 : 계속 돌아가는 것
인터럭트 : 데몬을 종료 / 데몬이 실행되고 있을때 방해하는 것
자바의 break
package ex03;
import java.util.Scanner;
public class NestedWhile {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //이미 만들어져있으니 재사용하면 됨
//잘라내기 했을때 오류가 나는것 : 드래그를 잘못한 것
while(true){ //조건식을 넣는것보다 이게 나음
System.out.print("정수를 입력하시오: "); //반복의 시작점
int number = sc.nextInt();
if(number > 0){
System.out.println("양수입니다.");
} else if(number == 0){
System.out.println("0입니다.");
} else{
System.out.println("음수입니다.");
}
}
}
}

Break
package ex03;
import java.util.Scanner;
public class NestedWhile {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //이미 만들어져있으니 재사용하면 됨
//잘라내기 했을때 오류가 나는것 : 드래그를 잘못한 것
while(true){
System.out.print("정수를 입력하시오: "); //반복의 시작점
int number = sc.nextInt();
if(number == 99){
break;
}
if(number > 0){
System.out.println("양수입니다.");
} else if(number == 0){
System.out.println("0입니다.");
} else{
System.out.println("음수입니다.");
}
}
}
}

반복문을 빠져나가는 것
Continue
package ex03;
import java.util.Scanner;
public class NestedWhile {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //이미 만들어져있으니 재사용하면 됨
//잘라내기 했을때 오류가 나는것 : 드래그를 잘못한 것
while(true){
System.out.print("정수를 입력하시오: "); //반복의 시작점
int number = sc.nextInt();
if(number == 99){
continue;
}
if(number > 0){
System.out.println("양수입니다.");
} else if(number == 0){
System.out.println("0입니다.");
} else{
System.out.println("음수입니다.");
}
}
}
}

밑에 코드가 실행되는 것이 아니라 반복문으로 돌아가는 것
For문
종료시점을 알고 있을 때
끝이 정해져 있는 것
예시) 전자레인지에서 음식을 돌리고 종료됨
for(초기식; 조건식; 증감식)
증감식 : i++ 와 i=i+1은 같음
문자열 + 숫자 → 문자열숫자로 결합됨
package ex03;
public class ForExample1 {
public static void main(String[] args) {
for(int i = 0; i <5; i++){
System.out.println("i의 값은: " + i);
}
}
}

연습문제
1) 정수의 합 계산하기
간단한 예로 1부터 10까지의 정수를 더하여 합을 구하는
프로그램 작성하기
package ex03;
public class Sum {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i < 11 ; i++) {
sum += i;
}
System.out.println("1부터 10까지의 정수의 합 = " + sum);
}
}

2) 팩토리얼 계산하기
팩토리얼 값을 계산해보자.
팩토리얼이란 다음과 같이 정의된다.
n! = 1 * 2 * 3 * … * n
package ex03;
import java.util.Scanner;
public class Factorial {
public static void main(String[] args) {
long fac = 1;
//1. 정수 입력받기
System.out.print("정수를 입력하시오: ");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//2. 반복문으로 팩토리얼 만들기
for (int i = 1; i < n; i++) {
fac = fac * i;
}
System.out.printf("%d!은 %d입니다.\n", n, fac);
}
}

3) 약수 계산하기
사용자로부터 양의 정수를 입력받아서 그 정수의 모든 약수를 출력하는 프로그램을 작성하여 보자.
package ex03;
import java.util.Scanner;
public class Divisor {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//1. 양의 정수 입력받기
System.out.print("양의 정수를 입력하시오: ");
int n = sc.nextInt();
//2. 약수 안내하기
System.out.println(n + "의 약수는 다음과 같습니다.");
//3.반복문으로 약수 만들기
for (int i = 1; i <= n; i++) {
//약수 정의하기
if (n % i == 0) {
System.out.print(" " + i);
}
}
}
}

4) -1의 값이 입력될 때까지 합계 계산하기
while 문은 조건을 반복할때 사용된다.
-1의 값이 입력될 때까지, 사용자가 입력한 정수의 합계를
계산하여 출력하는 프로그램 작성하기
package ex03;
import java.util.Scanner;
public class GetSum {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sum = 0;
int value = 0;
while(true){
sum = sum + value;
System.out.print("정수를 입력하시오: ");
value = sc.nextInt();
if(value == -1){
break;
}
}
System.out.println("정수의 합은 " + sum + "입니다.");
}
}

5) 사각형 모양 출력하기
중첩 반복문은 실제 프로그래밍에서 많이 나오는 형태로
특히 사각형과 비슷한 데이터를 처리하는 데 유용하다.
다음 예제는 *기호를 사각형 모양으로 출력한다.
package ex03;
public class NestedLoop {
public static void main(String[] args) {
//1. *이 반복되는 줄 만들기
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 10; j++) {
System.out.print("*");
}
System.out.println("");
}
}
}

6) 점수 평균 구하기
사용자가 입력한 점수들의 평균을 내는 프로그램을 작성한다.
만약 사용자가 음수를 입력하면
break에 의하여 반복 루프가 종료되게 한다.
package ex03;
import java.util.Scanner;
public class Averager {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int total = 0;
int count = 0;
while(true) {
//1. 점수 입력받기
System.out.print("점수를 입력하시오: ");
int grade = sc.nextInt();
//2. 음수일때 브레이크 걸기
if(grade < 0){
break;
}
//3. 점수들의 총합내기
total += grade;
count++;
}
//4. 평균 출력하기
System.out.println("평균은 " + total / count);
}
}

구구단(이중 for문)
1) 2~9단까지 출력되는 프로그램 만드시오.
package ex03;
import java.util.Scanner;
public class GugudanEx01 {
public static void main(String[] args) {
for (int i = 2; i < 10; i++) {
System.out.println("==================");
System.out.println(i + "단");
for (int j = 1; j < 10; j++) {
System.out.println(i + "x" + j + "=" + (i * j));
}
}
}
}

2) 스캐너를 이용하여 입력 받은 단만 출력하시오.
package ex03;
import java.util.Scanner;
public class GugudanEx02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("몇 단 : " );
int i = sc.nextInt();
System.out.println(i + "단");
for (int j = 1; j < 10; j++) {
System.out.println(i + "x" + j + "=" + (i * j));
if(j == 9){
break;
}
}
}
}

3) “\t”을 사용하여 가로로 출력하기
package ex03;
public class GugudanEx03 {
public static void main(String[] args) {
for (int j = 1; j < 10; j++) {
for (int i = 2; i <= 9; i++) {
System.out.print(i + "*" + j + "=" + i*j + "\t");
}
System.out.println(); // 줄 바꿈
}
}
}

package ex03;
public class GugudanEx03 {
public static void main(String[] args) {
// 각 단의 헤더 출력
for (int i = 2; i <= 9; i++) {
System.out.print(i + "단\t\t\t");
}
System.out.println(); // 줄 바꿈
// 각 단의 곱셈 결과를 가로로 출력
for (int i = 1; i <= 9; i++) {
for (int j = 2; j <= 9; j++) {
System.out.printf("%d * %d = %2d\t", j, i, (i * j));
}
System.out.println(); // 한 행이 끝나면 줄 바꿈
}
}
}

Share article