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 symbol,这是第一次调用pw

我试图弄清楚如何构建和构造类,以便并非所有内容都停留在我的主类的主要方法中。所以基本上我正在尝试创建一个我可以随时调用来打印 ArrayList 的类。

所以我的问题是,我如何构造这个PrintToFile类,以便我的printExp方法可以看到PrintWriter pw我创建的。

任何帮助将不胜感激,谢谢!

4

5 回答 5

3

由于pw是 method 中的局部变量PrintToFile,因此其他方法printExp无法访问它。

局部变量 与对象在字段中存储其状态的方式类似,方法通常会将其临时状态存储在局部变量中。声明局部变量的语法类似于声明字段(例如,int count = 0;)。没有特殊关键字将变量指定为局部变量;该决定完全来自声明变量的位置——位于方法的左大括号和右大括号之间。因此,局部变量仅对声明它们的方法可见;课堂上的其他人无法访问它们。

请阅读Java 变量教程

于 2012-12-27T08:06:30.703 回答
1

声明你PrintWriter的类变量,然后在你的构造函数中初始化它。这就是您的方法找不到您的变量的原因pw

于 2012-12-27T08:03:46.707 回答
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

pw 必须是类级别的变量,目前作用域在方法内部,不能在方法外部访问。

import java.util.*;
import java.io.*;
    PrintWriter pw = null; // You need to declare it here
public class PrintToFile{
    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++){
              if(pw != null){ // need to check for null, as  it might be null
                  pw.println("---------------------------------------");//line 13
                  pw.println(expList.get(i));
              }

      }
        pw.close();
    }
}

声明为方法参数的变量可以从方法体内访问。可以从类中的任何位置访问类级变量。

如果一个方法声明了一个与类级变量同名的局部变量,则前者将“遮蔽”后者。要从方法体内访问类级变量,请使用 this 关键字。

有关变量范围的更多详细信息,您可以看到这个

于 2012-12-27T08:10:38.567 回答