首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

很老的一路题了,大家帮忙看看

2013-01-07 
很老的一道题了,大家帮忙看看*有两个村,张村和李村 张村的人星期一三五说谎 李村的人星期二四六说谎** 一

很老的一道题了,大家帮忙看看
*有两个村,张村和李村 张村的人星期一三五说谎 李村的人星期二四六说谎
*
* 一人问,今天周几?结果两个村的人都回答“前天是我说谎的日子”
*
* 问:今天是周几?

最近看到也在解这个题,面向过程的解法基本是熟悉了,正在尝试用面向对象来解决这个问题,但在构建村子类的时候卡了思路了,大家也尝试解解看,有没有什么好的思路一起共享。

下面是我的代码块,只是运行的结果是周日,不知道错在哪了,求大神帮忙查查


public class WhenLie {
        public static void main(String[] args) {
                Day day;
                VillageA a;
                VillageB b;

                //对每一天进行判断,看前天是否都为说谎日
                for (int i = 1; i <= 7; i++) {
                        day = new Day(i);
                        a = new VillageA(day);
                        b = new VillageB(day);
                        Day beforeYestoday = day.yestaday().yestaday();
                        boolean a_answer = a.answer(beforeYestoday);
                        boolean b_answer = b.answer(beforeYestoday);
                       
                        if (!a_answer && !b_answer) {
                                System.out.println(i);
                        }
                }
        }
}

//A村构建一个类
class VillageA {
        boolean isTellLie = true;    //true代表说真话
       
        //初始化判定当天是否说谎日
        VillageA(Day day) {
                if (day.id == 1 || day.id == 3 || day.id == 5) {
                        isTellLie = false;
                }


        }

        //回答某一天是否说谎日,此day不一定是当天
        boolean answer(Day day) {
                VillageA v = new VillageA(day);
                if (isTellLie) {
                        return v.isTellLie;
                } else {
                        return !v.isTellLie;
                }
        }
}

class VillageB {
        private boolean isTellLie = true;

        VillageB(Day day) {
                if (day.id == 2 || day.id == 4 || day.id == 6) {
                        isTellLie = false;
                }
        }

        boolean answer(Day day) {
                VillageA v = new VillageA(day);
                if (isTellLie) {
                        return v.isTellLie;
                } else {
                        return !v.isTellLie;
                }
        }
}

//构建一个日期类,有成员变量id表明是星期几(1代表周一,2代表周二,类推)
class Day {

        int id;

        Day(int id) {
                this.id = id;
        }

        //返回一个昨天
        Day yestaday() {
                if (id > 1) {
                        id--;
                } else if (id == 1) {
                        id = 7;


                }

                return this;
        }
}


[解决办法]
看了一下是不是这些错了
class VillageB {
        private boolean isTellLie = true;

        VillageB(Day day) {
                if (day.id == 2 
[解决办法]
 day.id == 4 
[解决办法]
 day.id == 6) {
                        isTellLie = false;
                }
        }

        boolean answer(Day day) {
                VillageB v = new VillageB(day);
                if (isTellLie) {
                        return v.isTellLie;
                } else {
                        return !v.isTellLie;
                }
        }
}

热点排行