求大神帮我解决这道JAVA题 这个是尝试用内部类解决下面问题

题目是:

一个连锁店有许多分店,这些分店对外公布的商品价格是price*ratio,其中price是总店制定的统一价格,ratio是总店下发给各个分店的系数,各个分店的ratio值可能不同。为了简单起见,假设该连锁店只销售一种商品,从而只有一个价格price。
现在要求设计一个或几个类,实现如下目标:
1. 总店能够修改price,能够修改各个分店的ratio。
2. 每创建某个类的一个对象就相当于开了一家分店,构造函数需要初始化该分店的ratio。
3. 总店能够记住它的所有分店。
4. 各个分店能够显示商品价格,即price*ratio。
5. 写main方法,测试你的实现。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class ShopManager {
private Map<String,SubShop> subShopMap;
private Double price;
class SubShop{
private String shopName;
private Double ratio;
public SubShop(String name,Double ratio){
this.shopName = name;
this.ratio = ratio;
}
public String getShopName() {
return shopName;
}
public void setShopName(String shopName) {
this.shopName = shopName;
}
public Double getRatio() {
return ratio;
}
public void setRatio(Double ratio) {
this.ratio = ratio;
}
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public void setNewSubShop(String name,Double ratio){
if(this.subShopMap == null){
this.subShopMap = new HashMap<String,SubShop>();
}
if(subShopMap.containsKey(name)){
SubShop sub = (SubShop)subShopMap.get(name);
System.out.println("已经存在同名的分店!["+sub.getShopName()+","+sub.getRatio()*this.price+"]");
}else{
SubShop sub = new SubShop(name,ratio);
subShopMap.put(name, sub);
}
}
@SuppressWarnings("unchecked")
public void showAllSubShop(){
for(Iterator it=subShopMap.keySet().iterator();it.hasNext();){
String key = (String)it.next();
showSubShopByName(key);
}
}
public void showSubShopByName(String name){
SubShop sub = (SubShop)subShopMap.get(name);
System.out.println("Name:"+sub.getShopName()+",Price:"+sub.getRatio()*this.price);
}
public static void main(String[] args){
ShopManager sm = new ShopManager(); //创建总店
sm.setPrice(110.0); //设置价格
sm.setNewSubShop("no1", 1.1); //加入分店1
sm.setNewSubShop("no3", 1.3); //加入分店2
sm.setNewSubShop("no2", 1.2); //加入分店3
sm.setNewSubShop("no2", 1.2); //加入分店3
sm.setNewSubShop("no4", 1.4); //加入分店4
sm.showAllSubShop();
sm.setPrice(120.0);
sm.showAllSubShop(); //显示所有分店的价格
sm.showSubShopByName("no1"); //显示指定分店的价格
}
}
给个好评吧
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-10
import java.util.ArrayList;
import java.util.List;

public class Test {

public static void main(String[] args) {

double price = 100d;
//初始化总店价格为100
ZongDian zongdian = new ZongDian(price);

//打印总店初始化价格
System.out.println("Initial price is: " + zongdian.getPrice());

//修改总店价格
System.out.println("\nNow modifying price to 200: ");
double newPrice = 200D;
zongdian.modifyPrice(newPrice);
System.out.println("price now is: " + zongdian.getPrice());

//开分店1赚钱了
double fendianRatio1 = 0.7;//ratio = 0.7分店1
zongdian.new FenDian(fendianRatio1);

System.out.println("First fendian price is: " + zongdian.getFenDianPrice(1));

//生意好,继续开分店2
double fendianRatio2 = 0.5;
zongdian.new FenDian(fendianRatio1);
System.out.println("\nSeonnd fendian price is: " + zongdian.getFenDianPrice(2));
zongdian.modifyRatio(0.3, 2);//修改分店2ratio
System.out.println("Afer modifying, Seonnd fendian price is: " + zongdian.getFenDianPrice(2));

//打印现在有几家分店
System.out.println("\nTotal :" + zongdian.size());
}

}

class ZongDian{
protected static double price;
private List<FenDian> list = new ArrayList<FenDian>();

public ZongDian(){

}

public ZongDian(double price){
this.price = price;
}

public static void modifyPrice(double price) {
ZongDian.price = price;
}

public void modifyRatio(double newRatior, int index){
list.get(index-1).setRatio(Double.valueOf(newRatior));
}

public double getFenDianPrice(int index){
return this.list.get(index-1).getPrice();
}

public int size(){
return list.size();
}

class FenDian{
private double ratio;

public FenDian(double ratio){
this.ratio = ratio;
list.add(this);
}

public double getPrice(){
return price * ratio;
}

public void setRatio(double ratio) {
this.ratio = ratio;
}

}

public static double getPrice() {
return price;
}
}
第2个回答  2012-04-10
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class ShopManager {
private Map<String,SubShop> subShopMap;
private Double price;
class SubShop{
private String shopName;
private Double ratio;
public SubShop(String name,Double ratio){
this.shopName = name;
this.ratio = ratio;
}
public String getShopName() {
return shopName;
}
public void setShopName(String shopName) {
this.shopName = shopName;
}
public Double getRatio() {
return ratio;
}
public void setRatio(Double ratio) {
this.ratio = ratio;
}
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public void setNewSubShop(String name,Double ratio){
if(this.subShopMap == null){
this.subShopMap = new HashMap<String,SubShop>();
}
if(subShopMap.containsKey(name)){
SubShop sub = (SubShop)subShopMap.get(name);
System.out.println("已经存在同名的分店!["+sub.getShopName()+","+sub.getRatio()*this.price+"]");
}else{
SubShop sub = new SubShop(name,ratio);
subShopMap.put(name, sub);
}
}
@SuppressWarnings("unchecked")
public void showAllSubShop(){
for(Iterator it=subShopMap.keySet().iterator();it.hasNext();){
String key = (String)it.next();
showSubShopByName(key);
}
}
public void showSubShopByName(String name){
SubShop sub = (SubShop)subShopMap.get(name);
System.out.println("Name:"+sub.getShopName()+",Price:"+sub.getRatio()*this.price);
}
public static void main(String[] args){
ShopManager sm = new ShopManager(); //创建总店
sm.setPrice(110.0); //设置价格
sm.setNewSubShop("no1", 1.1); //加入分店1
sm.setNewSubShop("no3", 1.3); //加入分店2
sm.setNewSubShop("no2", 1.2); //加入分店3
sm.setNewSubShop("no2", 1.2); //加入分店3
sm.setNewSubShop("no4", 1.4); //加入分店4
sm.showAllSubShop(); //显示所有分店的价格
sm.setPrice(120.0); //重新设置价格
sm.showAllSubShop(); //显示所有分店的价格
sm.showSubShopByName("no1"); //显示指定分店的价格
}
}追问

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
能不能不用这个来实现

相似回答