【问题标题】:How do I modify this code to write to a file?如何修改此代码以写入文件?
【发布时间】:2019-07-12 08:03:20
【问题描述】:

我正在尝试修改此堆算法,以显示字符串输入的所有可能排列。我正在尝试修改代码,以便能够与带有编写器文件的 Scanner 类一起使用。当我尝试写入一个新文件时,它不会添加所有 24 个字符串,而是添加前 4 个。因为它是一个 void 方法,我不能使用 pw.println(obj.heapPermutation(a, a.长度,a.长度))。有解决此问题的建议吗?

谢谢

附:我在网上找到了这段代码,我承认它不是我的。

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);

【问题讨论】:

    标签: java java.util.scanner permutation filewriter printwriter


    【解决方案1】:

    您的 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);
    

    【讨论】:

      猜你喜欢
      • 2017-12-21
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      相关资源
      最近更新 更多