본문 바로가기
Programming/Java

[JAVA] 제어문

by 공부합시다홍아 2023. 10. 26.
제어문

조건문 / 반복문 / 탈출문
조건문

특정 조건을 만족할 때 실행할 문장을 작성하는데 사용한다.

  • 조건문 if ~ else
    • if문은 프로그램의 흐름을 바꾸는데 사용되는 조건 선택 분기문입니다.
    • if문의 조건식 결과는 반드시 boolean형이어야 합니다.
    • 조건식이 참이면 if문 블록안의 실행문이 실행되고, 거짓이면 else문 블록안의 실행문이 실행됩니다.
    • if문장은 else문장 없이 사용할 수 있습니다. 그러나 else문장은 if문장 없이 단독으로 사용할 수 없습니다.
    • 조건식의 결과가 거짓일 때 실행할 문장이 없다면, else문 이하를 생략해도 됩니다.
if(조건식) {
        소스코드
} else {
        소스코드
}
package javaquiz;

import java.util.Scanner;

public class Test02 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("바구니의 크기를 입력하세요 : ");
		int a = sc.nextInt();
		
		System.out.print("사과의 개수를 입력하세요 : ");
		int b = sc.nextInt();
		
		System.out.println("사과의 개수 : "+ b);
		
		int c = (int)(b / a);
		
		if( b%a == 0) {
			System.out.println("바구니는" + (int)c + " 개 필요해요.");
		}else {
			System.out.println("바구니는" + (int)(c + 1) + " 개 필요해요.");
		}
	
		sc.close();
				
	}

}

 

설명
b 값에서 a 값을 나눈 나머지가 0이라면 몫을 출력하고
나머지가 0이 아니라면 1을 더하여 출력한다.

 

package day02;

public class test03 {

	public static void main(String[] args) {
		
		int point = (int)(Math.random() * 100)+1;
		
		if(point >= 60) {
		System.out.println("점수 : " + point + " 입니다. 합격입니다." );
		}else {
			System.out.println("점수 : " + point + " 입니다. 불합격입니다." );
		}
	}

}

 

랜덤변수를 입력받아, 합격인지 불합격인지 확인


  • 다중 분기 조건문 if ~ else if ~ else
    • 여러 조건들을 설정할 때 사용하는 조건문입니다.
    • if ~ else if 구문은 위에서부터 차례대로 조건을 검색하면서 내려오므로 조건식 설정에 주의를 해야 합니다.
if ( 조건식 ) {
} else if ( 조건식 ) {

.
.
.
} else {
}

 

public class test04 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.print("점수를 입력하세요 : ");
		
		int point = sc.nextInt();
		
		if(point >= 90) {
			System.out.println("A학점입니다.");
		}else if(point >= 80) {
			System.out.println("B학점입니다.");
		}else if(point >= 70) {
			System.out.println("C학점입니다.");
		}else if(point >= 60) {
			System.out.println("D학점입니다.");
		}else if(point < 60) {
			System.out.println("F학점입니다.");
		}
		

	}

}


예제 - 입력한 두 수를 비교하여, 더 큰 값을 출력하시오.

import java.util.Scanner;

public class test06 {

	public static void main(String[] args) {
		
		//정수 2개 입력받아, 큰 수를 출력
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("첫 번째 수 :");
		int a = sc.nextInt();
		
		System.out.print("두 번째 수 :");
		int b = sc.nextInt();
		
		if(a>b) {
			System.out.println("큰 수 : " + a);
		}else if(a==b) {
			System.out.println("수가 동일합니다.");
		}else {
			System.out.println("큰 수 : " + b);
		}
		sc.close();
	}

}


Switch ~ Case 문

