刚刚学java,遇到这样一个问题:不同图形的周长计算。我是这样写的。一个图形接口,一个输出类,三角形继承输出类实现接口,矩形同上。现在的问题是,要将输出的结果输出到文件中,就像日志那种。我的是只能记录最后一次的结果。部分源代码如下:
interface Shape   //定义一个图形接口
{
double GetP();
}
class Print     // 定义一个输出图形周长的类
{
    double Perimeter=0;
    void PrintP(double P) throws IOException
    {
File f=new File("D:\\g.txt");
FileWriter fw = new FileWriter (f);
fw.write("该图形的周长为:"+P1+"      ");
fw.close();
System.out.println("该图形的周长为:"+P1+"\n");
}
}
class Rectangle extends Print implements Shape//子类矩形Rectangle继承父类Print实现接口Shape
{
double Height,Width;  //长宽
    Rectangle(double m,double n)
    {
Height=m;Width=n;
        System.out.println("矩形的高是:"+Height+",宽是:"+Width);
    }
 public double GetP()            //计算周长
    {
Perimeter=(Height+Width)*2;
        return Perimeter;
    }
}。
主程序中用switch的。

解决方案 »

  1.   

    将FileWriter fw = new FileWriter (f);改成FileWriter fw = new FileWriter (f,true)即可。
      

  2.   

    interface Shape{
        double perimeter();
    }class Rectangle implements Shape{
        final double width;
        final double height;    public Rectangle(double width,double height){
            this.width = width;
            this.height = height;
        }    public double perimeter(){
            return (width + height) * 2;
        }
    }class Print // 定义一个输出图形周长的类
    {
        private File f;    public Print(File file){
            this.f = file;
        }    void print(Shape s) throws IOException {
            FileWriter fw = new FileWriter (f);
            fw.write(s.getClass().getName() + " 周长为:" + s.perimeter());
            fw.close();
        }
    }
      

  3.   

    FileWriter(File file, boolean append) 
    在给出 File 对象的情况下构造一个 FileWriter 对象。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。你应该用这个构造方法。
    FileWriter fw = new FileWriter (f,true);你的这个结构有点奇怪。我总觉得,图形应该是抽象类,输出功能作为一个接口才妥当的。