수업내용 정리 (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" 출력
전체 피드백
문제를 너무 간단하게만 생각하여 풀려고 하는 경향이 있는 것 같다. 생각을 좀 더 깊이해야할 것 같다.
처음 배우는 것의 문제를 풀 때, 이미 배운 것들을 응용해서 풀 수 있는데도 그러지 않다가 예제를 한 번이라도 봐야 응용하기 시작하는 것 같다.
'프로그래밍 > 수업일지' 카테고리의 다른 글
수업일지 6일차 (23/09/21) - Java (0) | 2023.09.21 |
---|---|
수업일지 5일차 (23/09/20) - Java (0) | 2023.09.20 |
수업일지 4일차 (23/09/19) - Java (0) | 2023.09.19 |
수업일지 2일차 (23/09/15) - Java (1) | 2023.09.15 |
수업일지 1일차 (23/09/14) - Java (0) | 2023.09.14 |