복합 if문은 구현하기 복잡하고 프로그램의 효율성이 감소되는 단점이 존재한다.

  • 다중 분기 문제를 해결할 때는 switch문을 사용한다.
  • switch문은 다중 분기 구조이므로 복합 if문의 논리적인 구조를 간결하게 표현할 수 있다.
  • if문과는 달리 조건식이 사용되지 않고, 값을 가지는 변수 또는 표현식이 판단조건으로 사용된다.
  • 연산 결과의 데이터 타입은 int, String, Enum(열거형)이 사용된다.
  • case문 뒤에 사용되는 값은 변수를 사용할 수 없고, 반드시 상수를 사용해야 합니다.
  • switch ~ case문에서 default는 if~else에서 else와 비슷한 효과를 가집니다.
public class Main {

	public static void main(String[] args) {

		int a = 2;
		
		switch(a) {
		
		case 1:
			System.out.println("1번 실행");
			break;
			
		case 2:
			System.out.println("2번 실행");
			
		case 3:
			System.out.println("3번 실행");
			
		case 4:
			System.out.println("4번 실행");
		}
		
	}

}


import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		System.out.println("[사칙연산을 하는 프로그램입니다.]");
		
		System.out.print("첫 번째 정 수 : ");
		int a = sc.nextInt();
		
		System.out.print("연산을 선택하세요. [+, -, *, /] : ");
		String b = sc.next();
		
		System.out.print("두 번째 정 수 : ");
		int c = sc.nextInt();
		
		
		switch(b) {
			
		case "+":
			System.out.println("두 수의 덧셈은 : " + a+c);
			break;
			
		case "-":
			System.out.println("두 수의 뺼셈은 : " + (int)(a-c));
			break;
			
		case "*":
			System.out.println("두 수의 곱셈은 : " + a*c);
			break;
			
		case "/":
			System.out.println("두 수의 나눗은 : " + a/c);
			break;
		}
	}	
}


반복문(while)

여러 번 반복 실행할 코드가 있다면 반복문을 작성한다.
  • while문은 조건식을 만족하는 동안 반복문을 실행하는데, 조건식을 검사해서 조건식이 참(True)이면 실행문을 반복하고, 거짓이면 while문을 빠져나옵니다.
  • while문에 들어가는 조건식도 if문과 마찬가지로 반드시 boolean타입으로 결과를 반환해야 합니다.
  • 조건식 안에 true를 넣으면 무한루프가 발생하기 때문에 반드시 탈출구문을 넣어야 합니다.
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {


		Scanner sc = new Scanner(System.in);
		
		System.out.print("첫 번째 수를 입력하세요 : ");
		int a = sc.nextInt();
		
		System.out.print("두 번째 수를 입력하세요 : ");
		int b = sc.nextInt();
		
		int result = a*b;
		
		while(a<10) {
			
			
			while(b<10) {
				System.out.println(a + " x " + b + "=" + result);
				b++;
			}
			a++;
		}

	}

}


import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		// 입력받은 수가 소수인지 판별하는 간단한 방법
		Scanner sc = new Scanner(System.in);
		
		System.out.print("소수 판별을 원하는 수를 입력하세요 : ");
		
		int a = sc.nextInt();
		
		int b = 2;

		while(a % b != 0) {
			
			b++;
			
		}
		
		if(a == b) {
			System.out.println("소수입니다.");
		}else {
			System.out.println("소수가 아니다.");
		}
  
	}

}

While문을 이용하여 입력받은 값까지의 합 구하기
1~100까지의 정수 중에서 짝수만 가로로 출력하기
1000의 약수 개수 구하기
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// 1. 어떤 수를 입력받아, 1에서 입력받은 수까지의 합을 구하시오.
		// 2. 1~100까지 정수 중에서 짝수만 가로로 출력하시오.
		// 3. 1000의 약수의 개수
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("첫 번째 문제");
		System.out.print("정수를 입력하세요 : ");
		int a = sc.nextInt();
		int b = 1;
		int sum = 0;
		
		while(b<a+1) {
			
			sum += b;
			b++;
		}
		
		System.out.println("입력받은 수까지의 합은 " + sum + "입니다.");
		
		System.out.println("---------------------------------------");
		
		int c = 1;
		while(c<100) {
			if(c%2 == 0) {
				System.out.print(c + " ");
			}
			c++;
		}
		
		System.out.println();
		System.out.println("----------------------------------------");
		
		int d = 1;
		int sum1 = 0;
		
		while(d <= 1000) {
			if(1000 % d == 0) {
				System.out.print(d + " ");
				sum1 += d;
			}
			d++;
		}
		System.out.print(" >>> ");
		System.out.println("1000의 약수의 합 : " + sum1);
	}

}


