개념 부족(switch 능숙하게 사용x, scanner은 익숙한데 BufferedReader는 덜 익숙함)
그러나 BufferedReader이 속도가 더 빠르다고 해서 익숙하도록 자주 사용할 예정이다.
2754
문제
어떤 사람의 C언어 성적이 주어졌을 때, 평점은 몇 점인지 출력하는 프로그램을 작성하시오.
A+: 4.3, A0: 4.0, A-: 3.7
B+: 3.3, B0: 3.0, B-: 2.7
C+: 2.3, C0: 2.0, C-: 1.7
D+: 1.3, D0: 1.0, D-: 0.7
F: 0.0
입력
첫째 줄에 C언어 성적이 주어진다. 성적은 문제에서 설명한 13가지 중 하나이다.
출력
첫째 줄에 C언어 평점을 출력한다.
예제 입력 1
A0
예제 출력 1
4.0
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class HelloWorldApp {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
char c = s.charAt(0);
**if(c=='F') {
System.out.println(0.0);
return;
}**//맨 처음에 이부분 신경안썼더니 오류났음 F만 유일하게 딱 한개의 알파벳이어서
double grade = 0;
switch (c) {
case 'A':
grade = 4;
break;
case 'B':
grade = 3;
break;
case 'C':
grade = 2;
break;
case 'D':
grade = 1;
break;
default:
grade = 0;
break;
}
c = s.charAt(1);
if (c == '+')
grade += 0.3;
else if (c == '-')
grade -= 0.3;
System.out.print(grade);
}
}
총 정리 : 먼저 알파벳으로 switch 하고 나중에 +- 따져주는 논리구조 괜찮음, 대신 특수상황 먼저 처리가 필요함 이 문제에서는 F (딱 한 알파벳)
s.charAt(1)에서 에러가 났음 그래서 먼저 s의 길이를 확인하는 방법도 chatgpt가 알려줬지만... 조금 어색한 코드가 되어버림 StringIndexOutOfBoundsException 이 에러는 입력으로 한 글자만 들어온 경우
break vs return (switch문에 덜 익숙하지만 return도 가능)
break;: break;은 반복문이나 switch 문을 중단하고 다음 코드 블록으로 제어를 넘깁니다. 주로 switch 문에서 사용되며, 해당 case에 해당하는 코드 블록을 실행하고 switch 문을 빠져나가게 됩니다. 반면에 반복문에서는 반복을 종료하고 빠져나가는 역할을 합니다.
return;: return;은 현재 메소드를 즉시 종료하고 호출한 곳으로 돌아가게 합니다. 메소드가 반환형을 가지고 있을 때는 해당 반환형의 기본값을 반환하게 되며, 반환형이 void일 경우 그냥 종료합니다. 이는 메소드 전체를 종료하는 효과가 있습니다.