분류 전체보기 (135)

20230918
728x90

 

수업내용 정리 (Java)

 

1.반복문_break_continue

 1-1) break: 멈추기

for(int i=1; i<=10; i++) {
	if(i==5) {
		break;
	}
	System.out.println(i);
}
  • for문은 i가 10보다 작거나 같을 때까지 반복하여 출력하라는 식인데
  • if문을 넣음으로 i가 5일때 break, 출력은 4까지만 된다.

 

 1-2) continue: 건너뛰기

for(int i=1; i<=10; i++) {
	if(i==5) {
		continue;
	}
	System.out.println(i);
}
  • for문은 i가 10보다 작거나 같을 때까지 반복하여 출력하라는 식인데
  • if문을 넣음으로 i가 5일때 continue, 출력은 5를 뺀 나머지 1~10이 출력된다.

 

2. 반복문_while

while(조건문){
	
}
  • 조건문이 참일 동안에 반복해서 실행

 

while(1 == 1) {
	System.out.println("자바는 즐거워");
}
  • 조건문이 참이고, while은 조건문이 참일 동안에 실행한다고 그랬으니 이 식은 "자바는 즐거워"가 무한으로 출력된다.

 

int i = 1;
while(i < 100) {
	System.out.println("자바는 즐거워");
    i++;
}
  • i는 1이고, while은 10보다 작을 동안에 실행한다.
  • i++;을 씀으로 한 번 실행할 때마다 i에 1씩 추가가 되므로 "자바는 즐거워"가 99번 출력된다.
int i = 1;
while(i < 100) {
	System.out.println("자바는 즐거워");
    i++;
    if (i == 5){
    	break;
    }
}
  • 이 경우, if문으로 i가 5가 되면 break하라는 식이 적혀있으니, 다시 실행되기 전에 멈춰서 "자바는 즐거워"가 4번 출력된다.

 

 2-1 while_예제

// 1~100까지의 합
int sum = 0;
int i = 1;
while(i <= 100) {
    sum=sum+i;
    i++;
}
System.out.println(sum);
  • i가 100보다 작거나 같을 때까지 반복
  • 반복할 때마다 i가 1씩 증가

 

Scanner sc = new Scanner(System.in);

while(true){
	System.out.print("숫자 입력> ")
	int num = sc.nextInt();

	if(num == 0){
		break;
	}
	System.out.println("입력받은 값: "+num);
}
System.out.println("반복문 종료");
  • 숫자를 입력받고, 입력받은 숫자를 다시 출력
  • 입력받은 숫자가 0이면 while을 빠져나와서 "반복문 종료" 출력

 

Scanner sc = new Scanner(System.in);

while(true) {
	System.out.print("숫자 입력> ");
	int num = sc.nextInt();
	
	if(num==0) {
		break;
	}
	if(num%15==0) {
		System.out.println("입력받은 값: "+num+"는 3과 5의 배수입니다.");
	}else if(num%3==0) {
		System.out.println("입력받은 값: "+num+"는 3의 배수입니다.");
	}else if(num%5==0) {
		System.out.println("입력받은 값: "+num+"는 5의 배수입니다.");
	}else {
		System.out.println("입력받은 값: "+num);
	}
	
}
System.out.println("반복문 종료");
  • 숫자를 입력받고, 입력받은 숫자가 3의배수, 5의배수, 3과5의배수일 경우, 해당 숫자가 무엇의 배수인지 출력
  • 입력받은 숫자가 0이면 while을 빠져나와서 "반복문 종료" 출력

 

 2-2 while_예제(자판기)

Scanner sc = new Scanner(System.in);
int money = 10000;

while(true) {
	System.out.println("======자판기=====  잔액: "+money+"원");
	System.out.println("1.콜라(1,000원) 2.사이다(1,200원) 3.우유(1,500원) 0.종료");
	System.out.print("메뉴 선택> ");
	int menu = sc.nextInt();
	
	if(menu == 1) {
		if(money>=1000) {
			System.out.println("콜라 선택");
			money = money-1000;  // money -= 1000
		}else {
			System.out.println("잔액 부족입니다.");
		}
	}else if(menu == 2) {
		if(money>=1200) {
			System.out.println("사이다 선택");
			money -=1200;
		}else {
			System.out.println("잔액 부족입니다.");
		}
	}else if(menu == 3) {
		if(money>=1500) {
			System.out.println("우유 선택");
			money-=1500;
		}else {
			System.out.println("잔액 부족입니다.");
		}
	}else if(menu == 0) {
		System.out.println("프로그램 종료");
		break;
	}else {
		System.out.println("없는 번호입니다.");
	}
	
	System.out.println();
}
  • 입력받은 수가 1일 때
    잔액(money)이 1000원 이상일 경우에만 콜라 선택이 되고, 아닐 경우 "잔액이 부족합니다." 출력
  • 입력받은 수가 2일 때
    잔액(money)이 1200원 이상일 경우에만 사이다 선택이 되고, 아닐 경우 "잔액이 부족합니다." 출력
  • 입력받은 수가 3일 때
    잔액(money)이 1500원 이상일 경우에만 우유 선택이 되고, 아닐 경우 "잔액이 부족합니다." 출력
  • 입력받은 수가 0일 때, "프로그램 종료"를 출력하고 break가 있으니 while문을 빠져나온다.
  • 입력받은 수가 그 외의 숫자일 경우, "없는 번호입니다." 출력

 

 2-3 while_예제(로그인)

