0

そのArrayListため、ファイルに出力したいオブジェクトがあります。私にはPrintToFileクラスがあり、別のクラスにはArrayList<Expenses> expList

ここに私の PrintToFile クラスがあります

import java.util.*;
import java.io.*;

public class PrintToFile{
    public void PrintToFile()throws Exception{
      File f = new File ("Output.txt");
      FileWriter fw = new FileWriter(f, true);
     PrintWriter pw = new PrintWriter(fw);
   }

    public void printExp(ArrayList<Expense> expList){
        for(int i = 0; i < expList.size(); i++){
         pw.println("---------------------------------------");//line 13
         pw.println(expList.get(i));
      }
        pw.close();
    }
}

そして、これが私のメインクラスでそのクラスを呼び出す試みです

    PrintToFile printer = new PrintToFile();
    printer.print(expList);

私が取得している最初のコンパイラ エラーは、私の PrintToFile クラスにありますPrintToFile.java:13: error: cannot find symbolpw

クラスを構築して構造化する方法を理解しようとしているので、すべてがメインクラスのメインメソッドに詰まっているわけではありません。したがって、基本的に、いつでも呼び出して ArrayList を出力できるクラスを作成しようとしています。

だから私の質問は、PrintToFile私のprintExpメソッドがPrintWriter pw私が作成した .

どんな助けでも大歓迎です、ありがとう!

4

5 に答える 5

3

pwは method のローカル変数であるため、PrintToFile別のメソッドからprintExpアクセスすることはできません。

ローカル変数 オブジェクトがその状態をフィールドに保存する方法と同様に、メソッドはその一時的な状態をローカル変数に保存することがよくあります。ローカル変数を宣言する構文は、フィールドを宣言する構文と似ています (たとえば、int count = 0;)。変数をローカルとして指定する特別なキーワードはありません。その決定は、変数が宣言されている場所 ( method の左中括弧と右中括弧の間) から完全に行われます。そのため、ローカル変数は、それらが宣言されているメソッドにのみ表示されます。クラスの残りの部分からはアクセスできません。

変数に関する Java チュートリアルをお読みください。

于 2012-12-27T08:06:30.703 に答える
1

メソッドpwのスコープで定義しました。メソッドpublic void PrintToFileでは見えません。public void printExp定義をクラス レベルに移動しPrintWriter pw = new PrintWriter(fw);てメンバーにすると、すべてのクラス メソッドから参照できるようになります。

以下は魔法を行うはずです:

 public class PrintToFile{
     private File f = new File ("Output.txt");
     private FileWriter fw = new FileWriter(f, true);
     private PrintWriter pw = new PrintWriter(fw);


    public void PrintToFile(String outFileAbsolutePath)throws Exception{
        this.f = new File (outFileAbsolutePath);
        this.fw = new FileWriter(this.f, true);
        this.pw = new PrintWriter(this.fw);
    }

    public void printExp(ArrayList<Expense> expList){
       for(int i = 0; i < expList.size(); i++){
         pw.println("---------------------------------------");//line 13
         pw.println(expList.get(i));
       }
       pw.close();
   }
 }
于 2012-12-27T08:06:03.323 に答える
1

pw 変数は関数内で宣言されており、クラス内でローカルに使用できないため、アクセスできません。次のことを行う必要があります

    import java.util.*;
    import java.io.*;

    public class PrintToFile{
         public PrintWriter pw; //<--declare it here

        public void PrintToFile()throws Exception{
          File f = new File ("Output.txt");
          FileWriter fw = new FileWriter(f, true);
          pw = new PrintWriter(fw);
       }

        public void printExp(ArrayList<Expense> expList){
            for(int i = 0; i < expList.size(); i++){
             pw.println("---------------------------------------");//line 13
             pw.println(expList.get(i));
            }
            pw.close();
        }
   }
于 2012-12-27T08:07:12.590 に答える
1

PrintWriterクラス変数として宣言し、コンストラクターで初期化します。これが、メソッドが variable を見つけられない理由ですpw

于 2012-12-27T08:03:46.707 に答える