[JAVA] Day 4 - 제어문

sue·2023년 11월 19일

📒국비학원 [JAVA]

목록 보기
1/20
post-thumbnail

제어문 (조건문, 반복문)

조건문 : if문 / if~else if문 / if else문
- bolean값 (true/false)을 얻으므로 true일때만 해당 코드 블록을 실행합다. false일때는 그 다음 조건값으로 넘어가서 실행합니다.

반복문 : for문 / while문 / do ~ while문 / switch문
- 코드가 조건에 맞기 전(true로 인식)까지 계속 반복해서 실행하는 제어문, 조건에 맞지 않게 되면 (false) 중지합니다.


🔎 [Eclipse] - [package] - [class] 생성


📌 Note Code


  • if문에서 여러 개 조건[&&]이 있을 땐 첫번째로 물어보기

Test1. 해당 수가 3또는 4의배수인지 확인

💻 입력

import java.util.Scanner;

public class Test1 {

	public static void main(String[] args) {

		//수 하나를 입력받아서 3또는 4의배수인지 확인
		
		Scanner sc = new Scanner(System.in);
		
		int su;
		String str;
		
		System.out.print("수입력?");//9
		su = sc.nextInt();
		
		if(su%3==0 && su%4==0) {
			str = "3과 4의 배수입니다.";
		}else if(su%3==0){
			str = "3의 배수입니다.";
		}else if(su%4==0) {
			str = "4의 배수입니다.";
		}else {
			str = "3과 4의 배수가 아닙니다.";
		}
		
		System.out.println(su+" = "+str);
		
		sc.close();//생략가능 - 노란색 경고등 표시 이유
	}

}

💡 **출력**
수입력?9
9 = 3의 배수입니다.


📌 Note Code


  • for문

    = for(시작값;최대값;증가값){

}

→ 시작값,최대값,증가값 다 알고 바뀌지 않을 때 ex) 구구단

  • while문

    = 시작값

    while(최대값) {

    증가값

}

→ 바뀐지 안바뀐지 모르겠을 때 ex) 헬스장 - 고객 정보 출력하고 싶을 때

  • do~while문

    시작값

do{

증가값

}while(최대값)

= 무조건 숫자 하나는 사용자에게 받음 → 원하는 값이 나오면 출력,

값 조건에 충족을 못한다면 다시 숫자 받기

Test2. 구구단 만들기 ver.1

💻 for문 입력

import java.util.Scanner;

	public class Test2 {
		public static void main(String[] args) {
	
		Scanner sc = new Scanner(System.in);
		int dan;

		System.out.print("몇단?");
		dan = sc.nextInt(); // 스캐너 안에 있는 문자를 정수로 바로 전환해주는 sc.nextInt 사용해주기
	
		for(int i=1,i<=9;i++){
		System.out.println(dan+"x"+i+"="+(dan*i));
		}
	}
}

💻 while문 입력

import java.util.Scanner;

	public class Test2 {
		public static void main(String[] args) {
	
		Scanner sc = new Scanner(System.in);
		int dan;

		System.out.print("몇단?");
		dan = sc.nextInt(); // 스캐너 안에 있는 문자를 정수로 바로 전환해주는 sc.nextInt 사용해주기
	
		for(int i=1,i<=9;i++){
		System.out.println(dan+"x"+i+"="+(dan*i));
		}
	}
}

💻 do~while문 입력

