读书人

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

发布时间: 2013-01-07 10:02:25 作者: rapoo

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

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

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


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;
}
}
}

读书人网 >J2SE开发

热点推荐