개발 공부 기록

[java실습문제] 반복문 for, while 본문

실습 문제/java

[java실습문제] 반복문 for, while

좨랭이 2021. 9. 21. 14:55

문제1

public void practice1() {
//		사용자로부터 한 개의 값을 입력 받아 1부터 그 숫자까지의 숫자들을 모두 출력하세요.
//		단, 입력한 수는 1보다 크거나 같아야 합니다.
//		만일 1 미만의 숫자가 입력됐다면 “잘못 입력하셨습니다.“를 출력하세요.
		int num = 0;
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("1이상의 숫자를 입력하세요 : ");
		num = scanner.nextInt();
		
		if(num > 0) {
			for (int i = 1; i <= num; i++) {
			System.out.print(i + " ");
			} 
		} else {
		System.out.println("잘못 입력하셨습니다");
		}
	}

- for문의 i 가 1부터 시작하여야 1 ~ num까지 더한다.

 

<for문>

 [표현법]

     for(초기식; 조건식; 증감식) {

         . . 반복적으로 실행시키고자하는 실행구문 . .

}

- 초기식 : 반복문이 수행될 때 단 한 번만 실행되는 구문으로 반복문 안에서 사용될 변수를 선언하고 초기값을 대입한다.
- 조건식 : 반복문이 수행될 때 조건을 작성하는 구문으로 조건식이 참(true)이면 실행구문을 실행하고, 조건식이 거짓(false)이 되는 순간 반복을 멈추고 빠져나온다.
- 증감식 : 반복문을 제어하는 변수 값을 증감 시키는 부분으로 주로 초기식에 제시한 변수를 가지고 증감 연산자(++, --)를 사용한다.
 * 초기식, 조건식, 증감식은 생략이 가능하고 모두 생략하면 무한 루프에 빠진다. (생략 시에도 ;은 반드시 필요하다. for(;;))

 

문제2

public void practice2() {
//		practice1() 문제와 동일하나, 1 미만의 숫자가 입력됐다면
//		“잘못 입력하셨습니다. 다시 입력해주세요.”가 출력되면서 다시 사용자가 값을 입력하도록 하세요.
		int num = 0;
		Scanner scanner = new Scanner(System.in);
		
		while(true) {
			System.out.print("1이상의 숫자를 입력하세요 : ");
			num = scanner.nextInt();
			
			if(num > 0) {
				for(int i = 1; i <= num; i++) {
					System.out.print(i + " ");
				} 
				
				break;
			} else {
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
			} 
		}	
	}

-  잘못 입력하였을 때(0이하)  "1이상의 숫자를 입력하세요 : " 가 다시 출력되어 숫자를 입력해야 하기 때문에

   -> while문 안으로 작성

-  for문을 수행한 뒤 빠져나가서 break; 

 

<while문>

 [표현법]

   while(조건식) {

       . .  반복적으로 실행될 코드; 

            [증감식, 분기문]

   }

 - 조건식true일 경우 해당 실행 코드를 실행한다.

 - 조건식이 false일 경우 해당 반복문을 종료한다. 

 

문제3

public void practice3() {
//		사용자로부터 한 개의 값을 입력 받아 1부터 그 숫자까지의 모든 숫자를 거꾸로 출력하세요.
//		단, 입력한 수는 1보다 크거나 같아야 합니다.
		int num = 0;
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("1이상의 숫자를 입력하세요 : ");
		num = scanner.nextInt();
		
		if(num > 0) {
			for(int i = num; i >= 1; i--) {
				System.out.print(i + " ");
			} 
		} else {
			System.out.println("잘못 입력하셨습니다.");
		} 
		
	}

 

 

문제4

	public void practice4() {
//		practice3() 문제와 동일하나, 1 미만의 숫자가 입력됐다면
//		“잘못 입력하셨습니다. 다시 입력해주세요.“가 출력되면서 다시 사용자가 값을 입력하도록 하세요.
		
		int num = 0;
		Scanner scanner = new Scanner(System.in);
		
		while(true) {
			System.out.print("1이상의 숫자를 입력하세요 : ");
			num = scanner.nextInt();
		
			if(num > 0) {
				for(int i = num; i >= 1; i--) {
					System.out.print(i + " ");
				}
				break;	
			} else {
				System.out.println("잘못 입력하셨습니다.");
			} 
		}	
	}

 

