2017-12-24 12 views
0

Ich habe immer verwendet, während (scanner.hasNext()) {} Methode zu aus der Datei lesen und dann das Programm die ganze Zeit ausführen. Aber ich habe bemerkt, dass die CPU-Auslastung drastisch gestiegen ist, selbst wenn das Programm (Eclipse) den Prozess beendet hat, und es wird nicht vollständig aufhören, bis ich diesen Knopf drücke. Beenden der Eclipse mit Code (in Java)

Ich habe auch diese Funktion, System.exit (0), um das Programm zu stoppen, aber ich muss noch die Taste drücken.

Gibt es einen Fehler in meinem Code, der das Programm nicht stoppen lässt.

public class HW3 
{ 

    /* 
     Description 
    */ 
    public static void main(String[] args) throws FileNotFoundException 
    { 
     final File file1 = new File(args[0]); 
     final File file2 = new File(args[1]); 
     final Scanner sc1 = new Scanner(file1); 
     HW3 instance = new HW3(); 
     while (sc1.hasNext()) { 
      print(instance.splitSentence(sc1.nextLine())); 
     } 
     sc1.close(); 
     final Scanner sc2 = new Scanner(file2); 
     while (sc2.hasNext()) { 

     } 
     System.exit(1); 
    } 
    public void constructTreeNode(String[] stringArray) { 

    } 
    private String[] splitSentence (String sentence) { 
     int wordCount = 1; 
     for (int i = 0; i < sentence.length(); i++) { 
      if (sentence.charAt(i) == ' ') { 
       wordCount++; 
      } 
     } 
     String[] arr = new String[wordCount]; 
     wordCount = 0; 
     String temp = ""; 
     for (int i = 0; i < sentence.length(); i++) { 
      if (sentence.charAt(i) == ' ' || i == sentence.length() - 1) { 
       arr[wordCount] = temp; 
       wordCount++; 
       temp = ""; 
      } else { 
       temp += sentence.charAt(i); 
      } 
     } 
     return arr; 
    } 
    private static void print (String[] arr) { 
     for(String e : arr) { 
      System.out.println(e); 
     } 
    } 
} 
+0

while (sc2.hasNext()) ohne Körper wird eine Endlosschleife, sicher sein? Sie lesen keine Informationen vom Scanner. Sie müssen tatsächlich Daten vom Scanner lesen (next() oder nextLine() würden wahrscheinlich das sein, was Sie wollen), sonst würde die Datei niemals irgendwelche Zeilen lesen und somit immer true von hasNext() zurückgeben. – Zachary

+1

Ich dachte hasNext(), selbst hat eine Funktion, um zur nächsten Zeile zu springen. Da ich dieses Problem vorher noch nicht hatte, war dies mein beispielloser Fehler für mich :(. Danke trotzdem. – sbot

+0

Ich habe ähnliche Fehler gemacht. Obwohl, wenn es in die nächste Zeile gesprungen wäre, könntest du nicht lesen die aktuelle Zeile (oder der Versuch, eine Zeile zu lesen, würde einen anderen überspringen) – Zachary

Antwort

1

Das Problem, das Sie haben, ist mit diesem Codeabschnitt.

Sie erstellen einen Scanner und geben eine Schleife ein, bis der Scanner keine neuen Daten mehr hat; aber Sie lesen keine Daten vom Scanner. Solange die Datei Datei2 nicht leer war, würden Sie eine Endlosschleife eingeben und die System.exit (1); Code wäre unerreichbar.

Dies ist auch der Grund, warum Ihr Code niemals abgeschlossen wird, da er in dieser Schleife festsitzt. Der Code wird abgeschlossen, wenn er das Ende des main() -Methoden-Einstiegspunkts für Ihr Programm erreicht (dh ein Aufruf von System.exit (int n) ist nicht erforderlich, es sei denn, Sie möchten speziell einen Fehler anzeigen).

Das Update:

final Scanner sc2 = new Scanner(file2); 
while (sc2.hasNext()) { 
    String line = sc2.nextLine(); 
} 
System.exit(1); 
+0

oh, jetzt habe ich es. – sbot