Как мне изменить этот код для записи в файл? - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь изменить этот алгоритм кучи, который показывает все возможные перестановки ввода строк.Я пытаюсь изменить код, чтобы его можно было использовать с классом Scanner с файлом писателя.Когда я пытаюсь записать в новый файл, он не добавляет все 24 строки, как следует, а скорее добавляет первые 4. Поскольку это метод void, я не могу использовать pw.println (obj.heapPermutation (a, a.длина, длина)).Любые предложения, чтобы решить эту проблему?

Спасибо

PS Я нашел этот код в Интернете, и я признаю, что он не мой.

import java.util.Scanner;
import java.io.*;
import static java.lang.System.*;

class HeapAlgo 
{ 




    void heapPermutation(String a[], int size, int n) throws IOException
    { 
       FileWriter fw = new FileWriter("note.txt");
       PrintWriter pw = new PrintWriter(fw);


 // if size becomes 1 then prints the obtained 
 // permutation 
       if (size == 1) 
          for (int i=0; i<n; i++)
          { 
              System.out.println(a[i] + "");



          } 


          for (int i=0; i<size; i++) 
          { 
             heapPermutation(a, size-1, n); 

// if size is odd, swap first and last 
// element 
                if (size % 2 == 1) 
                { 
                    String temp = a[0]; 
                    a[0] = a[size-1]; 
                    a[size-1] = temp; 
                } 

// If size is even, swap ith and last 
// element 
                else
                { 
                   String temp = a[i]; 
                   a[i] = a[size-1]; 
                   a[size-1] = temp; 
                } 


         }


  } 


public static void main(String args[]) throws IOException 
{ 

   HeapAlgo obj = new HeapAlgo(); 
   String a[] = new String["abcd","bbbb","cccc","dddd"];
   obj.heapPermutation(a, a.length, a.length);

1 Ответ

0 голосов
/ 19 февраля 2019

Ваш PrintWriter инициализируется внутри метода heapPermutation, который, поскольку он вызывается рекурсивно heapPermutation(a, size-1, n), будет переопределяться каждый раз.Я считаю, что по умолчанию для этого используется замена файла, а не добавление к нему.

Вам следует создать конструктор для инициализации PrintWriter, чтобы он не переинициализировался каждый раз.

class HeapAlgo {
    // create a writer at the class level
    private PrintWriter _pw;

    // Create a constructor to assign the writer
    public HeapAlgo(PrintWriter pw) {
       this._pw = pw;
    }

    void heapPermutation(String a[], int size, int n) throws IOException { 
    // if size becomes 1 then prints the obtained 
    // permutation 
        if (size == 1) 
            for (int i=0; i<n; i++) { 
                System.out.println(a[i] + "");
                this._pw.print(a[i] + ""); // print here I belive?
            }

        for (int i=0; i<size; i++) { 
            heapPermutation(a, size-1, n); 

            // if size is odd, swap first and last 
            // element 
            if (size % 2 == 1) { 
                String temp = a[0]; 
                a[0] = a[size-1]; 
                a[size-1] = temp; 
            }

            // If size is even, swap ith and last 
            // element 
            else { 
               String temp = a[i]; 
               a[i] = a[size-1]; 
               a[size-1] = temp; 
            } 
        }
    }
}

public static void main(String args[]) throws IOException {
    FileWriter fw = new FileWriter("note.txt");
    PrintWriter pw = new PrintWriter(fw);
    HeapAlgo obj = new HeapAlgo(pw); // Pass in a writer
    String a[] = new String["abcd","bbbb","cccc","dddd"];
    obj.heapPermutation(a, a.length, a.length);
...