0

このプログラムは、ベクトルを使用して素数を計算し、結果をファイルに書き出すことになっています。実行すると、2 ~ 64 の素数が計算され、画面に出力されます。しかし、作成中のテキスト ファイルを確認すると、結果ではなく、他のデータがファイルに書き出されます。私はここで何をしていないのですか?

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!!!!!");
                }
        }
}
4

1 に答える 1

1

DataOutputSteam通常、バイナリデータを書き出すために使用される を使用しています。データをプラン テキスト形式でファイルに書き込む場合は、次のように出力をインスタンス化します。

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

次に、出力するときが来たら、次のようにします。

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

そして、次のように終了したら閉じます。

out.close();

これにより、1 行に 1 つずつ出力されます。これがまさにあなたが望むものかどうかはわかりません。

また、あなたのコードでif、数値が素数かどうかをチェックするステートメントの外側で DataOS に書き込んでいることに気付きました。つまり、素数だけでなく、すべての数値をファイルに書き込むことになります。

ファイル内で の場合と同じ規則に従う必要がある場合は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();
于 2013-05-05T23:52:48.290 に答える