本帖最后由 x_wy46 于 2009-11-25 14:14:03 编辑

解决方案 »

  1.   

    也不是啊,那个项目经理蛮认真的跟我说的,况且我别题目(jsp和spring方面的)也做得不好,结果可想而知!!!
      

  2.   

    第一个:
    public class Microwave{
    private int doorStaus;
    private int heatStatus;
    private Food food;public void openDoor(){
       if(doorStatus==0)//0为门正关着
       {
          if(status==1)//0为未加热且
          System.out.println("对不起,正在加热,不能开门");
       }else{
       //相关关门代码
       }
       
    }public void heat(Food food){
    if (food.hasShell()==true)
    System.out.println("对不起,带壳的不能加热");
    else
    //相关加热代码
    }}
      

  3.   

    写个微波炉类,包含一些基本属性,根据需求来定
    比如:boolean open_flag
         boolean working_flag
         int size
         int power
         String model
         ...
         doing(){...}
         ...
    然后new出来的微波炉实体,去对付各种食物和情况
    至于食物,既然要分带不带皮之类,就写个食物接口,实现不同的食物
    一定要把描述的东西写成oo思想,不要说什么if判断,if这种谁不会写啊
      

  4.   

    要考虑的比较全的话还是有些工作的,随便写的可能有些地方有误
    public class MicoroWaveOven {
    private String   doorState=null;
    private boolean isPowerOn=false;
    private Food cookingFood=null;

    public void fire(Food food){
    if(!this.isPowerOn) return;
    if(food==null) return;

    if(this.doorState.equals("opend")){
    alert("请先关门!");
    return;
    }

    if(food.hasShell()){
    alert("本产品不能烹饪带壳食物!");
    openDoor();
    return;
    }

    this.cookingFood=food;

    //to-do:另启动线程加热食物
    }

    public void cookFood(){
    if(this.cookingFood==null) return;

    while(cookingFood.getState()!=FoodState.COOKED){
    cookingFood.changeState();
    }

    openDoor();
    }

    public void openDoor(){
    if(cookingFood==null
      ||cookingFood.getState()==FoodState.COOKED){
    this.doorState="opened";
    }else{
    alert("食物正在加热中请稍后");
    }
    }

    public void on(){
    this.isPowerOn=true;
    }

    public void off(){
    this.isPowerOn=false;
    }

    public void closeDoor(){
    this.doorState="closed";
    }

    public boolean isDoorOpen(){
    return this.doorState.equals("opened");
    }

    public boolean isDoorClose(){
    return this.doorState.equals("closed");
    }

    public void alert(String message){
    System.out.println("警告:"+message);
    }
    }interface Food{
    public boolean   hasShell();
    public void      changeState();
    public FoodState  getState();
    }enum FoodState{
    RARE,
    HALF_RARE,
    COOKED,
    FIRED
    }
      

  5.   

    以前csdn上有个庖丁解羊
    lz去找找看,给他来个解微波炉完事good luck
      

  6.   

    看着很有意思,请指教!
    class Microwave { 
    int power;
    int size;
    int container;
    int color;
    boolean open
    double time [] = {1,2,3,4,5,6,7,8,9,};
    String model;
            Person p; public double timeMenu(double time) {
    for(int i=0; i<time.length(); i++;) {
    System.out.println("已工作时间:" + time[i] + "min");         
                    heating(new Food());
    }
    } public void heating(Food food) {
    System.out.println("食物正在加热");
    if(p.normal) {
    System.out.println("I couldn't open the door");
    } else {
    System.out.println("疯子");
    }
    }

    }
    class Food {
     boolean sikn_food = true;
     int weigth;
     int height;
     int size;
     int type;

    public class Person {
    boolean normal = true; public boolean judgeFood(Food food) {
    eye();
    } public void eye(Food food){
    if(food == skin_food) {
    System.out.println("这是有皮的食物,不可以在微波炉中加热");
    break;
    } else if(food != skin_food) {
    System.out.println("这是无皮的食物,可以在微波炉中加热");
    handTime();
    }
    } public void handTime() {
    timeMenu();

    } public static void main(String[] args) {
    Person p = new Person();
    p.judgeFood();
    }
      

  7.   

    第二题,我觉的不应该用接口,而用组合,很明显的has a的关系
      

  8.   

    关于冰箱的问题说的不清楚,我发表一下我对微波炉的看法,我觉得它真的能看出一个程序员的水平高低
    我们来分析一下这个问题
    用java写一个微波炉,注意物品正加热时不能开门,带皮带壳食物不能被加热。 
    1,微波炉是一个对象,它应该是一个公共对象,大家都可以用。
    2,注意物品正加热时不能开门,我们可以理解,这个对象在执行时,是排它的,唯一的
    3,带皮带壳食物不能被加热。这个对象不是万能的,有些事它是不可以做的。
    因此,我们的对象是公共对象,它有一个开关(属性),同时有开关方法,并且是单例程序,并且有同步约束,在方法体里加一些判断, 这个过程就OK了。
      

  9.   

    不懂Java,愿上帝保佑每一位努力生活的人
      

  10.   

    我想考的主要是面向对象的思想,而不是具体的实现:
    // 食物基类,所有食物继承之
    abstract class Food {
    }// 带壳接口,所有带壳接口实现之
    interface HaveShell {
    }// 带皮,同上
    interface HaveSpin {
    }// 是否可以加热
    interface Limited {
    boolean enableHeat(Food food);
    }// 加热具体实现
    // 可以进行不同实现,如有一天,发明一种新微波炉可以加热带壳的,就可以重新写个实现类
    class EnableHeatImpl implements Limited {
    public boolean enableHeat(Food food) {
    if (food instanceof HaveShell || food instanceof HaveSpin)
    return false;
    else
    return true;
    }
    }// 一种特殊食物,带皮又带壳。
    class MyFavorite extends Food implements HaveShell, HaveSpin {
    }// 微波炉接口
    interface Microwave {
    void heatUp(Food food); boolean openDoor();
    }// 微波炉实现类,美的微波炉
    class MicrowaveMedia implements Microwave {
    private static Food food; @Override
    public synchronized void heatUp(Food food) {
    }
    @Override
    public boolean openDoor() {
    return food == null;
    }
    }
      

  11.   

    我面试遇到过:用JS,写一个树形表格,每一个元组的行不确定,每一个行的列不确定,全动态的。用笔写。
    我TMD用JS创建过表格,不过用笔不会写。
      

  12.   

    applerockhool 此人感觉oo思想理解得不错
      

  13.   

    我觉得冰箱的用继承好些吧,他们存在is a 的关系,父类都是冰箱,但是不具体,你写子类都实现父类的公共方法(冰箱通有的用途)然后再具体实现子类特有的自定义的方法。而且它的可维护性要好,哪天又添加一种新型冰箱,只要继承冰箱父类就可以了
      

  14.   

    楼主可以参考《UML:Java程序员指南(双语版)》
    第十一章。Mark IV咖啡壶
      

  15.   

    package test;
    public class Test 
    { public static void main(String[] arges){  Food egg = new Food("egg",true);
    Food milk = new Food("milk",false);
    Weibolu myFamily = new Weibolu();
    myFamily.open();
    myFamily.put(egg);
    myFamily.heat(); myFamily.open();
    myFamily.put(milk);
    myFamily.heat();

    }
    //用java写一个微波炉,注意物品正加热时不能开门,带皮带壳食物不能被加热。
    class Weibolu
    {
    boolean isHeat = false;
    java.util.ArrayList<Food> foodList = new java.util.ArrayList<Food>();
    synchronized void open() {
    if (!isHeat)
    {
    System.out.println("可以打开!");
    }
    else {
    System.out.println("正在加热,不可以打开!");
    }
    } void heat() {
    if (foodList.size() == 0)
    {
    System.out.println("没有食物不能加热!");
    return;
    }
    isHeat = true;
    System.out.println("正在加热");
    try
    {
    wait(10000);
    }
    catch (Exception ex)
    {

    }

    System.out.println("加热完毕!");
    isHeat = false;
    } synchronized void put(Food food) {
    if (food.isHavePK)
    {
    System.out.println(food.name + ",带皮的不能被加热!");
    }
    else {
    System.out.println(food.name + ",能被加热!");
    foodList.add(food);
    }
    }

    void takeAll() { }};class Food
    {
    String name;
    boolean isHavePK;
    public Food(String n,boolean pk) {
    name = n;
    isHavePK = pk;
    }
    };
      

  16.   

    感觉 
    applerockhool兄的想法很好啊
      

  17.   

    Food类
    普通可以加热的实现一个heatable接口
    带皮壳的不予实现Microwave:heatUP(heatable food)
      

  18.   

    或者heatUP改为
    public void heatUp(Food food) {
       if(food instanceof heatable) {
           print("正在加热");
       }else {
           throw new RunTimeException("无法加热");
       }}
      

  19.   

    第一题用状态模式,status分为门开着,门关着,加热,对应status里面实现对应加热,拒绝加热和开门操作。然后带壳带皮的当参数传入微波炉,进行壳皮判断,有个问题就是:是不是对带壳带皮的东西用if判断还是有其他设计方法
    第二题用工厂方法模式,抽象父类有默认的冰的功能,然后抽象出不同的东西进行分离到对应类型的冰箱中
    这个好像相同部分不是很明确高手来指点我下
      

  20.   

    不懂Java,但是觉得用if来判断了,肯定不是好事情,赫赫
    正如楼上有几位所说,冰箱问题应该用状态模式
      

  21.   

    微波炉:public class Microwave{
    private boolean doorState; // 微波炉门状态 // Heatable 为一个接口,凡是能够加热的食物都要实现这个接口!
    public void heat(Heatable food){
    if(food.cooked){
    // 如果食物熟了,更改门为可以打开状态!
    doorState = true;
    } else doorState = false;
    } public boolean canOpen(){
    return this.doorState;
    }
    public void open(){
    if(canOpen){
    // 开门代码
    } else{
    // 不能开门代码
    }
    }
    }
      

  22.   

    [Quote=引用 18 楼 nokia5320xm 的回复:]
    引用 16 楼 aptweasel 的回复:
    关于冰箱的问题说的不清楚,我发表一下我对微波炉的看法,我觉得它真的能看出一个程序员的水平高低
    我们来分析一下这个问题
    用java写一个微波炉,注意物品正加热时不能开门,带皮带壳食物不能被加热。
    1,微波炉是一个对象,它应该是一个公共对象,大家都可以用。
    2,注意物品正加热时不能开门,我们可以理解,这个对象在执行时,是排它的,唯一的
    3,带皮带壳食物不能被加热。这个对象不是万能的,有些事它是不可以做的。
    因此,我们的对象是公共对象,它有一个开关(属性),同时有开关方法,并且是单例程序,并且有同步约束,在方法体里加一些判断, 这个过程就OK了。
    很有道理,受教了!!