理发师悖论
来源:互联网 发布:福建师范网络教育平台 编辑:程序博客网 时间:2024/04/30 16:37
今天上离散数学的时候老师给我们看来一个小小的故事,其实就是著名的理发师悖论,也就是罗素悖论:在某个城市中有一位理发师,他的广告词是这样写的:“本人的理发技艺十分高超,誉满全城。我将为本城所有不给自己刮脸的人刮脸,我也只给这些人刮脸。我对各位表示热诚欢迎!”来找他刮脸的人络绎不绝,自然都是那些不给自己刮脸的人。可是,有一天,这位理发师从镜子里看见自己的胡子长了,他本能地抓起了剃刀,你们看他能不能给他自己刮脸呢?如果他不给自己刮脸,他就属于“不给自己刮脸的人”,他就要给自己刮脸,而如果他给自己刮脸呢?他又属于“给自己刮脸的人”,他就不该给自己刮脸。
其实看到这个例子,我就要程序简单的模拟了一下:
public class Person {private String name;private boolean isShave;public boolean getIsShave() {return isShave;}public void setIsShave(boolean isShave) {this.isShave = isShave;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
public class Barber extends Person{public void shave(Person person) {if(person.getIsShave())System.out.println(this.getName() + "不可以为" + person.getName() + "剪发");elseSystem.out.println(this.getName() + "可以为" + person.getName() + "剪发");;}}
public class Test {public static void main(String[] args) {/** * 两位顾客 */Person personA = new Person();personA.setName("zhangsan");personA.setIsShave(false);Person personB = new Person();personB.setName("lisi");personB.setIsShave(true);/** * 一位理发师 */Barber barber = new Barber();barber.setName("barber");barber.setIsShave(false);/** * 理发过程 */barber.shave(personA);barber.shave(personB);barber.shave(barber);}}
从程序的角度看,理发师为自己刮脸合理的,我们不应该说理发师如果给自己刮脸,自己就成为了给自己刮脸这类人,而与自己只给不给自己刮脸的人刮脸的理发原则,每个人都有给自己刮脸的权利,有的人不刮脸,有的人会自己刮脸,不刮脸的人会找理发师刮脸,这里我们可以理解为有两个对象,一个是客户,一个是理发师,理发师有给自己定下的原则,而在理发师给自己刮脸的过程中其实是他一个人担任了两种角色,即使客户也是理发师,从程序中可以看出,其实在执行的过程中并不会发生矛盾。
- 理发师悖论
- 理发师悖论
- 理发师悖论与集合
- 理发师悖论试解
- 完美破解理发师悖论
- 《理发师》
- 理发师
- 悖论
- 悖论
- 悖论
- 悖论
- 理发师问题
- 理发师问题
- 理发师问题
- 理发师问题
- 理发师问题
- PV----------理发师
- 理发师问题
- 系统调用
- 面试题之数组和分析
- 你不了解的awk
- TreeMap源码分析——基础分析(基于JDK1.6)
- Linux shell 变量 数学 运算
- 理发师悖论
- SHELL字符串处理技巧(${}、##、%%)
- uva 317 - Hexagon(规律推导)
- NetScheduleJobAdd函数添加任务计划的方法
- 金山快盘 文件冲突 解决方法
- mongo safe=fase隐含若干问题
- shell脚本的并行处理方法——multi.sh介绍
- 去除UISearchBar圆角背景
- 编程之美3.8求二叉树中节点的最大距离