引言

最近,一位女子吐槽软卧车厢分配三男一女,引发了网友的热议。有人认为,这是对女性的不尊重和不安全,应该取消或改进软卧车厢的分配机制;有人认为,这是正常的随机分配,没有必要大惊小怪,只要保证车厢内的秩序和卫生就行。那么,软卧车厢的分配究竟是如何实现的呢?作为程序员的我,看到这个事件后,首先想到的是软卧车厢分配的技术实现。本文将简单分享我的看法,如有错误,敬请指正。

技术实现

首先,我们假设一个车厢4个床位,路线有a、b、c、d四个站点,甲乙丙均为同一性别,丁为异性,每隔一个站点100票价,全程400,甲要求车厢内全部同性。

买票的时候提供一个选项,是否不接受异性同车厢,根据这个选项进行判断,如果选择是,那么需要支付四个床位的车票费用,也就是甲需要支付1200购买。
如果分配到的车厢有同性乘客乙从a点上车c点下车,那么相应减去乙乘客从b到c的差价,也就是说这时乘客甲只需支付1100购买。

在以上情况的前提下,中途c点丙上车到d点下车,计算c到d这部分差价,如果甲在app下单,则通过app自动退还差价,如果在车站下单那就到下车点凭身份证到窗口退钱。甲下车退还100,实际支付1000。

假设乙丙没有选择该服务,则系统根据车厢是否有选择了该服务的乘客为判断依据进行优先级排序和判断,也就是说在甲下车前该车厢只能分配给甲相同性别的且中途同一性别下单优先分配到该车厢。

如果这趟车所有软卧车厢都有一位要求同性别的乘客‘甲’,那么丁将无法购买到本次列车的软卧,只能选择硬座或其它班次。此外,考虑到研发成本等多方面因素,选择该服务需要支付额外服务费。

代码示例

