Кажется, что следующие элементы должны быть внутри класса с именем HeapAlgo
:
- Объявление закрытой переменной
private PrintWriter _pw;
Сам конструктор
public HeapAlgo(PrintWriter pw)
Функция heapPermutation
public void heapPermutation(String a[], int size, int n) throws IOException
Последний оставшийся метод, heap()
, должен быть помещен в какой-то другой класс (возможно, где находится ваша функция main()
) и вызываться оттуда.
В качестве альтернативы, вы действительно можете использовать внутренний класс.Оберните весь код, который вы указали в классе (возможно, под названием Heap
), затем оберните вышеупомянутые три элемента во внутренний класс под названием HeapAlgo
.Примерно так (я очень быстро это напечатал, поэтому могут быть ошибки, которые нужно исправить):
public class HeapUtil {
public class HeapAlgo {
private PrintWriter _pw;
// This is the part that needs to go.
public HeapAlgo(PrintWriter pw) {
this._pw = pw;
}
public PrintWriter getPrintWriter(){
return _pw;
}
public 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.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 HeapAlgo heap() throws IOException
{
FileWriter fw = new FileWriter("note.txt");
PrintWriter pw = new PrintWriter(fw);
File temp = new File("code.txt");
Scanner file = new Scanner(temp);
String substring = "";
String a[] = new String[4];
a[0] = "" + file.nextLine();
a[1] = "" + file.nextLine();
a[2] = "" + file.nextLine();
a[3] = "" + file.nextLine();
HeapAlgo obj = new HeapAlgo(pw); // Pass in a writer
obj.heapPermutation(a, a.length, a.length);
return obj;
}
}
Обратите внимание, что в этом случае, если вы хотите использовать HeapAlgo
вне этого классафайл, вам нужно будет использовать Heap.HeapAlgo
.
Редактировать: Попробуйте приведенный выше код (я его редактировал).Может быть несколько ошибок, поскольку я на самом деле не запускал его.
Использование выглядит следующим образом:
public CodeRunner(){
random();
// heapAlgo is the heap object
HeapAlgo heapAlgo = HeapUtil.heap();
// this gives you access to the PrintWriter inside the HeapAlgo
PrintWriter printWriter = heapAlgo.getPrintWriter();
// do your other stuff
algorithm();
}