import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//Scanner sc = new Scanner(System.in); 여기서 생성하면 안됨
while (true) {
Scanner sc = new Scanner(System.in);
try {
System.out.print("첫 번째 정수를 입력하세요: ");
int x = sc.nextInt();
break;
} catch (Exception e) {
System.out.println("정수만 입력해주세요");
}
}
}
}
지난 TIL에 올라왔던 '꼼꼼하게 예외처리하기'이다. 위 소스는 하나의 변수(x)만 제대로 받을때 까지 돌리지만 이번에 팀과제를 하면서 여러개의 변수를 받아야 할 일이 생겼다. 그래서
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
while (true) {
Scanner sc1 = new Scanner(System.in);
try {
System.out.print("첫 번째 정수를 입력하세요: ");
int x = sc1.nextInt();
break;
} catch (Exception e) {
System.out.println("정수만 입력해주세요");
}
}
while (true) {
Scanner sc2 = new Scanner(System.in);
try {
System.out.print("첫 번째 정수를 입력하세요: ");
int x = sc2.nextInt();
break;
} catch (Exception e) {
System.out.println("정수만 입력해주세요");
}
}
}
}
이렇게 스캐너인스턴스를 늘려가면서 하는 수 밖에 없겠다.. 싶어서, 일단 코딩하기전에 팀원분들께 상황을 이야기했다. 괜히 친밀감 느껴졌던게, 지난번 코드에서 주석자리에 쓰면 무한루프돈다는 걸 못받아들이셔서 직접 보여드렸더니, 굉장히 흥미로워하시면서 기다려보라고하셨다. 인스턴스 안늘리고 해보겠다고. 그렇게 나온 결과가
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
try {
System.out.print("첫 번째 정수를 입력하세요: ");
int x = sc.nextInt();
break;
} catch (Exception e) {
System.out.println("정수만 입력해주세요");
sc.next(); //여기가 Kick이다
}
}
while (true) {
try {
System.out.print("첫 번째 정수를 입력하세요: ");
int y = sc.nextInt();
break;
} catch (Exception e) {
System.out.println("정수만 입력해주세요");
sc.next(); //여기가 Kick이다
}
}
진짜 신기하게도 저 한줄로 해결이 가능했다. 왜인지 알아보니, 만약에 x에 정수가 아닌 값(ex B)을 넣으면 그 값이 둥둥 떠다니다가 sc.next()의 대상이 되어서 더 입력하지 않아도 넘어간다는 것이었다. 일단 다음주월요일에 튜터님한테 제대로 물어봐야겠다.
private static void createScore() {
String studentId = getStudentId(); // 관리할 수강생 고유 번호
System.out.println("시험 점수를 등록합니다...");
for (Student student : studentStore.values()) {
if (student.getStudentId().equals(studentId)) {
SetScore setScore = new SetScore(student);
setScore.setScore();
break;
}
}
System.out.println("\n점수 등록 성공!");
}
'수강생 점수 등록'이 내가 맡은 기능이었다. 일전에 알고리즘 코드카타를 하면서 컬렉션에 Integer나 String밖에 안넣어봤는데, 베이스 코드소스를 먼저 만든 팀장님 코드를 보니 Map<Subject, List<Score객체>>로 되어있어서 진짜 멘붕이었다..🙃🙃 그래도 혼자 한시간동안 영차영차해서 최대한 해결하고, 모르는 부분 2개를 팀원분들께 여쭤봤는데 진짜 여러모로 많이 배웠다. for문자리엔 원래 '주석으로 studentId에맞는 객체 불러오기'라고 적어놓고 구현을 못하고 있었는데 도와주셔서 금방 해결할수있었다. 지금보니 그래도 무슨 코딩인지 바로 와닿을 정도로 오늘 상대적으로 자바 코딩을 많이 알아간 날이라 뿌듯했다. 고맙습니다 팀원분들