import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		// 정수를 입력받아, 입력한 수의 약수의 합계를 출력한다.
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수를 입력하세요 : ");
		int a = sc.nextInt();
		int i = 1;
		int sum = 0;
		
		while(i <= a) {
			if(a%i==0) {
				System.out.print(i + " ");
				sum += i;
			}
			i++;
		}
		System.out.println("\n" + sum);
	}

}


Do - While 문
  • do 이하의 구문이 먼저 실행된 뒤에 조건식을 검사하므로 결과가 true이든 false이든 무조건 한번은 실행한다.
  • 조건식의 결과에 상관없이 루프를 반드시 한번 이상 실행시키도록 할 때 사용한다.
do {

} while()
public class Main{

	public static void main(String[] args) {
		
		int x = 100;
		int sum2 = 0;
		
		do {
			sum2 += x;
			
			x++;
		}while(x<=10);
		
		System.out.println(sum2);

	}

}

for 문
  • 제어조건을 한꺼번에 지정한다는 점이 다른 반복문과는 다르다.
  • 정확한 반복 횟수를 알고 있을 때는 for문이 while문보다 유용하다.
  • 다른 제어문과 같이 실행문장이 한줄이면 블록 {}을 생략할 수 있다.

< for문의 구조 >

for(초기값; boolean형 조건식; 반복 표현식) {
          반복할 실행문;
}

향상된 for 루프 (Enhanced for loop)
  • 배열 및 컬렉션에 들어있는 모든 원소들에 대한 반복 작업을 매우 쉽게 처리가 가능하다.
for(배열의 값을 담을 변수 : 배열의 이름) {
           실행문;
}

숫자 내림차순으로 출력하기

public class Main {

	public static void main(String[] args) {


		int sum = 0;
		for(int i=10; i>0; i--) {
			System.out.println(i);
		}
		
	}
}


[랜덤한 숫자를 입력받아 구구단 거꾸로 출력하기]

public class Main{

	public static void main(String[] args) {
		
		int gu = (int)(Math.random() * 9) + 1;
		
		
		System.out.println("구구단 " + gu + " 단");
		for(int i=9; i>0; i--) {
			
			System.out.println(gu + " x " + i + " = " + gu * i);
			
		}

	}

}


[ 배수 출력하기 ]

for(int i=7; i<100; i++) {
		if( i % 7 == 0) {
			System.out.print(i + " ");
		}
	}

[ 두 수 사이의 합 출력하기 ]

int sum = 0;
for(int j = 50; j<=100; j++) {
		sum += j;
}

[4의 배수이면서 8의 배수가 아닌 값 출력하기]

for(int k=0; k<200; k++) {
	if(k % 4 == 0 && k % 8 != 0) {
		System.out.print(k + " ");
	}
}

[ A~Z 까지 문자열 출력하기 ]

for(char a = 'A'; a<='Z'; a++ ) {
	System.out.print(a);
}

for(int b =65; b<=90; b++) {
	System.out.print((char)(b)+ " ");
}


 

728x90

'Programming > Java' 카테고리의 다른 글

반복문을 이용한 별만들기  (0) 2023.10.31
[JAVA] 배열  (0) 2023.10.30
[JAVA] 배열과 입력  (2) 2023.10.26
[JAVA] 연산자  (0) 2023.10.25
[JAVA] 데이터 타입과 형변환  (0) 2023.10.25