본문 바로가기

코딩 공부/Java

Java switch case와 반복문 for

선택

switch - case

균일한 속도를 제공

break로 switch문 밖으로 나간다.

default가 없는 경우 마지막 case에서 break생략 가능하다.

case는 문자열도 가능하다.

 

int select = sc.nextInt();

switch(select) {
case 1: System.out.println("case 1 : "+select);break;
case 2: System.out.println("case 2 : "+select);break;
case 3: System.out.println("case 3 : "+select);break;
default : System.out.println("default : 1,2,3이 아닌 수");
}
System.out.println("다음문장");
String select = sc.next();
		
switch(select) {
case "1": System.out.println("case 1 : "+select);break;
case "2": System.out.println("case 2 : "+select);break;
case "3": System.out.println("case 3 : "+select);break;
default : System.out.println("default : 1,2,3이 아닌 수");
}
System.out.println("다음문장");


반복문

for

for(초기식; 조건식; 증감식;){ 실행문 }

 

지정된 위치에 식을 구성하여 가독성이 높다.

정해진 수만큼 반복

식은 일부 또는 전부를 생략 가능(세미콜론은 적어주어야 한다.) 

조건식 생략하면 무한 반복이므로 빠져나올 수 있는 실행문을 작성해야 한다.

초기식은 적어주는 게 빠를 수 있다.)

순서 : 초기식→조건식→증감식→실행→조건식→증감식→실행 순으로 반복, 조건식이 false가 됐을 때 반복을 빠져나온다.

 

EX

package loop_for;
import java.util.Scanner;
public class Ex {
	public static void main(String[] args) {
//두 수를 입력받아 작은수~큰수의 합계를 구하기
		int data1=0;
		int small=0;
		int big= 0;
		boolean a = true;
		Scanner sc = new Scanner(System.in);
		System.out.println("두 수를 입력");
		big= sc.nextInt();
		small = sc.nextInt();
		if(big<small) {
			data1 = small;
			small = big;
			big = data1;
		}
		int sum=0;
		for(int i = small; i <= big; i++) {
			sum += i;
		}
		System.out.println(sum+"입니다");
		System.out.println("수를 입력");
		data1= sc.nextInt();
		for(int i = 2; i<data1; i++) {
			if(data1%i==0) {
				a = false;
				break;
			}
		}
		if(a)System.out.println("소수다");
		else System.out.println("소수가 아니다");
		sc.close();
	}
}

-1~1000까지의 자연 수중 4로 나누어도 6으로 나누어도 나머지가 1 인수의 합

-첫날의 저금액은 1원 그 이후부터 전날의 두배씩 저금, 30일 후 저금액(long)

-체스판 첫칸에는 밀알이 1개 그 이후부터 두배씩 밀알을 넣었을 때 64칸 모두의 밀알의 개수(bigIntegert사용)

package loop_for;
import java.math.BigInteger;
public class Ex {
	public static void main(String[] args) {
		//1~1000까지의 자연수 중에 4로 나누어도 6으로 나누어도 나머니가 1인 수의 합
		int sum=0;
		long sum2=0;
		for(int i = 1;i<1000;i++) {
			if(i%4==1&&i%6==1) {
				sum += i;
			}
		}System.out.println("합은"+sum+"이다");
		//저금
		int a = 1;
		sum2 = 0;
		for(int i = 1;i<=30;i++) {
			sum2 = sum2+a;
			a *= 2;
		}
		System.out.println("aa합은"+sum2+"이다");
		//밀알문제
		BigInteger bigInteger = BigInteger.ZERO;
		BigInteger bigInteger2 = BigInteger.ONE;
		for(int i = 1;i<=64;i++) {
			bigInteger = bigInteger.add(bigInteger2);
			int j = 2;
			bigInteger2 = bigInteger2.multiply(BigInteger.valueOf(j));
		}
		System.out.println("aa합은"+bigInteger+"이다");

		//BigInteger 사용방법
		BigInteger milTotal = new BigInteger("0");
		BigInteger milSeed = new BigInteger("1");
		BigInteger two = new BigInteger("2");
		for(int i = 1;i<=64;i++) {
			milTotal = milTotal.add(milSeed);
			milSeed = milSeed.multiply(two);
			//System.out.println("칸 "+i+"에는 "+milTotal+"개 있다");
		}
		System.out.println("aa합은"+milTotal+"이다");
	}
}

