package helloworld; interface Visitor{ public double visit(AmmeterElement elment); } abstract class AmmeterElement{ public abstract void accept(Visitor v); public abstract double showElectricAmount(); public abstract void setElectricAmount(double n); } class HomeAmmeterVisitor implements Visitor{ public double visit( AmmeterElement ammeter){ double charge=0; double unitOne=0.6,unitTwo=1.05; int basic = 6000; double n=ammeter.showElectricAmount(); if(n<=basic) { charge = n*unitOne; } else { charge =basic*unitOne+(n-basic)*unitTwo; } return charge; } } class IndustryAmmeteVisitor implements Visitor{ public double visit(AmmeterElement ammeter){ double charge=0; double unitOne=1.52,unitTwo=2.78; int basic = 15000; double n=ammeter.showElectricAmount(); if(n<=basic) { charge = n*unitOne; } else { charge =basic*unitOne+(n-basic)*unitTwo; } return charge; } } class Ammeter extends AmmeterElement{ double electricAmount; //电表的电量 public void setElectricAmount(double n) { electricAmount = n; } public void accept(Visitor visitor){ double feiyong= visitor.visit(AmmeterElement x); //让访问者访问当前元素 System.out.println("当前电表的用户需要交纳电费:"+feiyong+"元"); } public double showElectricAmount(){ return electricAmount; } } public class Main { public static void main(String args[]) { Visitor 计表员=new HomeAmmeterVisitor(); //生成按家用电标准计算电费的"计表员" Ammeter 电表=new Ammeter(); 电表.setElectricAmount(5678); 电表.accept(计表员); //调用电表的accept的方法按家用标准计算电费 计表员=new IndustryAmmeteVisitor(); //生成按工业用电标准计算电费的"计表员" 电表.setElectricAmount(5678); 电表.accept(计表员); } }修改以下代码
时间: 2024-02-14 20:11:30 浏览: 64
在类Ammeter中的accept方法中,将AmmeterElement x修改为this,表示访问当前的电表元素。修改后的代码如下:
```
class Ammeter extends AmmeterElement{
double electricAmount; //电表的电量
public void setElectricAmount(double n) {
electricAmount = n;
}
public void accept(Visitor visitor){
double feiyong= visitor.visit(this); //让访问者访问当前元素
System.out.println("当前电表的用户需要交纳电费:"+feiyong+"元");
}
public double showElectricAmount(){
return electricAmount;
}
}
```
相关问题
interface Visitor{ public double visit(AmmeterElement elment); } abstract class AmmeterElement{ public abstract void accept(Visitor v); public abstract double showElectricAmount(); public abstract void setElectricAmount(dou
由于您的代码没有完整的闭合,我无法完整地理解您的问题。不过根据您提供的代码片段,我可以看出这是一个模拟电表的程序,其中 `Visitor` 是一个访问者接口,`AmmeterElement` 是一个电表元素的抽象类。
在 `AmmeterElement` 中,`accept(Visitor v)` 方法接受一个访问者对象作为参数,用于在访问者对象中调用 `visit()` 方法,从而实现对电表元素的访问。
在 `Visitor` 接口中,`visit(AmmeterElement element)` 方法接受一个电表元素作为参数,并返回一个 `double` 类型的值,用于表示对电表元素的访问结果。
如果您有具体的问题需要问我,可以继续提出。
class Ammeter extends AmmeterElement{ double electricAmount; //电表的电量 public void setElectricAmount(double n) { electricAmount = n; } public void accept(Visitor visitor){ double feiyong= visitor.visit(this.showElectricAmount()); //让访问者访问当前元素 System.out.println("当前电表的用户需要交纳电费:"+feiyong+"元"); } public double showElectricAmount(){ return electricAmount; } }
这段代码是一个电表类,它继承了 `AmmeterElement` 抽象类,实现了 `accept(Visitor visitor)` 方法和 `showElectricAmount()` 方法。
在 `accept(Visitor visitor)` 方法中,它首先调用 `showElectricAmount()` 方法获取当前电表的电量,然后调用访问者对象的 `visit()` 方法,将电量作为参数传入。访问者对象会根据电量计算出需要交纳的电费,并返回一个 `double` 类型的结果。最后电表类会将这个结果输出到控制台。
这个电表类的设计模式使用了访问者模式,将电表类和计费逻辑分离,使得计费逻辑可以根据不同的需求进行变化,而不需要对电表类本身进行修改。
阅读全文