一道公务员的考试题目.用编程实现.出现了一些奇怪的问题.请高手多多指教
import java.io.IOException;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
/*
* 奇怪的程序去掉map中的奇数位置的对象
* 100张多米诺骨牌整齐地排成一列,依顺序编号为1,2,3,......99,100.第一次拿走
* 所有奇数位置上地骨牌,第二次再从剩余的骨牌中拿走所有奇数位置上的骨牌,依此类推.
* 请问最后剩下的一张骨牌的编号是多少??
* 用array容易实现但是用list,set,map就不行
*/
public class Test {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Map map = new TreeMap();
//发牌
for(int i = 0; i <= 20; i++) {
map.put(new Integer(i),new Counter(i));
}
//抽牌
map = drawOut(map);
//打印结果
System.out.println("The last is :" + map);
}
//抽取奇数位置的牌
public static Map drawOut(Map map) throws IOException {
//抽牌以前的骨牌
System.out.println("抽牌以前的骨牌: " + map);
//抽牌
for(int i = 1 ; i < map.size(); i++) {
// System.out.print("outside: " + i + " ");
// System.out.println(((i+1)%2)==0);
// 不管map有多大,为什么总是判断到一半以后就跳出循环?我用list,set,hashmap都是这样的.
// 为什么会这样啊,那位大侠可以说一说,万分感谢!
// 但是如果把if语句注解调就是正确的
if(((i+1)%2)==0) {
// System.out.print("inside: " +i + " ");
// System.out.println(((i+1)%2)==0);
map.remove(new Integer(i));
}
}
//抽牌以后的骨牌
System.out.println("抽牌以后的骨牌: " + map);
Map mapTemp = new TreeMap();
int i = 0;
for(Iterator it=map.keySet().iterator();it.hasNext();) {
mapTemp.put(new Integer(i),map.get((Integer)it.next()));
i++;
}
map = null; //洗掉旧牌
//重新整理后的骨牌
System.out.println("重新整理后的骨牌: " + mapTemp);
//递归调用直到剩最后一张牌,由于第一张放的是begin所以size>2
if(mapTemp.size()>2) {
//看看还剩几张牌
System.out.println(mapTemp.size());
System.out.println("Press any key continue");
System.in.read();
drawOut(mapTemp);
}
//打印抽出的结果,希望有大侠多多指点.打印的结果为什么会是这个样子?
System.out.println("我晕:" + mapTemp);
return mapTemp;
}
}
//一个简单的包装类
class Counter implements Comparable{
private int i;
Counter(int i){
this.i = i;
}
public int getCounter() {
return i;
}
public String toString() {
return i==0?"begin: ":Integer.toString(i);
}
public int compareTo(Object o) {
int j = ((Counter)o).getCounter();
return (i < j ? -1: (i == j ? 0 : 1));
}
}
相关推荐
20XX年公务员考试选词填空习题.pdf
20XX年公务员考试选词填空习题.pdf
公务员考试 成语积累辨析.pdf
公务员考试 成语积累辨析.pdf
广东参考题目
广东省公务员考试真题解析,资料齐全,pdf版本
往年省考高频成语汇总【内容详细】
在准备省考的你 十分需要这篇文档
【工业自动化】欧姆龙PLC产品线与编程软件应用:从选型架构到调试排错的全流程技术指南
内容概要:本文《欧姆龙PLC与编程软件完全手册》系统介绍了欧姆龙PLC的产品架构、软件体系、通信协议、选型策略及编程调试技巧。重点区分了两大技术平台:基于CX-Programmer的传统C系列(CP/CJ/CS)与基于Sysmac Studio的新一代Sysmac平台(NJ/NX/NY),强调二者在软件生态、寻址方式和通信架构上的根本差异。手册详细对比了各系列PLC的性能参数,并提供与西门子产品的功能对标,帮助用户快速定位。深入讲解了编程操作中的关键问题,如任务结构设计、间接寻址、FB封装陷阱、在线调试五件套等,特别指出“FB使能关闭时状态不初始化”等易出错点。最后汇总了选型路径与现场避坑清单,极具实战指导价值。; 适合人群:具备一定工业自动化基础,从事PLC编程、设备调试、系统集成的研发工程师和技术人员,尤其是从西门子平台转向欧姆龙或参与新项目选型的1-5年经验从业者。; 使用场景及目标:① 新项目选型时判断应选用C系列还是Sysmac平台;② 编程调试过程中掌握高效操作技巧与常见问题排查方法;③ 实现跨平台迁移、系统升级或接手他人项目时规避架构与逻辑陷阱;④ 提升对欧姆龙PLC任务机制、间接寻址、FB设计等高级功能的理解与应用能力。; 阅读建议:本手册理论结合实践,建议按“先架构后操作”的顺序阅读,重点章节需结合实际工程反复演练。特别是FB设计规范、任务切换处理、强制操作收尾流程等内容,应在仿真环境中验证后再应用于现场。注意版本匹配问题,操作前确认所用软件与控制器固件版本兼容。


Web 开发
