2015-11-20 3 views
1

Вот моя функция, которая должна принимать значения из «in1.txt» и выводить их в «out1.txt» с описанием, если они простые или нет.Как добавить дополнительные значения в мой вывод?

Код:

import java.util.Scanner; 
import java.util.ArrayList; 
import java.io.File; 
import java.io.PrintWriter; 
public class task1 
{ 
public static boolean isPrime(int n) { 
    if (n <= 1) { 
    return false; 
    } 
    for (int i = 2; i < Math.sqrt(n); i++) { 
    if (n % i == 0) { 
     return false; 
    } 
} 
return true; 
} 
public static ArrayList<String> check_primes(String in_file, String out_file) 
{ 
    File temp = new File(in_file); 
    Scanner input_file; 
    String filename = "out1.txt"; 
    PrintWriter out = null; 

    try 
    { 
     input_file = new Scanner(temp); 
     out = new PrintWriter(filename); 
    } 
    catch (Exception e) 
    { 
     System.out.printf("Failed to open file %s\n",in_file); 
     return null; 
    } 
    ArrayList<String> result = new ArrayList<String>(); 
    while(input_file.hasNextLine()) 
    { 
     String line = input_file.nextLine(); 
     result.add(line); 

     for(int i = 0; i<result.size();i++) 
     { 
      String x = result.get(i); 
      int xx = Integer.parseInt(x); 
      if(isPrime(xx)) 
      { 
       out.printf(xx + " is a prime\r\n"); 
      } 
      else 
      { 
       out.printf(xx + " is not a prime\r\n"); 
      }   
     } 

     out.close(); 
    } 

    input_file.close(); 

    return result; 
} 
public static void main(String[] args) 
{ 
check_primes("in1.txt", "out1.txt"); 
System.out.printf("Exiting...\n"); 
} 
} 

это только добавляет первое значение файла INT1, и я предполагаю, что это какая-то ошибка петли или, что я что-то в моем цикле отсутствует. я проверил, была ли ошибка с «x» или «xx» и распечаталась, и x будет распечатываться как [7] [7, 10] [7, 10, 13] и т.д., образуя пирамиду, а xx печатается аналогично 7 \ n 7 \ n 10 \ n 7 \ n 10 \ n 13 \ n Может кто-нибудь поможет мне выяснить, где проблема?

+4

считает не закрывая выход в петле :) – zapl

+0

@zapl +1 для пятнистости основного вопроса, но, даже если выход в цикле не закрыт, вы не думаете, что цикл возобновляются каждым время добавляется новая строка к результатам? – Raf

ответ

2

Я думаю, что намерение иметь цикл, за которым следует добавление каждой строки в список, было обработать список, содержащий все строки позже. Если это так, то вам нужно включить result.add (строка) в ваш цикл while и закрыть его. Обработать всю линию после этого в цикле обработки

while (input_file.hasNextLine()) { 
    String line = input_file.nextLine(); 
    result.add(line); 
} //close the loop here 

Предполагая, что вы не закрываете цикл while. Для цикла будет выполняться только один раз, потому что ваш result.size() является одним и после цикла for, он закрывает выходной поток.

+0

благодарю вас за это, и теперь меня раздражает. Я не видел этого маленького исправления xD –

0
while(input_file.hasNextLine()) { 
     String line = input_file.nextLine(); 
     result.add(line);  
} 
for(int i = 0; i<result.size();i++) 
    { 
     String x = result.get(i); 
     int xx = Integer.parseInt(x); 
     if(isPrime(xx)) 
     { 
      out.printf(xx + " is a prime\r\n"); 
     } 
     else 
     { 
      out.printf(xx + " is not a prime\r\n"); 
     }   
    } 

    out.close(); 
Смежные вопросы