switch문은 너무 일차원적이라서 등급과 평점을 다른 배열에 저장해두고, 해당 등급을 갖는 인덱스 값을 이용해서 평점 배열에서 평점을 찾는 식으로 코드를 짜 보았다.
글을 작성하면서 2차원 배열로도 할 수 있지 아늘까 싶었는데 타입이 다르네,, 지피티한테 물어보니까 객체 배열을 사용하라네? 음 썩 좋은 방법 같진 않아서 java 더 공부하며 고민해 봐야겠다🤔
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String gradeList[] = {"A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F"};
double creditList[] = {4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0.0};
double total_credit = 0;
double score = 0;
for(int i=0; i<20; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
st.nextToken();
double credit = Double.parseDouble(st.nextToken());
String grade = st.nextToken();
if(grade.equals("P"))
continue;
total_credit += credit;
int gradeToCredit = Arrays.asList(gradeList).indexOf(grade);
score += credit * creditList[gradeToCredit];
}
System.out.println(score / total_credit);
}
}
🟣 grade.equals("P")
➡️ 처음에 grade == "P"를 사용했는데, 자바에서는 문자열 비교 시 == 연산자는 문자열의 내용이 아닌 참조를 비교하므로, 두 개의 서로 다른 객체가 동일한 문자열 값을 가지고 있어도 == 연산자는 false를 반환할 수 있다!
🟣 Arrays.asList(gradeList).indexOf(grade);
➡️ 입력받은 등급을 gradeList에서 찾아 해당 인덱스를 뽑고, 그 인덱스를 활용하여 creditList에서 평점을 찾을 때 for문으로 배열을 다 순회하는 것이 아닌, indexOf 메서드를 사용하였다. 하지만 indexOf()는 String 타입과 List 계열의 타입에서만 사용 가능하다. 따라서 배열에서 indexOf()를 사용하려면 이를 List타입으로 변환해 주어야 한다.