for 이중 반복문

그룹 대 그룹으로 비교를 할 때

데이터들의 정렬

 

상위 for문이 끝날 때까지 루프가 계속된다.

 

예제

수를 입력받아 2에서 그 수까지 내에 있는 소수를 찾는 프로그램

3x + 2y = 10 

해를 구하기 단 x, y는 정수이며 0 <=x, y <=0을 만족한다

package loop_for;
import java.util.Scanner;
public class Ex{
	public static void main(String[] args) {
//수를 입력받아 2에서 그 수까지 내에있는 소수를 찾는 프로그램
		int data1,i,j;
		boolean a= true;
		Scanner sc= new Scanner(System.in);
		System.out.println("수입력");
		data1 = sc.nextInt();
		for(i=2;i<=data1;i++) {
			a=true;
			//System.out.println("i"+i);
			for(j=2;j<i;j++) {
				//System.out.println("j"+j);
				if(i%j == 0) {
					a=false;
					break;
				}
				//a = true;
			}
			if(a){
				System.out.println(j+"소수이다");
			}
		}
//3x + 2y = 10 의 해를 구하기 단 x,y는 정수이며 0<=x,y<=0을 만족한다.
				//x=(10-2y)/3
		System.out.println("a");
		for(int x=0;x<=10;x++) {
			for(int y=0;y<=10;y++) {
				if(3*x+2*y==10) {
					System.out.println("x:"+x+" y:"+y);
				}
			}
		}
	}
}

while

while(){    } : () 안의 조건이  true일 때 {} 안의 문장을 반복한다.

정해진 횟수가 아닌 경우 while을 주로 사용한다.

원하는 조건이 만족될 때까지 반복하고 싶을 때 사용한다.

 

예제

쌀 102통(1통은 1kg)에 저장되어있는 창고에 암수 1쌍의 쥐가 있다. 쥐 한 마리가 하루에 20g씩 쌀을 먹고 10일(10,20,30)마다 쥐의 수가 2배씩 증가한다.

며칠 만에 창고의 쌀이 모두 쥐의 먹이가 되고, 그때의 쥐의 마리수는?

package loop_while;
public classEx{
	public static void main(String[] args) {
		int rice,mouse,day;
		rice = 102000;
		mouse = 2;
		day = 0;
		while(true) {
			day++;
			rice = rice-20*mouse;
			if(day%10==0)
				mouse *=2;
			if(rice<=0)break;	
		}System.out.println("쌀이 소진 된 날"+day+"쥐의 마리수"+mouse);
	}
}

do while

다음의 종속 문장을 먼저 실행한 후에 조건식을 평가

 

do{실행문
}while(조건문);
 

 

흐름 변경

continue

반복 도중 처리를 중단하고 반복문의 시작 위치로 이동

if가 있기 때문에 잘 쓰이진 않는 편

쓰인다면 try catch절에서 catch의 실행문으로 쓰인다.

break

반복문이 실행되고 있는 시점에서 가장 근접한 반복문에서 바로 빠져나온다.

 

break bool
int i=0;
boolean bool = true;
while(bool) {
                    i++;
                    if(i==3) {
                    break;
                    }System.out.println("i:"+i);
            }
System.out.println("다음문장 실행");





int i=0;
boolean bool = true;
while(bool) {
                    i++;
                    if(i==3) {
                    bool = false;
                    }
                    System.out.println("i:"+i);
            }
System.out.println("다음문장 실행");



i:1
i:2
다음문장 실행

i:1
i:2
i:3
다음문장 실행

 

'코딩 공부 > Java' 카테고리의 다른 글

JAVA Random  (0) 2022.08.17
자바 콘솔 입 출력  (0) 2022.08.16
조건문  (0) 2022.08.14
연산자  (0) 2022.08.13
기본 개념  (0) 2022.08.12