import java.util.Scanner;

	public class Test2 {
		public static void main(String[] args) {
	
		Scanner sc = new Scanner(System.in);
		int k =1
		do{
		System.out.println(dan+"x"+j+"="+(dan*j);
		k++
		}while(k<9=);


		//무한루프 - while(true)
		while(true){
		System.out.println("안녕!");
		}
	}
}


📌 Note Code


  • [ASCII Code] Enter 값 = 10번, 13번
  • BufferedReader 문제점 : 'br.readLine'은 처음에 “원하는 수?”를 물어봤을 때, 사실은 입력한 문자를 100이라고 치면 100 + 'Enter'인데 ‘1’,’0’,’0’이 char라서 각 1byte씩, Enter전까지 읽는 성질이 있는다.
    → 그리고 “계속할래?” 라고 물었을 때, E를 못지워서 이미 E가 남아있는 상태고, E + ‘1’라서 아무것도 안읽어냄 (=null) → 그래서 null을 int로 자동변환하려니 충돌

Test3. BufferedReader/반복문/조건문

💻 입력

import java.io.IOException;
import java.util.Scanner;
import java.util.function.BiConsumer;

public class test3 {

	public static void main(String[] args) throws IOException {
		//1~500사이에 원하는 수 -> 계속할래?[Y/N]
		
		Scanner sc = new Scanner(System.in);
		int num,sum;
		char ch;//[y/n]
		
		
		while(true) {

			
			do {
				System.out.print("[1~500]사이의 수 입력?");
				num = sc.nextInt();	
				}while(1>num||num>500); // do while문에서 크고작음 부호를 나타날땐 반대로 
		
			
			sum = 0;
			for(int i=1;i<=10;i++) {
				sum =sum+1;
			}
			
			System.out.println("1~"+num+"까지의 합 : "+sum);
		
				System.out.println("계속할래?");
				ch = (char) System.in.read();
				
				
				if(ch!='y'&&ch!='Y') {
					break;
			}
		}
		
	}

}

💡 **출력**
[1~500]사이의 수 입력?300
1~300까지의 합 : 10
계속할래?y
[1~500]사이의 수 입력?200
1~200까지의 합 : 10
계속할래?n


📌 Note Code


  • 합 구하는 법 : for문 사용 / 홀수(2n-1)

Test4. 100까지의 합, 홀수의 합, 짝수의 합, 3의 배수의 합

💻 입력


public class test4 {

	public static void main(String[] args) {
		
		int i,sum;
	
		//100까지의 합
		sum=0;
		for(i=1;i<101;i++) {
			sum = sum+i; // sum+=i (자기자신에 i만큼 더할 때)
		}
		
		
		//홀수의 합
		sum=0;
		for(i=1;i<101;i+=2) {
			sum+=i;
		}
		
		
		//짝수의 합
		sum=0;
		for(i=2;i<101;i+=2) {
			sum = sum+2;// sum+=i
		}
		
		
		//3의배수 합
		sum=0;
		for(i=3;i<101;i+=3) {
			sum+=i;
		}
		
		System.out.println("결과는"+sum);
		
		
	}

}


📌 Note Code


  • 다중 for문 : 여러 개를 겹쳐서 쓰는 for문

Test5. 구구단 ver.2

💻 입력


public class test5 {

	public static void main(String[] args) {

		int dan,i;
		
		for(dan=1;dan<=9;dan++) {
			
			System.out.println("=======================");
			System.out.println();
			System.out.println("["+dan+"단]");
			
			for(i=1;i<=9;i++) {
				System.out.println(dan+"x"+i+"="+(dan*i));
		
			}

			System.out.println();
			
		}
				
	}

}

💡 **출력**
=======================

[1단]
1x1=1
1x2=2
1x3=3
1x4=4
1x5=5
1x6=6
1x7=7
1x8=8
1x9=9

=======================

[2단]
2x1=2
2x2=4
2x3=6
2x4=8
2x5=10
2x6=12
2x7=14
2x8=16
2x9=18

=======================
.
.
.


📌 Note Code


  • 트리만들기 : 먼저 공간 몇칸(" ") 띄울지 출력 -> ("*") 별 개수 생각하기

Test6. 별찍기

💻 입력

public class test6 {

	public static void main(String[] args) {

		//별찍기
		int i,j;
		
		for(i=1;i<=5;i++) {
		
			for(j=1;j<=5-i;j++) {
				System.out.print(" ");
			}
		for(j=1;j<=i;j++) {
			System.out.print("*");
			}
		
		System.out.println(" ");
		
		}
		

		//반대별찍기

		for(i=1;i<=5;i++) {
			
			for(j=1;j<=i;j++) {
				System.out.print("*");
				}

			for(j=1;j<=5-i;j++) {
				System.out.print(" ");
			}

		
			System.out.println(" ");
		
		}
		
		
		//트리만들기

		
		for(i=1;i<=5;i++) {
			
			for(j=1;j<=5-i;j++) {
				System.out.print(" ");
			}
			
			for(j=1;j<=i*2-1;j++) {
				System.out.print("*");
			}
			
			System.out.println(" ");
		}
	
		
		//역트리

		for(i=5;i>=1;i--) {
			
			for(j=1;j<=5-i;j++) {
				System.out.print(" ");
			}
			
			for(j=1;j<=i*2-1;j++) {
				System.out.print("*");
			}
		
			System.out.println(" ");

		}

	//트리+역트리 = 마름모, 모래시계(중간에 겹치니까 1개 빼줘야함)
	
	}
}

}

