inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

java scanner 오류

269

dkfma0799

작성한 질문수 1

0

txt파일에는 아래와 같이 저장되어 있습니다. 점수가 가장 높은 학생의 이름을 출력해야하고 점수가 동일할 경우 모두 출력하는 프로그램입니다.

김일번 64

김이번 83

김삼번 26

김사번 36

김오번 78

김육번 54

김칠번 60

김팔번 85

김구번 45

김십번 85

프로그램을 실행했을 때

Exception in thread "main" java.util.InputMismatchException

at java.base/java.util.Scanner.throwFor(Scanner.java:947)

at java.base/java.util.Scanner.next(Scanner.java:1602)

at java.base/java.util.Scanner.nextInt(Scanner.java:2267)

at java.base/java.util.Scanner.nextInt(Scanner.java:2221)

이렇게 오류가 발생합니다. 해결방법 아시는 분 가르쳐주세요!!ㅜㅜ

package kh;

import java.io.*;
import java.util.Scanner;

class Student
{
	//int id;
	String name;
	int grade;
	Student(String name, int grade)
	{
		//this.id=id; 
		this.name=name; 
		this.grade=grade;
	}
}
class StudentTable{
	Student[] st;
	StudentTable(int size)
	{
		st=new Student[size];	
	}
	void maxStudent()
	{
		int maxGrade=0;
		for(Student student : st) 
		{
			if(student.grade > maxGrade) 
			{
				maxGrade = student.grade;
			}
		}
		 System.out.println("최고 점수를 가진 학생:");
		 for(Student student : st) 
		 {
			 if(student.grade == maxGrade)
			 {
				 System.out.println(" " + student.name + " " + student.grade);
			 }
		 }
	}
}
public class homework05{
	public static void main(String[] args) {
		StudentTable stable;
		try {
			FileInputStream fin=new FileInputStream("C:\\Users\\user\\Desktop\\student_score.txt");
			Scanner scanner = new Scanner(fin);
			int size=scanner.nextInt();
			
			stable=new StudentTable(size);
			
			for(int i=0; i<stable.st.length; i++)
			{
				//int id=scanner.nextInt();
				String name=scanner.next();
				int grade=scanner.nextInt();
				
				stable.st[i]=new Student(name,grade);
				
				
				System.out.println(" "+name+" "+grade);
			}
			scanner.close();
			stable.maxStudent();
		}
		catch(FileNotFoundException e) 
		{
			System.out.println("file not exist");
		}
	}
}

java

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

dkfma0799님, 제시하신 코드와 오류 메시지를 보면 java.util.InputMismatchException 예외는 Scanner가 예상과 다른 타입의 데이터를 만났을 때 발생합니다. 코드 상에서 Scanner는 파일의 첫 줄에서 정수를 읽으려고 시도합니다(int size=scanner.nextInt();). 그러나 txt파일의 내용을 보면 파일의 시작이 정수가 아닌 문자열(이름)로 시작합니다. 이것이 예외의 원인입니다.

txt 파일의 첫 줄에 학생의 총 수를 읽으려고 하지만, 실제 파일에는 이름과 점수가 차례로 나열되어 있습니다. 프로그램이 파일의 첫 번째 문자열(이름)을 정수로 해석하려고 시도할 때 InputMismatchException이 발생합니다.

이 문제를 해결하기 위한 한 가지 방법은 파일에서 직접 학생의 수를 읽는 대신, 학생의 목록을 읽어내는 동안 동적으로 ArrayList와 같은 가변 크기 컬렉션을 사용하는 것입니다. 이렇게 하면 미리 학생의 수를 알 필요가 없어집니다.

아래는 수정된 코드의 일부입니다. 가변 크기의 ArrayList를 사용하여 학생들을 저장하고 관리하는 방법을 보여줍니다:

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

class StudentTable{
	ArrayList<Student> st = new ArrayList<>();

	void maxStudent() {
		int maxGrade = 0;
		for(Student student : st) {
			if(student.grade > maxGrade) {
				maxGrade = student.grade;
			}
		}
		System.out.println("최고 점수를 가진 학생:");
		for(Student student : st) {
			if(student.grade == maxGrade) {
				System.out.println(" " + student.name + " " + student.grade);
			}
		}
	}
}

public class homework05 {
	public static void main(String[] args) {
		StudentTable stable = new StudentTable();
		try {
			FileInputStream fin = new FileInputStream("C:\\Users\\user\\Desktop\\student_score.txt");
			Scanner scanner = new Scanner(fin);

			while (scanner.hasNext()) {
				String name = scanner.next();
				int grade = scanner.nextInt();
				stable.st.add(new Student(name, grade));
			}
			scanner.close();
			stable.maxStudent();
		} catch (FileNotFoundException e) {
			System.out.println("file not exist");
		}
	}
}

이 방법을 사용하면 파일의 첫 줄에 학생 수를 명시할 필요가 없으며, 파일을 끝까지 읽으면서 학생 정보를 동적으로 ArrayList에 추가할 수 있습니다.

코테 사이트 로그인 불가

0

7

1

여러 파드 환경에서 단일 실행 보장 방식

0

11

2

XAMPP에서 Apache, DB 재기동 시 접속안되는 문제

0

14

1

실습 권한이 없네요··· 이건 ··· 좀··· 401 에러떠요

0

17

1

inheritance startegy 선택시 고려사항

0

18

1

[할인쿠폰] 코테의 바이블[JAVA] 50% 할인 쿠폰 관련

0

18

1

Entity 동등성 비교

0

16

1

패키지 구분에 대해 궁금한게 있습니다

0

20

2

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

22

1

갑자기 채점 사이트가 바뀌었어요

0

29

1

문제 리스트 페이지

0

26

1

part8 Notion 링크

0

29

1

채점 사이트 관련 질문드립니다

0

23

1

인텔리제이 MCP 서버 설정 관련

0

34

2

조회속도 개선에서 더 개선하는 방법이 궁금합니다.

0

35

2

필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)

0

43

2

질문있습니다

0

28

1

1번 문제 질문입니다.

0

33

1

26년 1회 실기 해설 강의

0

61

2

음악플레이어 문제 중 코드질문

0

27

1

잠겨버린 사물함 시간초과 관련 질문입니다.

0

28

1

도메인 모델에서 관계와 규칙을 구분하는 방법

0

44

2

프로젝트 질문 문의

0

49

1

문제와 풀이4 문제점

0

46

2