0

Программа должна вычислять Prime Numbers с использованием векторов и записывать результаты в файл. Когда я запускаю его, он вычисляет Prime Numbers с 2-64 и выводит его на экран. Но когда я проверяю созданный им текстовый файл, вместо результатов он записывает некоторые другие данные в файл. Что я здесь не делаю?Выводить результаты поиска java в файл

import java.util.*; 
import java.io.*; 

public class PrimeByVector 
{ 
     public static void main(String[] args) 
     { 
     try 
     { 
       ObjectOutputStream OutputS = new ObjectOutputStream(new FileOutputStream("PrimeNumbers.txt")); 
       DataOutputStream DataOS = new DataOutputStream(OutputS); 
       final int NUMBER_PER_LINE = 10; 
       int count = 0; 
     //  java.util.Vector vector = new java.util.Vector(); 
       Vector v = new Vector(); 
       System.out.println("The primes before 64 are: \n"); 

       for (int n = 2; n < 64; n++) 
       { 
         boolean isPrime = true; 
         for (int i = 0; i < v.size(); i++) 
         { 
           int primeNumber = 
             ((Integer)(v.elementAt(i))).intValue(); 
           if (primeNumber > Math.sqrt(n)) break; 

           if (n % primeNumber == 0) 
           { 
             isPrime = false; 
             break; 
           } 
         } 
         if (isPrime) 
         { 
           count ++; 
           v.addElement(new Integer(n)); 
           if (count % NUMBER_PER_LINE == 0) 
           { 
             System.out.println(n); 
           } 
           else 
             System.out.print(n + " "); 
         } 
         DataOS.write(n); 
       } 
       DataOS.close(); 

       } 
       catch(IOException e) 
       { 
         System.out.println("Error!!!!!"); 
       } 
     } 
} 

ответ

1

Вы используете DataOutputSteam, который обычно используется для записи двоичные данные. Если вы хотите, чтобы данные, записанные в файл в плановом текстовом виде, а затем создать экземпляр вывода следующим образом:

PrintWriter out = new PrintWriter(new FileWriter("PrimeNumbers.txt")); 

Затем, когда приходит время для вывода, выполните следующие действия:

out.println(n); 
out.flush(); 

а затем закрыть это делается следующим образом:

out.close(); 

Это будет печатать по одному в каждой строке; не уверен, что это именно то, что вы хотите.

Кроме того, в вашем коде я заметил, что ваша запись в DataOS вне инструкции if, которая проверяет, является ли число простым, что означает, что вы будете записывать все числа в файл, а не просто простые числа.

Если вам необходимо следовать той же конвенции в файле, как вы делаете для System.out, а затем изменить код, чтобы выглядеть следующим образом:

if (count % NUMBER_PER_LINE == 0) 
{ 
    System.out.println(n); 
    out.println(n); 
} 
else{ 
    System.out.print(n + " "); 
    out.print(n + " "); 
} 
out.flush();