문제5

	public void practice5() {
//		1부터 사용자에게 입력 받은 수까지의 정수들의 합을 출력하세요.
		
		int num = 0;
		int sum = 0;
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("정수를 하나 입력하세요 : ");
		num = scanner.nextInt();
		
//		for (int i = 1; i <= num; i++) {
//			System.out.print((num += i) + " ");
//		}	
		
		for(int i = 1; i <= num; i++) {
			sum += i;
			
			if(i < num) {
				System.out.print(i + " + ");
			} else {
				System.out.print(i + " = " + sum); 
			}
		}
	}

 

 - sum변수를 추가

 

문제6

첫번째 숫자가 크고 두번째 숫자가 작을경우 실행되지 않았다.

 

수정

public void practice6() {
//		사용자로부터 두 개의 값을 입력 받아 그 사이의 숫자를 모두 출력하세요.
//		만일 1 미만의 숫자가 입력됐다면 “1이상의 숫자만을 입력해주세요“를 출력하세요.
		
		int num1 = 0;
		int num2 = 0;
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("첫 번째 숫자 : ");
		num1 = scanner.nextInt();
		
		System.out.print("두 번째 숫자 : ");
		num2 = scanner.nextInt();
		
		if (num1 > 0 && num2 > 0) {
			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.println("1이상의 숫자만을 입력해주세요");
		}
	}

 

문제7

public void practice7() {
//		위 문제와 모든 것이 동일하나, 1 미만의 숫자가 입력됐다면
//		“1 이상의 숫자를 입력해주세요”가 출력되면서 다시 사용자가 값을 입력하도록 하세요.
		
		int num1 = 0;
		int num2 = 0;
		Scanner scanner = new Scanner(System.in);
		
		while (true) {
			System.out.print("첫 번째 숫자 : ");
			num1 = scanner.nextInt();
			
			System.out.print("두 번째 숫자 : ");
			num2 = scanner.nextInt();
			
			if (num1 > 0 && num2 > 0) {
				if (num1 <  num2) {
					for (int i = num1; i <= num2; i++) {
						System.out.print(i + " ");					
					}
					
					break;
				} else if (num1 > num2){
					for (int i = num1; i >= num2; i--) {
						System.out.print(i + " ");
					}	
					
					break;
				}
			} else {
				System.out.println("1이상의 숫자만을 입력해주세요");
			} 
		}	
	}

break위치!

 

문제8

public void practice8() {
//		사용자로부터 입력 받은 숫자의 단을 출력하세요.
		
		int num = 0;
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("숫자 : ");
		num = scanner.nextInt();
		
		System.out.println("===== " + num +"단 =====");
		for(int i = 1; i < 10; i++ ) {
			System.out.println(num + " * " + i  + " = " + (num * i));
		}
	}

 

문제9

public void practice9() {
//		사용자로부터 입력 받은 숫자의 단부터 9단까지 출력하세요.
//		단, 2~9 사이의 숫자가 아닌 경우 “2~9 사이의 숫자만 입력해주세요”를 출력하세요.
		
		int num = 0;
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("숫자 : ");
		num = scanner.nextInt();
			
		if(num > 1 && num < 10) {
			System.out.println("===== " + num +"단 =====");
			for(int i = 1; i < 10; i++ ) {
				System.out.println(num + " * " + i  + " = " + (num * i));
			}
		} else {
			System.out.println("2~9 사이의 숫자만 입력해주세요.");
		}
	}

 

문제10

public void practice10() {
//		Practice9() 문제와 동일하나, 2~9 사이의 숫자가 아닌 값이 입력됐다면
//		“2~9 사이의 숫자를 입력해주세요”가 출력되면서 다시 사용자가 값을 입력하도록 하세요.
		
		int num = 0;
		Scanner scanner = new Scanner(System.in);
		
		while(true) {
			System.out.print("숫자 : ");
			num = scanner.nextInt();
			
			if(num > 1 && num < 10) {
				System.out.println("===== " + num +"단 =====");
				for(int i = 1; i < 10; i++ ) {
					System.out.println(num + " * " + i  + " = " + (num * i));
				}
				
				break;
			} else {
				System.out.println("2~9 사이의 숫자만 입력해주세요.");
			}
		}	
	}

 

