2014-05-23 2 views
-3

프로그래밍에 따라 다음과 같이 붙어 있습니다. 나는이 stacktrace를 얻는다 :InputMismatchException, 프로그래밍 수업 17

Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at Doing.LessonSeventeen.main(LessonSeventeen.java:23) 

또한 8 행에는 "리소스 누출 '키보드가 절대로 닫히지 않는다"고되어있다.

+0

_ 오류가 없습니다. 그러면 오류가 게시됩니다. 정확한 경고 메시지를 검색 했습니까? '자원 유출 ... 절대로 닫히지 않습니다. ' –

+0

** 스레드 "main"**의 예외. 그게 잘못 아닌가? – rpax

+0

"_ 키 보드가 절대로 닫히지 않았습니다."그래서 닫습니다. 그게 우리에게 정말로 필요한거야? – csmckelvey

답변

1

stdin을 닫지 않아도 아무 문제가 없으므로 JVM이 리소스를 처리하므로 리소스가 누출되지 않습니다.

분명히 스캐너를 찾고있는 IDE에 내장 된 정적 분석 기능이 있습니다 (Closeable이 원인 일 가능성이 높습니다). 닫히고, 찾지 못하고, 경고를 생성합니다.

ScannerCloseable을 구현하므로 가까운 방법이 있습니다. 가까운 IOException가 발생하기 때문에 또한, 주요 메소드 서명에 throws Exception를 추가

keyboard.close() 

처럼 main 메소드의 마지막에 행을 추가합니다. 다시 말하지만, 실제로는 stdin을 사용하지 않을 것입니다. 스캐너는 모든 종류의 입력 스트림을 처리하고 네트워크 문제로 인해 문제가 발생할 수 있으므로 IOException을 던지고 있습니다.

경고가 표시됩니다.

스택 트레이스의 경우 키보드에서 무엇을 입력하고 있습니까? 스캐너는 nextInt를 호출하므로 정수 입력이 필요합니다. 소수점을 넣으면 처리 할 수 ​​없습니다. 성적 유형을 BigDecimal으로 변경하십시오.

숫자에 소수점이 있기 때문에 부동 소수점 형식을 사용할 이유가 충분하지 않습니다. 부동 소수점은 특정 종류의 계산에 유용합니다. 계산이 포함되어 있지 않고 입력 한 내용과 프로그램에 표시되는 내용간에 차이가 발생하지 않으려면 it's simpler to use BigDecimal.

+0

이전 의견을 고맙게 생각합니다. GPA를 keyboard.nextDouble()로 변경하여 다른 오류를 수정했습니다. – Scinerio

+0

@Scinerio : 이중 언어가 언어에 내장되어 있기 때문에 double 선택이 자연 선택이되어야하는 것으로 알고 있지만 실제로는 BigDecimal을 다루기가 더 쉽습니다. 놀라움은 적습니다. 나는 여기서 당신을 문제로부터 벗어나려고 노력하고있다 :-). –

+0

그래서 Double을 사용해야한다고 생각하면 언제든지 BigDecimal과 함께 갈 수 있을까요? 고마워, 고마워. – Scinerio