💡 **출력**
//이 중에 한개의 답만 출력함
    * 
   *** 
  ***** 
 ******* 
********* 


📌 Note Code


  • switch문 : switch() <- 괄호 안에 변수 넣어주기, case x에서 x는 선택할 문자 넣어주기, 마지막 break;로 꼭 닫아줘야 아랫값들 출력 X!!, 마지막 default:는 생략가능

Test7. 1~3사이의 수 중 수입력?

💻 입력

import java.util.Scanner;

public class test7 {

	public static void main(String[] args) {
		// switch문 사용
	
		Scanner sc = new Scanner(System.in);
		int i;
		
		
		System.out.print("[1~3]중에 뭐고를꺼야?"); //이 외에 숫자는 default:, "오류"적어주기
		i=sc.nextInt();
		
		switch (i) {
		case 1:
			System.out.println("*");
			break; //break;가 있어야 아랫값들 출력 x
			
		case 2:
			System.out.println("**");
			break;
			
		case 3:
			System.out.println("***");
			break;	

		default:
			System.out.println("오류");
		}

	}

}

💡 출력

[1~3]중에 뭐고를꺼야?2
**


📌 Note Code


  • System.in.read(); : 하나의 값만 받아내는거 => *예외처리 필수!!*  , int값이라 (char)로 형변환 필수!
  • %c 사칙연산 : 꼭 뒤에 ch를 넣어줘야함 ex) (num1,ch,(num2,num1+num2))

Test8. 계산기 만들기 ver.2

💻 입력


import java.io.IOException;
import java.util.Scanner;

public class test8 {

	public static void main(String[] args) throws IOException {

		Scanner sc = new Scanner(System.in);

		int i,j;
		char ch; //사칙연산 +,-,/,*
		
		System.out.print("첫번째 수");
		i = sc.nextInt();
		
		System.out.print("두번째 수");
		j = sc.nextInt();
		
		System.out.print("뭘로 연산할거야?");
		ch = (char)System.in.read();
				
		
		//두가지는 %c로, 두가지는 사칙연산 그대로 입력했음
		switch (ch) {
		case '+':
			System.out.printf("결과는 %d%c%d=%d", i,ch,j,(i+j)); //사칙연산 =%c
			break;

		case '-':
			System.out.printf("결과는 %d%c%d=%d", i,ch,j,(i-j)); //사칙연산 =%c
			break;
			
		case '/':
			System.out.printf("결과는 %d/%d=%d", i,j,(i/j));
			break;
			
		case '*':
			System.out.printf("결과는 %d*%d=%d", i,j,(i*j));
			break;
			
		}
	}

}

💡 출력

첫번째 수2
두번째 수3
뭘로 연산할거야?*
결과는 2*3=6

0개의 댓글