문제11

public void practice11() {
//		사용자로부터 시작 숫자와 공차를 입력 받아
//		일정한 값으로 숫자가 커지거나 작아지는 프로그램을 구현하세요.
//		단, 출력되는 숫자는 총 10개입니다.
		
		int startnum = 0;
		int commonDifference = 0;
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("시작 숫자 : ");
		startnum = scanner.nextInt();
		
		System.out.print("공차 : ");
		commonDifference = scanner.nextInt();
		
//		for(int i = startnum; i <= (startnum + (commonDifference * 9)); i += commonDifference) {
//			System.out.print(i + " ");
//		}
		
		for(int i = 1; i <= 10; i++) {
			System.out.print(startnum + " ");
			
			startnum += commonDifference;
		}
	}

내가 작성한 코드와 강사님 코드 비교..

나는 for문 조건에 조건식과 증감식을 작성하였다.

강사님은 결과출력하는 동안 for문 반복 ~10번 

 

문제12

public void practice12() {
//		정수 두 개와 연산자(문자열로 입력 받고 입력된 연산자에 따라 알맞은 결과를 출력하세요.
//		단, 해당 프로그램은 연산자 입력에 “exit”라는 값이 들어올 때까지 무한 반복하며
//		exit가 들어오면 “프로그램을 종료합니다.”를 출력하고 종료합니다.
//		또한 연산자가 나누기이면서 두 번째 정수가 0으로 들어오면
//		“0으로 나눌 수 없습니다. 다시 입력해주세요.”를 출력하며,
//		없는 연산자가 들어올 시 “없는 연산자입니다. 다시 입력해주세요.”라고 출력하고
//		두 경우 모두 처음으로 돌아가 사용자가 다시 연산자부터 입력하도록 하세요.
		String  operator = "";
		int num1 = 0;
		int num2 = 0;
		Scanner scanner = new Scanner(System.in);
		
		while (true) {
			System.out.print("연산자(+,-,*,/,%) : ");
			operator = scanner.nextLine();
			
			if(operator.equals("exit")) {
				System.out.println("프로그램을 종료합니다.");
				
				break;
			}
			
			System.out.print("정수1 : ");
			num1 = scanner.nextInt();
			
			System.out.print("정수 2 : ");
			num2 = scanner.nextInt();
			scanner.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("으로 나눌 수 없습니다. 다시 입력해주세요.");
					} else 
						System.out.println(num1 + " / " + num2 + " = " + (num1 / num2));
						
					break;	
				case "%":
					System.out.println(num1 + " % " + num2 + " = " + (num1 % num2));
					
					break;
				default:
					System.out.println("없는 연산자입니다. 다시 입력해주세요.");
			}
		}
	}

- operator에 문자열인 exit가 입력되었을 때 프로그램이 종료되어야 하기때문에 자료형을 String으로 변경해주었다.

- 정수2를 입력받는 scanner에서 scanner.nextLine(); 두번째 반복에서 다음 입력값으로 넘어가(Enter)지 않게하기 위해 버퍼를 비워주어야한다.

 

** nextInt()는 입력값으로 들어온 값 중에 Enter나 공백을 기준, 그 앞의 int값을 가져온다.

   남아있는 값은 Enter -> 출력단계가 넘어가버림

 

** nextLine / next 차이

띄어쓰기를 포함해서 입력을 받고 싶을 때는 --> nextLine()

띄어쓰기를 기준으로 입력을 받고 싶을 때는 --> next()

'실습 문제 > java' 카테고리의 다른 글

[java실습문제] 조건문 if, switch  (0) 2021.09.11
[java실습문제] 연산자  (0) 2021.09.09
[java실습문제] 형변환  (0) 2021.09.08
[java실습문제] 변수 Scanner  (0) 2021.09.08