landslide
50
2020-08-12 13:27:01
1
676

java.util.NoSuchElementException 에러 질문


안녕하세요.

Java 문제 풀다가 에러가 발생했는데 이유를 모르겠습니다.

scanner.close();를 주석처리하니까 정상작동은 하는데,

에러가 발생한 이유를 몰라서 질문드립니다. 


import java.util.Scanner;

public class Cpt05Test03_04 {

	public static void main(String[] args) {
		Won2Dollar toDollar = new Won2Dollar(1200);
		toDollar.run();
		Kim2Mile toMile = new Kim2Mile(1.6);
		toMile.run();
	}

}

// 슈퍼 클래스
abstract class Converter {
	abstract protected double convert(double src);
	abstract protected String getSrcString();
	abstract protected String getDestString();
	protected double ratio; // 비율
	
	public void run() {
		Scanner scanner = new Scanner(System.in);
		System.out.println(getSrcString() + "을 " + getDestString() + "로 바꿉니다.");
		System.out.print(getSrcString() + "을 입력하세요>> ");
		double val = scanner.nextDouble();
		double res = convert(val);
		System.out.println("변환 결과: " +  res + getDestString() + "입니다");
		//scanner.close(); : java.util.NoSuchElementException 에러 발생
	}
}

// 서브 클래스
class Won2Dollar extends Converter {
	// 1달러 = 1200원
	private double won;
	
	public Won2Dollar(double won) {
		this.won = won;
	}

	@Override
	protected double convert(double src) {
		return src/won;
	}

	@Override
	protected String getSrcString() {
		return "원";
	}

	@Override
	protected String getDestString() {
		return "달러";
	}
	
}

// 서브 클래스
class Kim2Mile extends Converter {
	// 1마일은 1.6km
	private double kim;
	
	public Kim2Mile(double kim) {
		this.kim = kim;
	}

	@Override
	protected double convert(double src) {
		return src/kim;
	}

	@Override
	protected String getSrcString() {
		return "Km";
	}

	@Override
	protected String getDestString() {
		return "mile";
	}
}


0
  • 답변 1

  • 초보개발자Lv1
    59
    2020-08-12 17:03:48

    https://okky.kr/article/367686

    오키에 비슷한글이 있네요.


    스캐너.close시 system.in 까지 close 되버리는데 

    한번 close되면 재사용이 불가능합니다.

    Scanner scanner = new Scanner(new CloseShieldInputStream(System.in));

    으로 바꾸면 System.in 이 닫히는걸 방지할수 있네요.

  • 로그인을 하시면 답변을 등록할 수 있습니다.