2024년 7월 10일
오늘 숙제는 2개,,,, 진짜진짜 어려워서 짝꿍한테 물어봐서 겨우 풀었다...
알고보니 이론이 너무 부족했던 것이라 이론부터 다시 공부하고 다시 풀고 했다...
수업끝나고 나머지 공부를 했지만 아직도 부족한 것 같다 더 열심히 하자구,,,,
[문제 1] 성적처리 프로그램
- 5문제의 사지선다형 문제이다.
- 정답은 "11111"
static final String jung = "11111"; //상수화
- 1문제당 20점씩 한다.
[실행결과]
인원수 입력 : 2
이름 입력 : 홍길동
답안지 입력 : 12311
이름 입력 : 코난
답안지 입력 : 11311
*** 성적표 ***
이름 1 2 3 4 5 점수
홍길동 O X X O O 60
코난 O O X O O 80
package homework;
import java.util.Scanner;
public class SungjukOX {
static final String JUNG = "11111"; //필드 - 상수화(대문자씀)
//- 값을 변경할 수 없는 고정되어있는 상수
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("인원수 입력 : ");
int size = scan.nextInt();
String[] name = new String[size];
String dap;
char[][] ox = new char[size][5]; // String[] ox = new String[2]
int[] score = new int[size];
//입력, 비교
for(int i=0; i<size; i++) {
System.out.print("이름 입력 : ");
name[i] = scan.next();
System.out.print("답안지 입력 : ");
dap = scan.next();
//비교
for(int j=0; j<JUNG.length(); j++) { //5문제
//for(int j=0; j<ox[i].length(); j++) { //ox.length() 하면 안 됨.
if(dap.charAt(j) == JUNG.charAt(j)) {
ox[i][j] = 'O';
score[i] += 20;
}else {
ox[i][j] = 'X';
}
}
}
System.out.println(" *** 성적표 ***");
System.out.println("이름\t1 2 3 4 5\t점수");
for(int i=0; i<size; i++) {
System.out.print(name[i] + "\t");
for(int j=0; j<JUNG.length(); j++) {
System.out.print(ox[i][j] + " ");
}
System.out.println( "\t"+ score[i]);
}
}
}
인원수 입력 : 2
이름 입력 : 전수민
답안지 입력 : 12354
이름 입력 : 진채린
답안지 입력 : 12111
*** 성적표 ***
이름 1 2 3 4 5 점수
전수민 O X X X X 20
진채린 O X O O O 80
여기서 관건은 내 답과 답안지를 비교하는 부분이다.
for(int j=0; j<JUNG.length(); j++) { //5문제
if(dap.charAt(j) == JUNG.charAt(j)) {
ox[i][j] = 'O';
score[i] += 20;
}else {
ox[i][j] = 'X';
}
}
dap.charAt(j) == JUNG.charAt(j)
charAt() 함수를 이용해서 한 글자씩 비교해서 맞으면
ox 배열에 'O'를 넣고 점수에 20점을 추가하면 된다.
[문제 2] 성적 계산
- 인원수를 입력하여 인원수만큼 데이터를 입력받고 총점과 평균을 구하시오
- 평균은 소수이하 2째자리까지 출력
[실행결과]
인원수 : 2 (cnt)
이름 입력 : 홍길동 (name)
과목수 입력 : 2 (subjectCnt)
과목명 입력 : 국어 (subject)
과목명 입력 : 영어
국어 점수 입력 : 95 (jumsu)
영어 점수 입력 : 100
---------------------
이름 입력 : 이기자
과목수 입력 : 3
과목명 입력 : 국어
과목명 입력 : 영어
과목명 입력 : 과학
국어 점수 입력 : 95
영어 점수 입력 : 100
과학 점수 입력 : 90
---------------------
이름 국어 영어 총점 평균
홍길동 95 100 xxx xx.xx
이름 국어 영어 과학 총점 평균
이기자 95 100 90 xxx xx.xx
package homework;
import java.util.Scanner;
public class Sungjuk {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("인원수 입력 : ");
int cnt = scan.nextInt();
String[] name = new String[cnt];
double[] avg = new double[cnt];
String[][] subject = new String[cnt][]; // 아직 배열 생성 x
int[][] jumsu = new int[cnt][];
//입력
for(int i=0; i<cnt; i++) {
System.out.print("이름 입력 : ");
name[i] = scan.next();
System.out.print("과목수 입력 : ");
int subjectCnt = scan.nextInt();
subject[i] = new String[subjectCnt]; //가변길이 생성
jumsu[i] = new int[subjectCnt+1]; //생성 - 과목수 + 총점
for(int j=0; j<subjectCnt; j++) {
System.out.print("과목명 입력 : ");
subject[i][j] = scan.next();
}
for(int k=0; k<subjectCnt; k++) {
System.out.print(subject[i][k] + " 점수 입력 : ");
jumsu[i][k] = scan.nextInt();
jumsu[i][subjectCnt] += jumsu[i][k];
}
System.out.println("---------------------");
avg[i] = (double)jumsu[i][subjectCnt] / subjectCnt;
}
//출력
for(int i=0; i<cnt; i++) {
//제목
System.out.print("이름 \t");
for(int j=0; j<subject[i].length; j++) {
System.out.print(subject[i][j] + "\t");
}
System.out.println("총점\t평균");
//데이터
System.out.print(name[i] + "\t");
for(int j=0; j<jumsu[i].length; j++) {
System.out.print(jumsu[i][j] + "\t");
}
System.out.println(String.format("%.2f", avg[i]));
}
}
}
인원수 입력 : 2
이름 입력 : 전수민
과목수 입력 : 2
과목명 입력 : 영어
과목명 입력 : 수학
영어 점수 입력 : 98
수학 점수 입력 : 95
---------------------
이름 입력 : 진채린
과목수 입력 : 3
과목명 입력 : 수학
과목명 입력 : 과학
과목명 입력 : 국어
수학 점수 입력 : 56
과학 점수 입력 : 65
국어 점수 입력 : 75
---------------------
이름 영어 수학 총점 평균
전수민 98 95 193 96.50
이름 수학 과학 국어 총점 평균
진채린 56 65 75 196 65.33
이 문제를 풀면서 진짜,,,, 이론이 확 안 잡혀있다는 것을 느꼈다.
for문 범위 설정할 때 subject.length인지 subject[i].length인지도 헷갈렸으니...
이제는 확실히 앞에께 행을 나타내며 뒤에께 열을 나타낸다는 것을 알겠도다,,,
이래서 애매하게 알면 실행했을 때 다 오류가나는 대참사가,,,,
'HOMEWORK' 카테고리의 다른 글
DAY 4 - HOMEWORK - 덧셈계산 / 2~9단 3개씩 출력 (0) | 2024.08.13 |
---|---|
DAY5 - HOMEWORK - 주차장 관리 프로그램 (2024.07.09) (0) | 2024.08.13 |
DAY 8 - HOMEWORK 치환 / 사지선다형 (2024.07.12) (0) | 2024.08.12 |
DAY 9 - HOMEWORK - 과일판매량 (2024.07.15) (0) | 2024.08.12 |
DAY 10 - HOMEWORK - 달력 (2024.07.16) (0) | 2024.08.12 |