Full Stack 교육 회고록

8/10 [java] - 반복문(for문)

순두부 호랑이 2022. 8. 10. 12:45
728x90
SMALL

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

package while문;

import java.util.Scanner;

public class ex로그인 {

	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.print("계속 하시겠습니까?");
				String answer = sc.next();
				if(answer.equals("N")||answer.equals("n")) {
					break;
				}
				
							
			}
		}while(true);

	}

}

2. 

package while문;

import java.util.Random;

public class Ex06랜덤 {

	public static void main(String[] args) {
		
		//랜덤 도구 생성
		 Random rd = new Random();

		 //1~10까지 중 랜덤 수 뽑기
		 //첫번째 랜덤 수 뽑기
		 //(10) -> 0~9
		 int num1 = rd.nextInt(10)+1;
		 int num2 = rd.nextInt(10)+1;
		 
		 System.out.println(num1);
		 System.out.println(num2);
	}

}

 

package while문;

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

public class Ex06_02랜덤 {

	public static void main(String[] args) {
		
		Random rd = new Random();  //랜덤 숫자 적어주는 것 정의
		Scanner sc = new Scanner(System.in); //입력하는 수 적어주는 것 정의
		 
		int a =0;  //맞은 개수 합
		int b =0;  //틀린 개수 합
		int num1 = rd.nextInt(10)+1;   // 1~10 사이 숫자 중 랜덤 수 뽑기
		int num2 = rd.nextInt(10)+1;   // 1!10 사이 숫자 중 랜덤 수 뽑기
		
		do {
			System.out.printf("%d + %d = ", num1, num2);  //%d 실수문 넣기
			int dap = sc.nextInt();   //답을 입력하는 것 정의
			if (dap == (num1 + num2)) {  //num1 와 num2 를 더했을때 답이 정답일때
				System.out.println("Sucees!");
				num1 = rd.nextInt(10)+1;
				num2 = rd.nextInt(10)+1;
				a++;   //맞은개수를 계속 더해준다
			}else {
				System.out.println("Fail");
				b++;  //틀린개수를 계속 더해준다
			}System.out.print("계속하시겠습니까?");
			String answer = sc.next();
			if (answer.equals("N")) {
				break;     //N가 나왔을때 반복문을 종료한다
			}
			
		}while(true);
		
		System.out.println("종료!");
		System.out.println("맞춘 개수 : "+ a);
		System.out.println("틀린 개수 : "+ b);

	}

}
package while문;

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

public class EX07_랜덤 {

	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);

	}

}

p.115 

for문

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

:몇 번 반복해야하는지

 

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

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

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

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

 

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

package for문;

public class Ex01 {

	public static void main(String[] args) {
		
		
		for(int i=1; i<=5 ;i++) { //반복문을 5번 반복
			System.out.println(i); // ()안에 문자를 넣으면 5번 출력된다
		}

	}

}
package for문;

public class Ex01 {

	public static void main(String[] args) {
		
		
		for(int i=1; i<=5 ;i++) { //반복문을 5번 반복
			System.out.println(i); // ()안에 문자를 넣으면 5번 출력된다
		} // 끝은조건식에서 마무리 된다 
		
		//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에서 5까지 수 중 홀수만 출력하시오
		for(int i=21; i<=57 ; i+=2) {
			System.out.println(i);
		}
		

	}

}

예제2) 정수 1개를 입력받아 1부터 입력받은 정수까지 차례대로 출력해주는 프로그램을 작성하시오

package for문;

import java.util.Scanner;

public class Ex02 {

	public static void main(String[] args) {
		
		Scanner sc =new Scanner(System.in);
		
		int num = sc.nextInt();
		
		for(int i=1; i<=num; i++) {
			System.out.println(i);
		}

	}

}

Q. 100이하 두개의 정수를 입력 받아 작은 수 부터 큰 수까지 차례대로 출력해주는 프로그램을 작성하시오

package for문;

import java.util.Scanner;

public class Ex03 {

	public static void main(String[] args) {
		
		//100이하 두개의 정수를 입력 받아 작은 수 부터 큰 수까지 차례대로 출력해주는 프로그램을 작성하시오
		
		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);
		}

	}

}

예제)1~50까지 369게임을 출력하싱. 끝자리수가 3,6,9일때는 "박수"를 출력 끝자리수가 5일때 "으악"을 출력 그 외의 수는 숫자를 그대로 출력하시오.

1. 1~50까지 출력(숫자로)

2. 끝자리 수가 5일때 으악 출력 나머지는 숫자

package for문;

public class Ex04 {

	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);		
			}
		}
	}
}

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

package for문;

public class Ex04 {

	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);
		
			}
		}

Q. 2~9단 출력하기

//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 );
			}
			
		}
package 다중for문;

public class Ex02 {

	public static void main(String[] args) {
		//2~9단까지 출력 반복문
				//for문 혹은 while 문 (반복문)중첩해서 쓸 수 있다!
				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();
				}
	}

}
package 다중for문;

public class Ex03 {

	public static void main(String[] args) {
		//2~9단까지 출력 반복문
		//for문 혹은 while 문 (반복문)중첩해서 쓸 수 있다!

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

}
package 다중for문;

public class Ex04 {

	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();
				
			}
		
		
		System.out.println("=======");	
		
		
		//피라미드 별찍기 *****에서 *까지 감소
		for(int j=5;j>=1;j--) {
			for(int i=1; i<=j; i++) {
				System.out.print("*");
			}
			System.out.println();		
			}
		
		
		System.out.println("=======");	
		
		
		//피라미드 공백 별찍기 
		
		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();
		}
		}
		
	}

q. 2~30의 약수를 구하여라

package 다중for문;

import java.util.Scanner;

public class Ex05 {

	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 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);
		}
	}

}

Q. 1~1000까지의 숫자 중 완전수인 숫자를 모두 구하시오

완전수:자신의 약수 중에서 자신을 제외한 모든 약수의 합이 자신과 같은수

EX)6의 약수 1,2,3,6 /1+2+3=6

package 다중for문;

public class Ex06 {

	public static void main(String[] args) {
		
		
		int sum =0;
		for(int j =1; j<=1000;j++) {	
			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