Full Stack 교육 회고록

8/10 [JAVA]-While/do~while문 예제, for문

순두부 호랑이 2022. 8. 15. 00:18
728x90
SMALL

<자바 while/do~while문 예제>

예제1. 사용자가 입력한 아이디가 "smhrd"이고 비밀번호가 "1234"인 경우만 로그인 될 수 있도록 하고 그렇지 않은 경우에는 로그인 할 수 없는 로그인 프로그램을 작성하시오.(단,입력기회는3번)

package 복습;

import java.util.Scanner;

public class 로그인 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		int cnt = 0;// 틀린 개수 저장할 변수
		
		String id = " ";
	    String pw = null; //레퍼런스 타입은 null o (비어있다!)
		//int i = null; //기본타입은 null x

				
		do {
			System.out.print("아이디 : ");
			id = sc.next();
			System.out.print("비민번호 : ");
			pw = sc.next();

			if (id.equals("smhrd") && pw.equals("1234")) {
				System.out.println("로그인성공");
				break;
			} else {
				System.out.println("로그인실패");
				//틀린 개수 세기
				cnt++; //cnt = cnt+1
				if(cnt==3) {
					System.out.println("본인인증을해주세요");
					break;
				}
				
				System.out.println("계속 하시겠습니까?");
				String answer = sc.next();
				if (answer.equals("n") || answer.equals("N")) {
					break;
				}
				
				
				
			}
		} while (true);
	}
}

예제2. 랜덤으로 정수 2개를 뽑아 덧센 식을 출력하고 사용자는 답을 입력하여 사용자가 원할 때 까지 게임을 계속하고 맞춘 횟수와 틀린 횟수를 출력하는 프로그램을 작성하시오.

package 복습;

import java.util.Random;
import java.util.Scanner;

public class 랜덤수 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		// 랜덤 도구 생성
		Random rd = new Random();

		boolean sw = true;// 사용자가 정답을 맞췄을 때 -> true(새로운 문제)
							// 사용자가 오담을 작성했을 때 ->false(이전 문제)
		int num1 = 0; // 첫번째 랜던값 저장 변수
		int num2 = 0; // 두번째 랜덤값 저장 변수
		
		int o = 0; //맞춘개수 저장 변수
		int x = 0; //틀린개수 저장 변수

		while (true) {
			// 1~10까지 중 랜덤 수 뽑기
			// 첫번째 랜덤 수 뽑기
			// (10) ->0~9
			if (sw == true) {
				num1 = rd.nextInt(10) + 1;
				num2 = rd.nextInt(10 + 1);
			}

			System.out.printf("%d + %d = ", num1, num2);

			int input = sc.nextInt(); // 사용자가 입력한 답

			if (input == num1 + num2) { // 정답을 입력한 경우
				System.out.println("Success!");
				sw = true;
				o++;
			} else { // 오담을 입력한 경우
				System.out.println("fail");
                sw=false;
				x++;
			}

			System.out.print("계속하시겠습니까?");
			String answer = sc.next();

			if (answer.equals("n") || answer.equals("N")) {
				System.out.println("프로그램 종료");
				break;
			} else if (answer.equals("y") || answer.equals("Y")) {
				continue; // 현재 줄 아래에 있는 실행문장은 무시 조건 확인 부분으로 바로 이동
			}
		}
		
		System.out.println("맞춘 개수 : "+o);
		System.out.println("틀린 개수 : "+x);
	}
}

[for문]

: 정확하게 몇 번 반복해야 할 지 정해진 경우에 사용

: 몇 번 반복해야하는지 정해져 있기 때문에 인자를 잘 적어서 반복횟수를 지정해줘야 함

for(초기화 구문; 조건식; 반복후구문){
       실행문장
}
다음문장

* 초기화 구문: 반족문에서 사용할 변수 선언, 반복문 실행 시 맨 처음 딱 한번만 실행

* 조건식: 실행문장을 실행할 조건, 실행문장 실행 전 매번 확인

* 반복후구문: 실행문장을 실행한 다음 실행, 반복 조건 확인 전 매번(맨 처음 제외)실행

 