package com.java;import java.util.ArrayList;
import java.util.List;// 定义车厢类
public class Carriage {// 定义车厢属性private List<Passenger> beds; // 四个床位,初始为空private int[] arrive; // 四个床位终点private int serviceFee; // 选择不接受异性同车厢的服务费// 构造方法public Carriage() {this.beds = new ArrayList<Passenger>(4); // 初始化为0beds.add(0, new Passenger());beds.add(1, new Passenger());beds.add(2, new Passenger());beds.add(3, new Passenger());this.arrive = new int[4]; // 初始化为0this.serviceFee = 100;}// 定义购票方法public void buyTicket(Passenger passenger) {// 获取第一个空床位的索引int index = indexOf(beds);// 判断是否有空床位if (index != -1) {// 判断是否选择了不接受异性同车厢的服务if (passenger.getOption().equals("yes")) {// 分配空床位beds.set(index, passenger);// 分配床位终点arrive[index] = passenger.getEnd();// 判断是否第一个床位,如果不是,计算其它床位费用int diff = 0;if (index > 0) {for (int i = 0; i < index; i++) {diff += (arrive[i] - passenger.getStart()) * 100;}}// 支付四个床位的车票费用和服务费passenger.pay(((passenger.getEnd() - passenger.getStart()) * 100) * 4 - diff + serviceFee);System.out.println(passenger.getName() + "选择了不接受异性同车厢的服务,分配到了" + (index + 1) + "号床位,支付了" +((passenger.getEnd() - passenger.getStart()) * 100 * 4 - diff + serviceFee) + "元。");} else {// 判断是否有同性乘客已经选择了不接受异性同车厢的服务boolean isItNot = false;for (int i = 0; i < 4; i++) {if (beds.get(i).getGender() != passenger.getGender() && beds.get(i).getOption() != null && beds.get(i).getOption().equals("yes")) {isItNot = true;break;}}if (!isItNot) {// 分配空床位beds.set(index, passenger);// 分配床位终点arrive[index] = passenger.getEnd();// 支付单个床位的车票费用passenger.pay((passenger.getEnd() - passenger.getStart()) * 100);System.out.println(passenger.getName() + "没有选择不接受异性同车厢的服务,分配到了"+ (index + 1) + "号床位,支付了" + ((passenger.getEnd() - passenger.getStart()) * 100) + "元。");// 计算是否需要退还差价给已经选择了不接受异性同车厢的服务的乘客for (Passenger bed : beds) {if (bed.getGender() == passenger.getGender() && bed.getOption().equals("yes")) {// 计算差价int diff = 0;if (passenger.getEnd() > bed.getEnd()) {diff = (bed.getEnd() - passenger.getStart()) * 100;} else {diff = (passenger.getEnd() - passenger.getStart()) * 100;}// 退还差价bed.setRefund(bed.getRefund() + diff);System.out.println("因为" + passenger.getName() + "加入了车厢,退还了" + bed.getName() + diff + "元差价。");}}} else {System.out.println(passenger.getName() + "没有选择不接受异性同车厢的服务,但是有异性乘客已经选择了该服务,无法购买。");}}} else {System.out.println(passenger.getName() + "没有空床位,无法购买。");}}// 定义下车方法public void getOff(Passenger passenger) {// 判断是否在该车厢内if (beds.contains(passenger)) {// 获取床位号int index = beds.indexOf(passenger);// 清空床位beds.set(index, null);// 判断是否需要退还服务费if (passenger.getOption().equals("yes")) {// 退还差价passenger.refund(passenger.getRefund());System.out.println(passenger.getName() + "下车,退还了" + passenger.getRefund() + "元。");} else {System.out.println(passenger.getName() + "下车。");}} else {System.out.println(passenger.getName() + "不在该车厢内。");}}// 定义一个辅助方法,返回数组中某个元素的索引,如果不存在则返回-1public int indexOf(List<Passenger> array) {for (int i = 0; i < array.size(); i++) {if (array.get(i).getName() == null) {return i;}}return -1;}
}
package com.java;// 定义乘客类
public class Passenger {// 定义乘客属性private String name; // 姓名private int gender; // 性别,1为男性,-1为女性private String option; // 是否不接受异性同车厢,yes或noprivate int start; // 上车站点,a为1,b为2,c为3,d为4private int end; // 下车站点,a为1,b为2,c为3,d为4private int refund; // 退还的差价// 构造方法public Passenger(String name, int gender, String option, int start, int end) {this.name = name;this.gender = gender;this.option = option;this.start = start;this.end = end;this.refund = 0;}public Passenger() {}// 定义支付方法public void pay(int amount) {System.out.println(name + "支付了" + amount + "元。");}// 定义退款方法public void refund(int amount) {System.out.println(name + "退还了" + amount + "元。");}// 定义获取姓名的方法public String getName() {return name;}// 定义获取性别的方法public int getGender() {return gender;}// 定义获取选项的方法public String getOption() {return option;}// 定义获取上车站点的方法public int getStart() {return start;}// 定义获取下车站点的方法public int getEnd() {return end;}public int getRefund() {return refund;}public void setRefund(int refund) {this.refund = refund;}
}
package com.java;public class Demo {// 定义主方法public static void main(String[] args) {// 创建一个车厢对象Carriage carriage = new Carriage();// 创建一些乘客对象Passenger p1 = new Passenger("张三", 1, "yes", 2, 4); // 张三是男性,要求不接受异性同车厢,从b点到d点Passenger p2 = new Passenger("李四", 1, "no", 1, 3); // 李四是男性,没有要求不接受异性同车厢,从a点到c点Passenger p3 = new Passenger("王五", 1, "no", 3, 4); // 王五是男性,没有要求不接受异性同车厢,从c点到d点Passenger p4 = new Passenger("赵六", -1, "no", 1, 4); // 赵六是女性,没有要求不接受异性同车厢,从a点到d点// 调用购票方法carriage.buyTicket(p2); // 李四购票成功,支付了200元。carriage.buyTicket(p1); // 张三购票成功,支付了800元。carriage.buyTicket(p3); // 王五购票成功,支付了100元,退还了张三100元差价。carriage.buyTicket(p4); // 赵六购票失败,因为有异性乘客已经选择了不接受异性同车厢的服务// 调用下车方法carriage.getOff(p2); // 李四下车carriage.getOff(p4); // 赵六不在该车厢内carriage.getOff(p1); // 张三下车,退还100元}}

运行结果如下:

李四支付了200元。
李四没有选择不接受异性同车厢的服务,分配到了1号床位,支付了200元。
张三支付了800元。
张三选择了不接受异性同车厢的服务,分配到了2号床位,支付了800元。
王五支付了100元。
王五没有选择不接受异性同车厢的服务,分配到了3号床位,支付了100元。
因为王五加入了车厢,退还了张三100元差价。
赵六没有选择不接受异性同车厢的服务,但是有异性乘客已经选择了该服务,无法购买。
李四下车。
赵六不在该车厢内。
张三退还了100元。
张三下车,退还了100元。

总结

以上就是我对软卧车厢分配技术实现的简单分析。从技术角度来看,并不复杂。但是从社会角度来看,则涉及到很多复杂而又敏感的问题。比如:

  1. 是否应该尊重乘客对于同性别或异性别的偏好?
  2. 是否应该区分男女对于安全感和舒适感的需求?
  3. 是否应该收取额外的服务费来提供这种服务?
  4. 是否会引发性别歧视或者性别隔离的争议?

这些问题没有简单的答案,需要我们从多个角度和层面来思考和讨论。我希望我的文章能够给您带来一些启发和思考,也欢迎您在评论区留下您的看法和建议。谢谢您的阅读。

软卧车厢购票性别分配:技术实现与社会效应相关推荐

  1. 在c语言中,可以使用动态内存分配技术定义元素个数可变的数组,C语言复制在线考题1精选.doc...

    C语言复制在线考题1精选 窗体顶端 <C语言程序设计208304>综合测试 返回测验列表 大项 1 / 2 - 单项选择题 60.0/ 70.0 分 本大题共35道,每题2分,共计70分, ...

  2. 浅谈量子密钥分配技术

    项目背景 在学校和导师的的大力支持,我们进过一年的努力,终于到了项目结题,我们的研究方向本身难度较高,并且是个全新的领域,这对我们来说是个严峻的挑战,好在有导师的及时引导,团队也努力配合,让我们找到了 ...

  3. 金融结构对技术创新的影响效应 及其区域差异研究(马 微 惠 宁)

    作者:马 微 .惠 宁 摘要:金融结构对技术创新的影响效应:技术创新能力的持续提升有赖于金融结构的适时调整和金融生态环境的不断完善 对于风险较低.收益稳定的引进模仿创新而言,银行是适宜的融资渠道: 对 ...

  4. CCF TALKs 报名 | 今天,技术如何推动社会进步

    中国计算机学会青年工作委员会将在2018年12月16日举办首次 CCF Talks 活动. 今天,信息技术的影响扩展到人类社会的每一个角落.从先进的工业制造,到广大的农业耕作,从城市的运行管理,到个人 ...

  5. 我国对计算机科学与技术专业人才社会需求,浅谈计算机科学与技术专业应用技术型人才的培养研究论文...

    浅谈计算机科学与技术专业应用技术型人才的培养研究论文 培养应用型专业技术人才是我国高等教育的重要任务,目前我国社会和经济的发展对于,应用技术型人才的需求在不断提升.因此高校在进行计算机专业应用技术人才 ...

  6. 计算机科学与技术寒假社会实践,计算机科学与技术专业寒假社会实践报告.doc...

    计算机科学与技术专业寒假社会实践报告 参加社会生活和社会实践,不仅可以学到很多在课堂上学不到的东西也可以把课堂上学到的理论知识同社会实践 ___起来,加深对课堂学习内容的理解.更重要的是,参与社会生活 ...

  7. 关于图像处理技术在维护社会安全方面的应用

    201720050231 钱一汀 关于图像处理技术在维护社会安全方面的应用 最近发生了一件令人扼腕叹息的事情,由于缺乏必要的法律意识,年仅19的花季少女卿晨璟靓被警方通缉.由于其惊人的颜值,她被称为最 ...

  8. 技术驱动人类社会发展的结构与范式更迭

    文章目录 技术驱动人类社会发展的结构与范式更迭 技术驱动人类社会的历史演进 农业革命 工业革命 信息革命 技术驱动人类社会的结构更迭 古代社会 工业社会 信息社会 技术驱动人类社会的范式更迭 农业领域 ...

  9. 计算机视觉技术在现代社会中的应用

    计算机视觉技术是一种将图像和视频信号转化为数字信息并进行分析和处理的技术.随着计算机技术和人工智能技术的不断发展,计算机视觉技术在现代社会中的应用越来越广泛.本文将介绍计算机视觉技术的基本原理和在现代 ...

最新文章

  1. 再次学习基础爬虫,爬取大学排名。
  2. [CTO札记]架构的改造是个持续、全面、螺旋的过程
  3. Sync 攻击原理及防范技术
  4. 网站SEO优化哪些操作会被视为作弊?
  5. 微服务架构的优势与不足(二)
  6. 这些实验好习惯科研小白一定要先养成!
  7. 2021泉州高考学校成绩查询,2021泉州市地区高考成绩排名查询,泉州市高考各高中成绩喜报榜单...
  8. Vue优化策略_项目上线_02
  9. 问题五十一:怎么用ray tracing画tear drop
  10. 1.Jenkins 2 权威指南 --- 简介
  11. 基于php技术的毕业设计管理系统的研究与实现,基于PHP的图书管理系统设计与实现毕业论文.DOC...
  12. gg修改器修改内购_【教程】手把手教你修改微信性别为空
  13. HDMI 接口电路信号完整性
  14. android双卡切换,OPPOReno双卡双待怎么切换使用?
  15. 集合(二):Set : HashSet; LinkedHashSet; TreeSet
  16. SwiftUI调用UIKit
  17. 计算机网络实训报告总结,学习计算机网络的实训总结
  18. 轻量级日志分析PLG平台Loki安装部署及使用(promtail+loki+Grafana)
  19. 阿米巴经营和数据分析
  20. Api升级28适配填坑(一)

热门文章

  1. Java实现用户注册手机发码送验证
  2. 计算机考研250,考研“通过率”最高的5个专业,分数250左右,毕业后身价翻倍...
  3. java中的熔断机制_SpringCloud- 第八篇 Hystrix熔断机制(五)
  4. 中国已有一家类三星的企业,做得比华为更广泛
  5. ScrollView仿微博主页标题栏悬停渐变及Fragment实现多个内容页面切换
  6. 双目立体匹配 SAD
  7. MediaCodec 完成PCM编码成AAC
  8. iphone一键转移_怎样把旧手机里的照片一键转移到新iPhone 8 plus上?
  9. 轴系负荷测量matlab,船舶主推力轴承径向支撑轴承润滑性能分析.pdf
  10. php show.bs.popover,bootstrap popover用法和popover中文api