- 응용_검색_성적표만들기
package day4;
import java.util.Scanner;
public class Ex01_grade {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("=====성적=====");
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 / 3.;
char 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.printf("이름\t국어\t영어\t수학\t총점\t평균\t학점\n");
System.out.printf("%s\t%d\t%d\t%d\t%d\t%.2f\t%c\n",name,kor,eng,mat,total,avg,grade);
// %d = 숫자 , %s = 문자열 , %f = 실수 , %c = 문자
System.out.print("다시입력(Y/y)>");
String reStart = sc.next();
// if(reStart.equals("Y") || reStart.equals("y")) {
// continue; 이런경우 컨티뉴가 없어도 반복한다 그러니까 이 if문은 있으나 없으나 똑같다
// }
if(!(reStart.equals("Y") || reStart.equals("y"))){
System.out.println("종료합니다");
break;
}
>4일차에는 새로운 프로그램 언어를 배우는 시간보다 그동안 배운것들을 응용하여 만들어보는 시간을 가졌습니다
>먼저 콘솔에 검색하여 성적표를 가져오는 코딩입니다
>Scanner를 이용하여 콘솔에 사용자가 작성 가능하게 하였습니다
>while에 true을 대입하여 스코프를 나오기 전까지 계속 반복하게 하였습니다
>사용자가 각항목의 작성위치를 알기쉽게 프린트하고 입력 받은 국어 , 영어 , 수학의 점수를 각각의 함수에 대입하게 하였습니다
>이후 3과목의 점수를 합치고 total변수에 대입하고 소수점까지 알아보기 위해 duoble변수를 이용하여 total을 3으로 나눠 대입하였습니다
>이후 char변수를 grade로 선언 후 문자를 대입하기 위해 ' '만 대입하고 비웠습니다
>이제 if문을 사용하여 평균을 담은 double변수의 이름인 avg가 각점수 이상일 경우
>각 학점을 변수 grade에 대입하도록 만들었습니다
>이후 프린트를 이용하여 보기 좋게 콘솔에 프린트하였습니다
> // %d = 숫자 , %s = 문자열 , %f = 실수 , %c = 문자 꾸미기에 사용된 코드입니다
>이후 다른 사람이 학점을 검색할 경우를 대비해 다시 하기와 종료하기를 if문으로 설정하였습니다
- 응용 _ 계산기 만들기
package day4;
import java.util.Scanner;
public class Ex02_calculator2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
boolean run = true;
double result = 0;
while (run) {
System.out.println("====계산기====");
System.out.println("1.더하기 2.빼기 3.곱하기 4.나누기 5.나머지 0.종료");
System.out.print("선택한 메뉴는? >");
int menu = sc.nextInt();
if (menu == 0) {
System.out.println("프로그램 종료");
break;
} else if (menu > 5 || menu < 0) {
System.out.println("0~5까지만 입력가능합니다");
continue;
}
System.out.print("첫번째 숫자 입력>");
int num1 = sc.nextInt();
System.out.print("두번째 숫자 입력>");
int num2 = sc.nextInt();
switch (menu) {
case 1:
System.out.printf("%d + %d = %d \n", num1, num2, num1 + num2);
result = num1 + num2;
break;
case 2:
System.out.printf("%d - %d = %d \n", num1, num2, num1 - num2);
result = num1 - num2;
break;
case 3:
System.out.printf("%d * %d = %d \n", num1, num2, num1 * num2);
result = num1 * num2;
break;
case 4:
System.out.printf("%d / %d = %.2f \n", num1, num2, num1 / (double) num2);
result = num1 / (double) num2;
break;
case 5:
System.out.printf("%d %% %d = %d \n", num1, num2, num1 % num2);
result = num1 % num2;
break;
}
>switch를 이용하여 계산기를 만들어봤습니다
>먼저 Scanner를 이용하여 사용자가 콘솔에 입력 가능하게 만들었습니다
>이후 while문을 이용하여 사용자가 작성할 위치와 명령문을 반복하게 만들었습니다
>먼저 사용자가 원하는 공식을 변수 menu로 가져와 대입하였고
>if문과 switch문에 대입하여 menu에 각 수가 대입될 경우의 조건을 설정했습니다
>처음 if문에는 0을 입력하면 종료 else if문에는 음수와 6이상의 수가 입력되면 특정 문구가 출려되고
>이후 continue;를 이용하여 while문 처음으로 돌아가게 설정하였습니다
>맞는 조건이 없다면 아래로 내려와 계산할 수를 입력하고 switch에 대입된 변수에 따라 계산 , 출력됩니다
>계산과 출력이 완료된 경우 break;를 이용하여 반복문을 탈출하게 됩니다
- 계산기 _ 추가 _ 응용
System.out.println();
System.out.println("1.이어하기 2.새로하기 0.종료");
System.out.println("메뉴선택>");
menu = sc.nextInt();
switch (menu) {
case 1:
while (true) {
System.out.println("1.더하기 2.빼기 3.곱하기 4.나누기 5.나머지 0.종료");
System.out.print("선택한 메뉴는? >");
menu = sc.nextInt();
;
System.out.println("숫자입력>");
int num = sc.nextInt();
if (menu == 1) {
System.out.printf("%.2f + %d = %.2f", result, num, result + num);
} else if (menu == 2) {
System.out.printf("%.2f - %d = %.2f", result, num, result - num);
} else if (menu == 3) {
System.out.printf("%.2f * %d = %.2f", result, num, result * num);
} else if (menu == 4) {
System.out.printf("%.2f / %d = %.2f", result, num, result / num);
} else if (menu == 5) {
System.out.printf("%.2f %% %d = %.2f", result, num, result % num);
}
System.out.println();
System.out.println("1.이어하기 2.새로하기 0.종료");
System.out.println("메뉴 선택>");
menu = sc.nextInt();
if (menu == 1) {
} else if (menu == 2) {
break;
} else if (menu == 0) {
System.out.println("종료합니다");
run = false;
break;
} else if (menu < 0 || menu > 2) {
System.out.println("0~2까지 입력가능합니다");
}
}
>위에서 계산을 마친 후 이어하기 , 새로하기 , 종료를 추가하는 응용 방법입니다
>위에서 계산을 마치고 break;로 빠져 나왔기에 위에서 사용한 while문 밖에서 menu를 새로 출력하고
>여기서 사용된 변수 menu는 위의 변수menu와 이름이 같지만 처음 사용된 while문은 이미 지나왔기에 문제 없습니다
>1번인 이어하기를 누른경우 위에서 계산한 값에서 새로운 매뉴로 추가 계산을 하는것이기에
>미리 result에 전에 계산한 변수를 담았습니다 이렇게 대입받은 변수로 if문을 이용하여 계산식을 작성하고 출력
>아래의 if문에서는 menu에 1을 대입하면 2번째 while문을 다시 반복하게 만들었습니다
>이후는 else if를 이용하여 종료와 지정 수 이외의 번호를 입력하면 입력 가능한 수 범위를 프린트하게 하였습니다
- 정렬_범위를 받고_오름차 순_내림차 순_출력
public class Ex03_sort {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("====정렬====");
System.out.println("숫자입력>");
int num = sc.nextInt();
System.out.println("1.오름차순 2.내림차순");
System.out.println("메뉴선택>");
int menu = sc.nextInt();
if (menu == 1) {
for (int i = 1; i <= num; i++) {
System.out.println(i);
}
}
============내림차순 3가지 예시============
else if (menu == 2) {
for (int j = 0; num > j; num--) {
System.out.println(num);
}
for(int j=num; j > 0; j--) {
System.out.println("j");
}
for(int j = 1 ; num > 0 ; num = num-j) {
System.out.println(num);
}
============내림차순 3가지 예시============
} else {
System.out.println("메뉴는 1~2까지 선택 가능합니다");
}
}
>범위를 지정받고 1부터 오름차순 범위부터 1까지 내림차순을 출력합니다
>Scanner로 사용자가 입력 가능하게 하였습니다
>이후 while문을 사용하여 반복하게 만들었습니다
>사용자가 작성할 위치를 쉽게 찾을 수 있게 입력칸을 프린트하였습니다 입력받은 범위는 num에 저장합니다
>1~2까지의 menu만 작성 가능하게 하였고 외의 수를 입력하면 범위를 프린트하고 처음부터 다시 시작합니다
>if문을 이용하여 변수 menu에 대입되는 수에 따라 특정 for문이 사용되게 만들었습니다
>menu 1번은 오름차순입니다 오름차순은 가장 기본적인 for문을 이용하기 때문에 넘어가겠습니다
>문제는 menu 2번입니다 여러가지 출력 방법이 있지만 제가 사용한 방법은 3번입니다
>menu에 2가 대입되어 else if가 작동되는 경우 안에있는 for문이 실행됩니다
>for문의 해석은 변수 j 에 1을 넣고 변수 num이 0 보다 크다면 num - j를 한다
>조건이 참이기 위해서 num은 0보다 커야하기 때문에 입력받은 num을 1씩 빼며 1까지
>출력하게 하였습니다
- 정렬_시작 범위_마지막 범위_받고 오름차 순_내림차 순_출력
Scanner sc = new Scanner(System.in);
boolean con = true;
while (con) {
System.out.println("====정렬====");
System.out.print("첫번째 숫자 입력> ");
int num1 = sc.nextInt();
System.out.print("두번째 숫자 입력> ");
int num2 = sc.nextInt();
if (num1 > num2) {
int temp = num1;
num1 = num2;
num2 = temp;
}
System.out.println("1.오름차순 2.내림차순");
int menu = sc.nextInt();
if (menu == 1) {
for (int i = num1; i <= num2; i++) {
System.out.println(i);
}
} else if (menu == 2) {
for (int i = num2; i >= num1; i--) {
System.out.println(i);
}
>위에서 만들었던 출력문의 응용입니다
>위에서는 범위를 받고 1까지 출력했다면 이번에는 시작과 끝의 범위를 받고 menu에따라 정렬합니다
>Scanner를 이용해 사용자가 콘솔창에 입력이 가능하도록 하였습니다
>wlie문을 이용하여 스코프 안의 실행문을 반복하도록 하였습니다
>입력 공간을 찾기 쉽게 출력후 num1 , num2 변수에 각각 가져와 대입하였습니다
>먼저 변수 num1,num2중 어떤 수가 대입되었는지 모르기에 둘중 더 큰수가 num2 작은수가 num1로 대입되게 if문을 써줍니다
>만약 num1이 num2보다 크면 변수 temp에 num1을 대입하고 num1에 num2를 대입 이후 num2에 temp를 대입함으로
>전에 변수에 있던 수가 덮어씌워져 사라지는것을 방지했습니다
>num1에 큰수가 들어가는 경우에 num2로 남기는 과정을 거쳤기 때문에 num2는 굳이 조건을 설정할 필요가 없습니다
>이제 사용자가 선택한 menu를 가져옵니다 이후는 위에서 설명한 정렬 방식을 이용하여 출력합니다
- 응용_up&down게임_만들기
package day4;
import java.util.Scanner;
public class Ex04_updown {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 문제 )숫자를 계속 입력 받으면서 정답을 맞추는 게임
// 정답이 입력받은 숫자보다 크면 up 출력
// 정답이 입력받은 숫자보다 작으면 down 출력
// 정답을 맞추면 정답 출력후 반복문 out 빠져나오기
Scanner sc = new Scanner(System.in);
double answer = (int) (Math.random() * 31) + 1;
>Math.random의 뜻은 0.1부터 1전까지의 랜덤한 숫자를 넣어줌
>int 강제 변형하였지만 이럴경우 int는 정수만 출력하기에 소수점을 제외하여 0만출력됨
>그렇기에 *31을하여 0이상의 수로 만들고 소수점은 지워짐
>+1은 굳이 *31을 안해도 된다는 설명임
double q = answer;
boolean con = true;
int j = 0;
int v = 10;
while (con) {
System.out.print("정답은 무엇일까요? >");
int i = sc.nextInt();
j++;
v--;
if (i == q) {
System.out.println("정답입니다!\n");
System.out.println(j + "번 만에 정답을 맞췄습니다");
if (j <= 1) {
System.out.println("perfect");
break;
} else if (j <= 3) {
System.out.println("great");
break;
} else if (j <= 5) {
System.out.println("good");
break;
} else if (j <= 10) {
System.out.println("normal");
break;
}
} else if (i != q && i > q) {
System.out.println("\n정답이 아닙니다! down");
System.out.println(j+"번 틀렸습니다");
if(j >= 10) {
System.out.println("game over");
break;
}
System.out.println("기회가"+v+"번 남았습니다\n");
continue;
} else if(i !=q && i < q){
System.out.println("\n정답이 아닙니다! up");
System.out.println(j+"번 틀렸습니다");
if(j >= 10) {
System.out.println("game over");
break;
}
System.out.println("기회가"+v+"번 남았습니다\n");
continue;
}
}
}
}
>이건 31사이의 랜덤한 숫자를 찾는 게임이기 때문에
>반복문과 조건문에 변수만 잘 대입하고 출력해주면 되는 문제임
>설명으로하면 너무 길어지기 때문에 위에서 부터 읽어보며 이해를 하는게 더 빠름
>변수 설정은 정답은 변수 q 사용자가 입력한 답은 변수 i에 저장했음
>몇번 틀렷는지 알기 위해 변수 j에 0을 대입함 기회는 10번로 설정 남은 기회를 알려주기 위해 변수 v에 10을 대입함
>반복문 while을 이용 특정 조건에 맞지 않으면 계속 반복하게함
>조건문 if에는 정답 , 오답up , 오답 down 을 대분류로 생각하고 만들면 편함
>이제 조건문만 잘 설정해주면 완성할 수 있음 내용은 위를 참고
'나의 수업일지' 카테고리의 다른 글
인천 일보 아카데미 5일차 []배열 알아보기 (0) | 2023.02.27 |
---|---|
인천 일보 아카데미 (주말 숙제) (0) | 2023.02.27 |
인천 일보 아카데미 3일차 배운 변수와 문법을 사용하여 만들어보기 (0) | 2023.02.23 |
인천일보 아카데미 2일차 조건문 switch / 반복문 for / 반복문 while (1) | 2023.02.22 |
인천일보 아카데미 1일차 (오후) 조건문 if 와 Scanner (1) | 2023.02.21 |