2017-11-16 7 views
1

Ich versuche, ein Programm zu machen, die die Textdatei druckt simple.txt jedes Mal, drückt der Benutzer „c“, aber mit meinem Code, wird es nur einmal drucken:Wiederholen Datei Drucken Scanner verwenden

public static void main(String[] args) throws FileNotFoundException { 
    Scanner console = new Scanner(System.in); 
    Scanner fileSearch = new Scanner(new File("simple.txt")); 
    UI(console, fileSearch); 
} 

public static void UI (Scanner console, Scanner fileSearch) { 
    String choice = "Start"; 
    while (!choice.equals("q")) { 
     System.out.print("(C)reate mad-lib, (V)iew mad-lib, (Q)uit? "); 
     choice = console.next(); 
     choice = choice.toLowerCase(); 
     if (choice.equals("c")) { 
      System.out.println("Create"); 
      CreateMadLibs(fileSearch); 
     } else if (!choice.equals("q")) { 
      System.out.println("I don't understand."); 
     } 
    } 
} 

public static File FileGrab (Scanner fileSearch) { 
    File thing = new File(fileSearch.next()); 
    while (fileSearch.hasNextLine()){ 
     System.out.println(fileSearch.nextLine()); 
    } 
return thing; 
} 

public static void CreateMadLibs (Scanner fileSearch) { 
    FileGrab(fileSearch); 
} 

I denke, das Problem ist, dass ich den Scanner fileSearch in Main statt in UI erstellen. Ich versuchte, fileSearch in der if Anweisung zu initialisieren, aber das gab mir eine fileNotFoundException. Wie bekomme ich diese:

Exception in thread "main" java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Scanner.java:862) 
    at java.util.Scanner.next(Scanner.java:1371) 
    at test.FileGrab(test.java:28) 
    at test.CreateMadLibs(test.java:36) 
    at test.UI(test.java:20) 
    at test.main(test.java:9) 

Antwort

1

Sie die fileSearch in die while Schleife setzen kann, so dass es die file jedes Mal, wenn Sie findet die Schleife erneut Durchsuchung. Sie rufen dann UI(console); in der main dann.

Auch würde ich empfehlen, die scanner am Ende zu schließen, da es nicht wieder verwendet werden kann (es sei denn natürlich c wird wieder eingegeben).

public static void UI(Scanner console) throws FileNotFoundException { 
     String choice = "Start"; 
     while (!choice.equals("q")) { 
      Scanner fileSearch = new Scanner(new File("simple.txt")); 
      System.out.print("(C)reate mad-lib, (V)iew mad-lib, (Q)uit? "); 
      choice = console.next(); 
      choice = choice.toLowerCase(); 
      if (choice.equals("c")) { 
       System.out.println("Create"); 
       CreateMadLibs(fileSearch); 
      } else if (!choice.equals("q")) { 
       System.out.println("I don't understand."); 
      } 
      fileSearch.close(); 
     } 
    } 
1

Sie haben einige Zeilen im Code, die funktionell nichts tun, schlage ich vor, die FileGrab Methode zu ändern, indem Sie so etwas wie dies zu tun:

public static void /*File*/ FileGrab (Scanner fileSearch) { 
    //File thing = new File(fileSearch.next()); // this line is useless 
    while (fileSearch.hasNextLine()){ 
     System.out.println(fileSearch.nextLine()); 
    } 
    //return thing; // this either 
    } 
Verwandte Themen