예제1) 1부터 5까지 출력해주는 반복문을 작성하시오.

package 복습;

public class ex01 {

	public static void main(String[] args) {
		
		System.out.println();
		
		for(int i=1;i<=5;i++) { //반복문을 5번 반복
			System.out.println(i);
		}
	}
}

for(int i=1;  i<=5;   i++) { //반복문을 5번 반복
System.out.println(i);
}

-> 이 반복문에서 반복되는 순서는

int i=1    ->    i<=5    ->    System.out.println(i);    ->      i++   

              ->    i<=5    ->    System.out.println(i);    ->      i++   

              ->    i<=5    ->    System.out.println(i);    ->      i++ 

              ->    i<=5    ->    System.out.println(i);    ->      i++

              ->    i<=5    ->    System.out.println(i);    ->      i++

              ->    i<=5 

 

예제2) for문을 사용하여 21에서 57까지 출력하시오.

           for문을 사용하여 96에서 53까지 출력하시오.

           for문을 사용하여 21에서 57까지 수 중 홀수만 출력하시오.

package 복습;

public class ex02 {

	public static void main(String[] args) {
    
		//for문을 사용하여 21에서 57까지 출력하시오.
		for(int i=21; i<=57; i++) {
			System.out.println(i);
		}
		
        //for문을 사용하여 96에서 53까지 출력하시오
		for(int i=96;i>=53;i--) {
			System.out.println(i);
		}
		
        for문을 사용하여 21에서 57까지 수 중 홀수만 출력하시오
		for(int i=21;i<=57;i+=2) {
			System.out.println(i);
		}

	}

}

예제3)

package 복습;

import java.util.Scanner;

public class EX03 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int num = sc.nextInt();
		
		//사용자가 5를 입력했을 때
		for(int i=1; i<=num; i++) {
			System.out.println(i);
		}
		
		//사용자가 10을 입력했을 때
		for(int i=1; i<=num; i++) {
			System.out.println(i);
		}
		
		//사용자가 100을 입력했을 때
		for(int i=1; i<=num; i++) {
			System.out.println(i);
				}

	}

}

예제4)

package 복습;

import java.util.Scanner;

public class ex04 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int num1 = sc.nextInt();
		int num2 = sc.nextInt();
		
		//num1 과 num2 중에 어떤 수가 더 작은지 판단!
		if(num1<num2) { //num1~num2
			for(int i= num1;i<=num2;i++ ) {
				System.out.println(i);
			}
		}else { //num2 가 더 작다 -> num2~num1
			for(int i=num2;i<=num1;i++) {
				System.out.println(i);
			}
			
			//삼항연산자 활용
			int num3 = sc.nextInt();
			int num4 = sc.nextInt();
			//삼항연산자 사용 num3/num4 중 더 큰 숫자 big 더 작은 숫자 small
			int big = (num3<num4)?num4:num3;
			int small = (num3<num4)?num3:num4;
			
			for(int i=small;i<=big;i++) {
				System.out.println(i);
			}				
		}
	}
}

예제5)

package 복습;

public class ex05 {

	public static void main(String[] args) {
		
		for(int i =1; i<=50;i++) {
			if(i%10==5) {
				System.out.println("으악");
			}else if(i%10==3||i%10==6||i%10==9) {//1의 자리수 3,6,9
				System.out.println("박수");
			}else {
				System.out.println(i);
			}
			System.out.println(i);
		}

	}

}

예제6)

(77*1)+(76*2)+(75*3)+...+(1*77)을 계산하여 결과를 출력하시오.

package 복습;

public class ex06 {

	public static void main(String[] args) {
		
		//(77*1)+(76*2) + ... + (1*77)
		// 앞에서 곱해지는 숫자저장 변수
		int down = 77;
		//뒤에서 곱해지는 숫자저장 변수
		int up =1;
		
		//누적합 저장 변수
		int sum =0;
		
		for(int i=1; i<=77; i++) { //1~77 i변수 활용/ 77번 반복 
			sum+= (down*up); //sum = sum+(down*up)
			down--;
			up++;
		}
		System.out.println(sum);
		

	}

}

