2012-10-31 3 views
4

이것은 학교 과제를위한 질문입니다. 그래서 내가 그런 식으로하고 있습니다.Scanner를 생성자의 매개 변수로 사용하는 Java

어쨌든, 나는 main 메소드 (Scanner stdin = new Scanner (System.in); 라인)에서 Stdin을 사용하여 스캐너를 만들며 프로그램이 실행될 때 지정된 txt에서 데이터를 읽습니다. 예외없이, 스캐너의 호출은 단지 프로그램을 종료 할이 시점에서

public PhDCandidate(Scanner stdin) 
    { 

    name = stdin.nextLine(); 
    System.out.println(name); //THIS NEVER RUNS 
    preliminaryExams = new Exam[getNumberOfExams()]; 

    for(int i = 0; i <= getNumberOfExams(); i++) 
    { 
     preliminaryExams[i] = new Exam(stdin.nextLine(), stdin.nextDouble()); 
    } 
    System.out.print("alfkj"); 
    } 

: 주에서 예상대로이 스캐너가 작동하지만 내가 인수로 스캐너를 가진 사용자 정의 클래스에서 사용할 필요가 또는 오류가 발생했습니다. .next()만이 작동합니다. 나는 프로그램을 작동시킬 수는 있지만 해키 일 것이고, 실제로 무슨 일이 일어나고 있는지 이해하지 못한다. 나는 아주 간단한 개념을 놓치고 있다고 생각하지만, 나는 길을 잃는다. 어떤 도움을 주시면 감사하겠습니다.

+1

"이 시점에서 검사기를 호출하면 예외 나 오류가 발생하지 않고 프로그램이 종료됩니다." 정확히 어떤 시점에? 코드에서 어디에서 프로그램이 종료됩니까? –

+1

프로그램이 실제로 종료 된 것 같지 않습니다. 나는 당신의 콘솔이 대신 입력을 기다리고 있다고 생각합니다. 콘솔에 이름을 입력하십시오. – Jimmy

+0

@ Code-Guru : 스캐너를 사용하려고 할 때마다 종료됩니다. stdin.next()를 제외하고는 다른 모든 코드가 끊어집니다.) 즉시 .nextLine()을 사용하려고 시도하면 – user1781671

답변

1

코드가 제대로 작동합니다. 메인에서 스캐너를 생성 한 후 인수로 넘깁니다.

public Test(Scanner stdin) 
     { 
System.out.println("enter something"); 
     name = stdin.nextLine(); 
     System.out.println(name); //THIS NEVER RUNS 


     System.out.print("alfkj"); 
     } 
    public static void main(String...args)throws SQLException { 
     new Test(new Scanner(System.in)); 
} 

output: enter something 
     xyzabc 
     alfkj 
+0

문제는 System.in()에도 불구하고 실제로 .txt 파일에서 읽는 것입니다. 스캐너 구성을 스캐너로 바꾸려면 stdin = new Scanner (new File ("file.txt"); 스캐너는 여전히 동일한 fasion에서 작동합니다. – user1781671

1

PhDCandidate 클래스에 Name 메서드 세트를 추가하십시오. 이 방법으로 메인 메소드 안에 PhDCandidate 객체를 생성하고 이름을 출력하거나 메인에서 무엇이든 할 수 있습니다.

public static void main(String[] args) { 

    PhDCandidate c = new PhDCandidate(); 
    c.setName(stdin.nextLine()); 
} 
3

내가 그 아래 같은 일을하는 경우, 즉 문제가 의심 당신이 폐쇄하고 생성자를 호출하기 전에 Scanner stdin를 다시 초기화되지 않습니다 있는지 확인하십시오 : 생성자 내부

 Scanner stdin = new Scanner(System.in); 
     ......... 
     stdin.close(); //This will close your input stream(System.in) as well 

     ..... 
     ..... 

     stdin = new Scanner(System.in); 
     PhDCandidate phDCandidate = new PhDCandidate(stdin); 

stdin을 것이다 아무것도 입력 스트림으로 읽지 않습니다. System.in은 이미 닫혔습니다.

관련 문제