jeongwon
[연습문제] 반복문 본문
문제: 성적 프로그램 작성.
import java.util.Scanner;
public class TotalScore {
public static void main(String[] args) {
int kor, eng, mat, tot;
int kor2, eng2, mat2, tot2;
int kor3, eng3, mat3, tot3;
double avg, avg2, avg3;
String grade, grade2, grade3="";
Scanner sc = new Scanner(System.in);
System.out.print("국어:");
kor = sc.nextInt();
System.out.print("영어:");
eng = sc.nextInt();
System.out.print("수학:");
mat = sc.nextInt();
System.out.println();
tot = kor+eng+mat;
avg = tot/3.0;
switch ((int) (avg / 10)) {
case 10:
case 9:
grade = "수";
break;
case 8:
grade = "우";
break;
case 7:
grade = "미";
break;
case 6:
grade = "양";
break;
default:
grade = "가";
}// end switch
System.out.print("국어:");
kor2 = sc.nextInt();
System.out.print("영어:");
eng2 = sc.nextInt();
System.out.print("수학:");
mat2 = sc.nextInt();
System.out.println();
tot2 = kor2+eng2+mat2;
avg2 = tot2/3.0;
switch ((int) (avg2 / 10)) {
case 10:
case 9:
grade2 = "수";
break;
case 8:
grade2 = "우";
break;
case 7:
grade2 = "미";
break;
case 6:
grade2 = "양";
break;
default:
grade2 = "가";
}// end switch
System.out.print("국어:");
kor3 = sc.nextInt();
System.out.print("영어:");
eng3 = sc.nextInt();
System.out.print("수학:");
mat3 = sc.nextInt();
System.out.println();
tot3 = kor3+eng3+mat3;
avg3 = tot3/3.0;
sc.close();
switch ((int) (avg3 / 10)) {
case 10:
case 9:
grade3 = "수";
break;
case 8:
grade3 = "우";
break;
case 7:
grade3 = "미";
break;
case 6:
grade3 = "양";
break;
default:
grade3 = "가";
}// end switch
System.out.println("=============================================");
System.out.println("국어\t영어\t수학\t총점\t평균\t등급");
System.out.println("---------------------------------------------");
System.out.printf("%d\t%d\t%d\t%d\t%.1f\t%s\n", kor, eng, mat, tot, avg, grade);
System.out.printf("%d\t%d\t%d\t%d\t%.1f\t%s\n", kor2, eng2, mat2, tot2, avg2, grade2);
System.out.printf("%d\t%d\t%d\t%d\t%.1f\t%s\n", kor3, eng3, mat3, tot3, avg3, grade3);
System.out.println("=============================================");
}
}
반복문을 이용해 입력값을 받으려 했지만 변수에 값을 누적으로 저장할 수 있다는 개념을 떠올리지 못해 포기했다.
개선 답안:
import java.util.Scanner;
public class Totalscore2 {
public static void main(String[] args) {
int kor, eng, mat, tot;
double avg;
String grade;
String rep = "";
Scanner sc = new Scanner(System.in);
for (int i=0; i<3; i++) {
System.out.print("국어 : ");
kor = sc.nextInt();
System.out.print("영어 : ");
eng = sc.nextInt();
System.out.print("수학 : ");
mat = sc.nextInt();
System.out.println();
tot = kor+eng+mat;
avg = tot/3.0;
switch ((int) (avg / 10)) {
case 10:
case 9:
grade = "수";
break;
case 8:
grade = "우";
break;
case 7:
grade = "미";
break;
case 6:
grade = "양";
break;
default:
grade = "가";
}// end switch
rep += kor+"\t"+eng+"\t"+ mat+ "\t"+ tot+ "\t" + avg +"\t"+ grade+"\n";
}
sc.close();
System.out.println("=============================================");
System.out.println("국어\t영어\t수학\t총점\t평균\t등급");
System.out.println("---------------------------------------------");
System.out.print(rep);
System.out.println("=============================================");
}
}
rep 이라는 변수에 값이 누적으로 저장돼 print 함수를 통해 값이 모두 출력된다.
개선답안2:
import java.util.Scanner;
public class Totalscore2 {
public static void main(String[] args) {
int kor, eng, mat, tot;
double avg;
String grade;
String rep = "";
Scanner sc = new Scanner(System.in);
for (int i=0; i<3; i++) {
System.out.print("국어 : ");
kor = sc.nextInt();
System.out.print("영어 : ");
eng = sc.nextInt();
System.out.print("수학 : ");
mat = sc.nextInt();
System.out.println();
tot = kor+eng+mat;
avg = tot/3.0;
switch ((int) (avg / 10)) {
case 10:
case 9:
grade = "수";
break;
case 8:
grade = "우";
break;
case 7:
grade = "미";
break;
case 6:
grade = "양";
break;
default:
grade = "가";
}// end switch
rep += String.format("%d\t%d\t%d\t%d\t%.1f\t%s\n", kor, eng, mat, tot, avg, grade);
}
sc.close();
System.out.println("=============================================");
System.out.println("국어\t영어\t수학\t총점\t평균\t등급");
System.out.println("---------------------------------------------");
System.out.print(rep);
System.out.println("=============================================");
}
}
String.format 함수를 이용하면 printf 기능을 활용할 수 있다. 소수점 1자리까지 설정.
'오늘의 문제' 카테고리의 다른 글
| [백준] 2480번 주사위 세 개 (0) | 2022.05.18 |
|---|---|
| [백준] 2525번 오븐 시계 (0) | 2022.05.18 |
| [자바의 정석 연습문제 9-6] System.arraycopy(), new String(char[]) (0) | 2022.05.16 |
| [백준] 2884번 - JAVA (0) | 2022.04.29 |
| [백준] 10926 번 - JAVA (0) | 2022.04.25 |