Scanner sc = new Scanner(System.in);
String id = "test";  //회원가입한 아이디
String pw = "1234";  //회원가입한 비밀번호

while(true) {
	System.out.println("=====홈페이지=====");
	System.out.print("아이디 입력> ");
	String loginId = sc.next();
	System.out.print("비밀번호 입력> ");
	String loginPw = sc.next();
	
	if(loginId.equals(id)&&loginPw.equals(pw)) {
		System.out.println("로그인 성공!");
		break;
	}else {
		System.out.println("로그인 실패");
		System.out.print("로그인 재시도 (Y/y)> ");
		String re = sc.next();
		if(!(re.equals("Y") || re.equals("y"))) {
			break;
		}
	}
	
	System.out.println();
}

System.out.println("프로그램 종료");
  • 회원가입한 아이디와 비밀번호를 제대로 입력했을 때, "로그인 성공!" 출력 후 break로 while문을 빠져나온다.
  • 회원가입한 아이디와 비밀번호를 제대로 입력하지 못하면 "로그인 실패"를 띄우고 로그인 재시도를 할 것인지 묻는 말을 출력
    이후 입력받은 답이 "Y", "y"가 아닐 경우 break를 통해 while문을 빠져나온다.
    "Y", "y"인 경우, 다시 로그인 시도를 한다.

 

 2-4 while_예제(성적)

Scanner sc = new Scanner(System.in);

boolean run = true;

while(run) {
	System.out.print("이름> ");
	String name = sc.next();
	System.out.print("국어> ");
	int kor = sc.nextInt();
	System.out.print("영어> ");
	int eng = sc.nextInt();
	System.out.print("수학> ");
	int mat = sc.nextInt();
	int total = kor+eng+mat;
	double avg = total / (double)3;
	String grade = "";
	
	if(avg >= 90) {
		grade = "A";
	}else if(avg >= 80) {
		grade = "B";
	}else if(avg >= 70) {
		grade = "C";
	}else if(avg >= 60) {
		grade = "D";
	}else {
		grade = "F";
	}
	
	System.out.println();
	System.out.println("이름\t국어\t영어\t수학\t총점\t평균\t학점");
	System.out.println("===================================================");
	System.out.printf("%s\t%d\t%d\t%d\t%d\t%.2f\t%s\n",
			name, kor, eng, mat, total, avg, grade);
	
	//printf: % 위치에 순서대로 대입된다. %s %d 등, % 뒤 영어는 타입에 따라 달라진다.
	//f 앞에 .2를 입력한 이유는 소수점을 2자리 숫자만 출력하기 위해서.
	
	System.out.print("계속 입력하시겠습니까? (Y/y)> ");
	String re = sc.next();
	if(!(re.equals("Y")||re.equals("y"))) {
		break;
	}
	
	System.out.println();
}
  • 콘솔창에서 이름, 국어 점수, 영어 점수, 수학 점수를 입력받아 총점, 평균, 학점을 계산하는 식
  • "Y", "y"를 입력하면 다시 입력할 수 있고, 이 외를 입력하면 종료된다.
  • ! printf
    System.out.printf("출력 서식", 출력할 내용);
    %d (정수형 출력)
    %s (문자형 출력)
    %f (실수형 출력)
    %c (문자형 출력)
    %n (줄 바꿈)
    %b (boolean 출력)

출력 내용

 

 2-5 while_예제(up&down)

Scanner sc = new Scanner(System.in);
int answer = (int)(Math.random()*31)+1;

int sum = 0;
int hp = 5;

while(true) {

	if(hp<=0) {
		System.out.println("시도 가능 횟수를 모두 사용하셨습니다.");
		System.out.println("Game Over!");
		break;
	}
	
	System.out.println("============up&down============");
	System.out.println("1~31까지 숫자를 입력하세요. 시도 횟수 "+(5-hp)+"/5");
	System.out.print("숫자 입력> ");
	int num = sc.nextInt();
	sum++;
	
	if(num>32) {
		System.out.println("1~31 사이의 숫자를 입력해주세요.");
		hp--;
	}else if(num > answer) {
		System.out.println("down!");
		hp--;
	}else if(num < answer) {
		System.out.println("up!");
		hp--;
	}else if(num == answer && sum == 1) { 
		System.out.println("정답입니다!");
		System.out.println("첫 시도로 정답을 맞추셨습니다!");
		break;
	}else if(num == answer) {
		System.out.println("정답입니다!");
		System.out.println("시도 횟수: "+sum);
		break;
	}
	System.out.println();
}
System.out.println("up&down 종료");
  • 1~31 사이의 숫자를 랜덤으로 입력받아 그 숫자보다 낮은 수를 입력하면 up, 높은 수를 입력하면 down이 출력
  • 첫 시도로 정답을 맞추면 "첫 시도로 정답을 맞추셨습니다!" 출력
  • 정답을 맞추면 시도횟수와 "정답입니다!" 출력
  • 5회 시도에 못맞추면 "Game Over" 출력

 


 

전체 피드백

 문제를 너무 간단하게만 생각하여 풀려고 하는 경향이 있는 것 같다. 생각을 좀 더 깊이해야할 것 같다.

 처음 배우는 것의 문제를 풀 때, 이미 배운 것들을 응용해서 풀 수 있는데도 그러지 않다가 예제를 한 번이라도 봐야 응용하기 시작하는 것 같다.

 


728x90
20230916~17
1 ··· 17 18 19 20 21 22 23 ··· 45