Мой выходной файл дублируется.Каждый новый принт включает в себя все предыдущие.(Код включен) - PullRequest
0 голосов
/ 25 сентября 2011

Именно то, что я делаю,

    FileOutputStream out;
    PrintStream outputfile;
    try{
        out = new FileOutputStream("Project1.txt");
        outputfile = new PrintStream(out);
        int a[ ] = { 4, -3, 5, -2, -1, 2, 6, -2 };
        int maxSum;
        Formatter fmt = new Formatter();
        //Setup table column titles
        outputfile.println(fmt.format("%12s %12s %12s %12s %12s %12s%n", "Algorithm", "n", "time", "time/n^3", "time/n^2", "time/(n*log(n))"));
        outputfile.println(fmt.format("%12s %12s %12s %12s %12s %12s%n%n", "_________", "_", "(ms)", "x100,000", "x10,000", "x10,000"));
        // Algorithm 1
        for( int n = 256; n <= 2049; n *= 2 ){
            int alg = 1;
            long timing;
            maxSum = maxSubSum1( a );
            timing = getTimingInfo( n, alg );
            double time = (((double)timing)/1000000.0);
            outputfile.println(fmt.format("%12s %12d %12f %12f %12f %12f%n", "Alg. 1", n, time, (time/(((long)n)*n*n))*100000.0, (time/(n*n))*10000, (time/((double)n*Math.log((double)n)))*10000));   
        }
        }
        catch(Exception e)
        {
          System.err.println("Error in writing to file");
        }

Получен некоторый вывод, на который я ссылаюсь,

   Algorithm            n         time     time/n^3     time/n^2   time/(n*log(n))

   Algorithm            n         time     time/n^3     time/n^2   time/(n*log(n))
   _________            _         (ms)     x100,000      x10,000   x10,000


   Algorithm            n         time     time/n^3     time/n^2   time/(n*log(n))
   _________            _         (ms)     x100,000      x10,000   x10,000

   Alg. 1              256     4.335838     0.025844     0.661596  30.543418

Ответы [ 3 ]

1 голос
/ 26 сентября 2011

Используйте String.format() вместо fmt.format().Или вызовите конструктор Formatter с out и удалите вызовы outputfile.println():

out = new FileOutputStream("Project1.txt");
Formatter fmt = new Formatter(out);
fmt.format("%12s %12s %12s %12s %12s %12s%n", 
    "Algorithm", "n", "time", "time/n^3", "time/n^2", "time/(n*log(n))");
fmt.format("%12s %12s %12s %12s %12s %12s%n%n", 
    "_________", "_", "(ms)", "x100,000", "x10,000", "x10,000");

...
fmt.flush();
out.close();

A new Formatter() (созданный с помощью конструктора noarg) использует внутренний StringBuilder и добавляет все результатыformat() призывает к этому.Кроме того, каждый format() возвращает сам объект formatter (return this;).Затем outputfile.println() вызывает возвращенный formatter метод toString(), который возвращает все содержимое внутреннего StringBuilder.Таким образом, любые последующие вызовы format() увеличивают размер StringBuilder, и вы распечатываете весь буфер после каждого вызова format().

1 голос
/ 26 сентября 2011

Когда вы создаете новый Formatter, адресат форматированного вывода - StringBuilder.Поэтому при каждом вызове outputfile.println(...) текущее содержимое StringBuilder сбрасывается в выходной поток.

Чтобы решить эту проблему, все, что вам нужно сделать, это:

Formatter fmt = new Formatter(out);</p> <p>fmt.format("%12s %12s %12s %12s %12s %12s%n", "Algorithm", "n", "time", "time/n^3", "time/n^2", "time/(n*log(n))");

Обратите внимание, что вам больше не нужно будет использовать PrintStream объект.

1 голос
/ 25 сентября 2011

Возможно, вы делаете это сложнее, чем нужно.

out.printf("%s%n", "A");
out.printf("%s%n", "B");

или

out.println("A");
out.println("B");

выходы

A
B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...