예제7)

package 복습;

public class ex_구구단 {

	public static void main(String[] args) {
		
		//구구단2단
		System.out.println("==2단==");
		for(int i=1;i<=9;i++) {
			System.out.printf("2 * %d = %d\n", i, 2*i);
		}
		
		//2~9단까지 출력 반복문
		//for문 혹은 while문(반복문) 중첩해서 쓸 수 있다!
		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);
			}
		}

	}

}

이중 for 문 반복 순서 파악하기

for(int i=2;i<=4;i++) {
	for(int j=1;j<=2;j++) {
		System.out.printf("%d * %d = %d\n", i,j, i*j);
			}

1번 : int i =2

2번 : i<=4

3번 : i++

4번:int j=1

5번: j<=2

6번 : j++

system.out,print(%d * %d = %d\n, i, j , i*j);

 

1 -> 2 -> 4-> 5-> 7 -> 6 -> 5 ->7 ->6 ->5

->3 -> 2 -> 4 ->5 ->7 ->6 ->5

->7->6->5->3->2->4->5->7

->6->5->7->6->5->3->2

 

예제8)

 

package 복습;

public class ex_구구단 {

	public static void main(String[] args) {
		
		for(int i=2;i<=9;i++) {
			System.out.print(i+"단 : \t ");
			for(int j=1;j<=9;j++) {
				System.out.printf("%d * %d = %d\t", i,j, i*j);
			}
			System.out.println();
		}

	}

}

예제9)

package 복습;

public class ex_구구단 {

	public static void main(String[] args) {
		
		for(int i=2;i<=9;i++) {
			for(int j=1;j<=9;j++) {
				System.out.printf("%d * %d = %d\t", i,j, i*j);
			}
			System.out.println();
		}

	}

}

예제10

package 복습;

public class ex07 {

	public static void main(String[] args) {
		
		//피라미드 별찍기
		
		for(int j=1;j<=5;j++) {
			for(int i=1;i<=j;i++) {
				System.out.print("*");
			}
			System.out.println();
				
			}
		}

	}

예제11

package 복습;

public class ex07 {

	public static void main(String[] args) {
		
		//피라미드 별찍기 
		
		for(int j=5;j>=1;j--) {
			for(int i=1;i<=j;i++) {
				System.out.print("*");
			}
			System.out.println();			
			}
		}

	}

예제12

package 복습;

public class ex07 {

	public static void main(String[] args) {
		
		for(int j=1;j<=5;j++) {
			//4번반족 ~ 0번반목
			//j=1 i<=4 (j+3 / 5-j)
			//j=2 i<=3 (5   /  3)
			//j=3 i<=2
			//j=4 i<=1
			//j=5 i<=0
			for(int i=1;i<=5-j;i++) {
			System.out.print(" ");
		}
		//1번반복 ~5번반복
		for(int i=1;i<=j;i++) {
			System.out.print("*");
		}
		System.out.println();
		}
		}

	}

예제13

package 복습;

import java.util.Scanner;

public class ex08 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		
		//32: 1 2 3(x) 4 5 (x) ...32
		//16: 1~16
		//약수 : 나누어 떨어지는 수

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

}

예제14

2~30까지의 약수를 구하시오.

 

package 복습;

import java.util.Scanner;

public class ex08 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		//32: 1 2 3(x) 4 5 (x) ...32
		//16: 1~16
		//약수 : 나누어 떨어지는 수
		
		for(int j=2;j<=30;j++) {
			System.out.print(j+"의 약수 : ");
		for(int i=1;i<=j/2;i++) {
			if(j%i==0) {
				System.out.print(i+" ");
			}
		}
		System.out.println(j);
	}
	}
}

예제14

 

package 복습;

import java.util.Scanner;

public class ex09 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		for(int j=1; j<=1000; j++) {
			int sum =0;
			//약수 합 구하는 반복문
			for(int i=1;i<=j/2;i++) {
				if(j%i==0){
					sum+=i; //자기자신을 제외한 약수들의 합
				}
			}
			if(j==sum) {
				System.out.println(j);
			}
		}
		

	}

}
728x90
LIST