2017-11-20 3 views
0

私はファイル(dna.txt)に行ごとに「YES」プリントアウトしようとしています。ファイル内の行が終了した後に停止する必要がありますが、何も出力ファイル(hi.txt)に何も印刷されていないコードで何らかのループを作成しましたが、無限に終了します。私はそれもいくつかの "はい" sesを持っているはずですが、私の問題は明らかにファイルのトークンを正しく読み取っていないよりも大きいです。ラインスキャナループ

マイコード:

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); 
} 

テキストファイル(それは任意のテキストファイルを操作する必要があり、それはないですが):あなたはこのループが形成されている任意のアイデアを

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

を持っていますか?もしそうなら、私はこれをどのように修正すべきかのヒントを教えてください。

ありがとうございます!ただ、変更された数行

+0

'lineScan'の目的は何ですか? – shmosel

+0

私はそれを使ってテキストファイルの個々のトークンを読むと考えられます。 –

+0

まあ...あなたは? – shmosel

答えて

4

変更

1.))

2. Scanner lineScan = new Scanner(line);をコメント次の反復のために、ループ内で、isProteinの値をリセットする必要があります。

o/pは、テキストファイルhi.txtに印刷されています。 BTW私はR/W操作のためのテキストファイルを使用しているので、スキャナ部分をコメントアウトしました。

コード

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); 
    } 

出力

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

ちょうど詳細、 'isProtein =" NO "; 'は' else'ブロック内になければなりません。それを動作させるには、それらの2つの 'if'をマージする必要があります。これは、1ループ当たりのインスタンス数を減らすことになります。 – AxelH

+0

@AxelHはい、これをさらに最適化できます。コードを修正しました。 –

+0

ありがとうございます!私のループ問題は2番目の 'while'ループによって引き起こされましたか? –