2017-11-20 24 views
0

Ich versuche, in einer Datei für jede Zeile „JA“ zum Ausdrucken (dna.txt), die mit "ATG" beginnt und endet mit "TAA", "TAG" oder "TGA", und „NEIN“, wenn dies nicht der Fall ist . Es sollte aufhören, nachdem die Zeilen in der Datei fertig sind, aber ich habe eine Art Schleife in meinem Code erstellt, wo nichts in die Ausgabedatei gedruckt wird (hi.txt), aber "NEIN" ... endlos. Ich weiß, dass es auch einige "JA" -Se haben sollte, aber mein Problem ist deutlich größer als nur nicht die Tokens der Datei richtig zu lesen.Line Scanner Schleife

Mein Code:

public static void Results(Scanner console) throws 
     FileNotFoundException { 
    System.out.print("Input file name? "); 
    Scanner input = new Scanner(new File("dna.txt")); 
    System.out.print("Output file name: "); 
    File outputFile = new File("hi.txt"); 
    System.out.println(); 

    PrintStream outputRead = new PrintStream(outputFile); 
    String isProtein = "NO"; 
    while (input.hasNextLine()) { 
     String line = input.nextLine().toUpperCase(); 
     Scanner lineScan = new Scanner(line); 
     while (lineScan.hasNext()) { 
      if (line.startsWith("ATG")) { 
       if (line.endsWith("TAA") || line.endsWith("TAG") || 
         line.endsWith("TGA")) { 
        isProtein = "YES"; 
       } 
      } 
     } 
     outputRead.println(isProtein); 
    } 
    System.out.println(isProtein); 
} 

Textdatei (obwohl es mit einer beliebigen Textdatei arbeiten sollte, und es ist nicht):

protein? 
ATGCCACTATGGTAG 
protein? 
ATgCCAACATGgATGCCcGATAtGGATTgA 
protein? 
CCATt-AATgATCa-CAGTt 
protein? 
ATgAG-ATC-CgtgatGTGgg-aT-CCTa-CT-CATTaa 
protein? 
AtgC-CaacaTGGATGCCCTAAG-ATAtgGATTagtgA 
protein? 
atgataattagttttaatatcaga-ctgtaa 

Haben Sie eine Ahnung, wo diese Schleife bilden ? Wenn ja, bitte gib mir nur Hinweise, wie ich das beheben soll.

Danke!

+0

Was ist der Zweck der 'lineScan'? – shmosel

+0

Ich soll das verwenden, um die einzelnen Tokens der Textdatei zu lesen, denke ich. –

+0

Nun ... bist du? – shmosel

Antwort

4

Nur Modified paar Zeilen,

Änderungen

1.) kommentiert Scanner lineScan = new Scanner(line);

2.) Sie benötigen Wert für isProtein, in Schleife zurückgesetzt werden, für die nächste Iteration.

o/p wird in Textdatei hi.txt gedruckt. Übrigens habe ich Textdatei für R/W-Operationen verwendet, so dass der Scanner-Teil auskommentiert wurde.

-Code

public static void Results() throws FileNotFoundException { 
     //System.out.print("Input file name? "); 
     Scanner input = new Scanner(new File("dna.txt")); 
     //System.out.print("Output file name: "); 
     File outputFile = new File("hi.txt"); 
     //System.out.println(); 

     PrintStream outputRead = new PrintStream(outputFile); 
     String isProtein = "NO"; 
     while (input.hasNextLine()) { 
      String line = input.nextLine().toUpperCase(); 
      //Scanner lineScan = new Scanner(line); 
      //while (lineScan.hasNext()) { 
       if (line.startsWith("ATG")) { 
        if (line.endsWith("TAA") || line.endsWith("TAG") || line.endsWith("TGA")) { 
         isProtein = "YES"; 
        } 
       }else{ 
         isProtein = "NO"; 
       } 
      //} 
      outputRead.println(isProtein); 
      isProtein = "NO"; 
     } 
     //System.out.println(isProtein); 
    } 

Ausgabe

NO 
YES 
NO 
YES 
NO 
NO 
NO 
YES 
NO 
YES 
NO 
YES 
+1

Nur ein Detail, 'isProtein =" NEIN "; 'sollte in einem' else' Block sein, muss nur diese beiden 'if's zusammenführen, damit es funktioniert. Dies würde die Anzahl der Instanziierungen pro Schleife reduzieren. – AxelH

+0

@AxelH Ja richtig, wir können dies weiter optimieren. Habe den Code geändert. –

+0

Vielen Dank! War mein Looping-Problem durch die zweite while-Schleife verursacht? –

Verwandte Themen