2017-04-11 12 views
1

私のプログラムでは、入力ファイルからどのような種類のトークンが読み込まれるのかが分かります。私の2番目の方法は、ユーザーが停止を入力するまで、キーボードからの入力を出力ファイルに書き込むものとします。問題は、私の最初の方法は整数を正しい型に出力しないことです。私の2番目の方法は、出力ファイルに停止するだけです。ここに私のコードです。どんな助けでも大いに訴えられるでしょう。あなたのループではファイルの入出力方法の問題

public class R16 { 
public void readFile(String inputFile) { 

    try { 
     File in = new File(inputFile); 
     Scanner scan = new Scanner(in); 
     while (scan.hasNext()) { 
      if (scan.hasNextInt()) { 
       System.out.println("Integer: " + scan.nextInt()); 
      } 
      if (scan.hasNext()) { 
       System.out.println("String: " + scan.next()); 
      } 

      if (scan.hasNextDouble()) { 
       System.out.println("Double: " + scan.nextDouble()); 
      } 

     } 

     scan.close(); 

    } catch (IOException e) { 
     System.out.println("Error, not good"); 

    } 

} 

public void writeFile(String outputFile) { 
    try { 
     File out = new File(outputFile); 
     PrintWriter w = new PrintWriter(out); 
     Scanner scan= new Scanner(System.in); 
     System.out.print("Enter Text: "); 
     while(!scan.next().equals("stop")){ 
      w.print(scan.next()); 

     } 








     w.close(); 
     scan.close(); 

    } catch (IOException e) { 
     System.out.println("Error, it just got real"); 
    } 

} 

public static void main(String[] args) { 
    R16 test = new R16(); 
    test.readFile(args[0]); 
    test.writeFile(args[1]); 

} 

}

+1

おそらく、2番目の2つの 'if'文を' else if'文にして、 'hasNext()'の前に 'hasNextDouble()'をチェックするべきでしょう。実際には、これは 'hasNext()'を最後に冗長にします。これは 'while'ループですでにチェックしているので、単純な' else'で十分です。 – Andreas

+0

ありがとうございます。 –

答えて

2

、あなたはすべての入力を捨て、その後stopを確認してください。

while(!scan.next().equals("stop")){ 

今ループ内で、あなたが入力文字列が含まれている入力変数へのアクセスを持って

String input; 
while (!(input = scan.next()).equals("stop")) { 
    w.print(input); 

のようなものを使用してみてください。

+0

'next()'は "行"を返しません。 – Andreas

+0

Meh、line、input。十分近い。 –

+0

それを修正しました、ありがとう –