`

一道笔试题:按照用户输入的rule,经过并、交、差运算后,输出字符串结果。

 
阅读更多

今天在CSDN看到一个笔试题,觉得蛮有意思的,

题目如下:

从事先写好的Input.txt文件中读取数,
Input.txt 内容
A{13,2,1,20,30,50}
B{1,2,34,5,6}
C{2,3,12,23,14,11}
用户在键盘随意敲入...例如((A*B))+B-C,((C+B)*A)-B期中+,*,-,分别代表集合的并交差运算,控制台打印输出。

开始的时候打算用栈来计算的,

但想了想,不会搞,还是来个笨方法吧。

废话不多说,贴代码。

代码写的很烂,汗了!

  1. /**
  2. *从事先写好的Input.txt文件中读取数,
  3. *Input.txt内容
  4. *A{13,2,1,20,30,50}
  5. *B{1,2,34,5,6}
  6. *C{2,3,12,23,14,11}
  7. *用户在键盘随意敲入...例如((A*B))+B-C,((C+B)*A)-B期中+,*,-,分别代表集合的并交差运算,控制台打印输出。
  8. */
  9. packagecom.lim.test;
  10. importjava.io.BufferedReader;
  11. importjava.io.FileInputStream;
  12. importjava.io.IOException;
  13. importjava.io.InputStreamReader;
  14. importjava.lang.reflect.InvocationTargetException;
  15. importjava.lang.reflect.Method;
  16. importjava.util.ArrayList;
  17. importjava.util.List;
  18. /**
  19. *@authorbzwm
  20. *
  21. */
  22. publicclassEditorString{
  23. privateTypea=null;
  24. privateTypeb=null;
  25. privateTypec=null;
  26. privateTypet=null;
  27. /**
  28. *读入指定的文件
  29. *
  30. *@parampath
  31. */
  32. publicvoidreadFile(Stringpath){
  33. BufferedReaderreader=null;
  34. try{
  35. reader=newBufferedReader(newInputStreamReader(
  36. newFileInputStream(path)));
  37. Stringstr=null;
  38. while((str=reader.readLine())!=null){
  39. if(str.substring(0,1).equals("A")){
  40. a=newType(str);
  41. }elseif(str.substring(0,1).equals("B")){
  42. b=newType(str);
  43. }elseif(str.substring(0,1).equals("C")){
  44. c=newType(str);
  45. }elseif(str.substring(0,1).equals("T")){
  46. t=newType(str);
  47. }else{
  48. System.out.println("nosuchtype!");
  49. return;
  50. }
  51. }
  52. }catch(Exceptione){
  53. e.printStackTrace();
  54. return;
  55. }
  56. }
  57. /**
  58. *处理并、交、差操作,显示结果
  59. *
  60. *@paramrule
  61. */
  62. publicvoiddisplayResult(Stringrule){
  63. intstart=0;
  64. intend=0;
  65. while(rule.length()>2){
  66. if(rule.contains("(")){
  67. start=rule.lastIndexOf("(");
  68. end=start+4;
  69. rule=execute(start,end,rule);
  70. }else{
  71. start=0;
  72. end=start+2;
  73. rule=executeNormal(start,end,rule);
  74. }
  75. }
  76. Listresult=t.getArray();
  77. for(inti=0;i<result.size();i++)
  78. System.out.println(result.get(i));
  79. }
  80. /**
  81. *处理并、交、差操作
  82. *
  83. *@paramstart
  84. *@paramend
  85. *@paramrule
  86. *@returnrule
  87. */
  88. privateStringexecute(intstart,intend,Stringrule){
  89. intsize=rule.length();
  90. Typeobj=typeFactory(rule.substring(start+1,start+2));
  91. Stringope=rule.substring(start+2,start+3);
  92. Typearg=typeFactory(rule.substring(end-1,end));
  93. try{
  94. t=execute(obj,arg,ope);
  95. }catch(Exceptione){
  96. e.printStackTrace();
  97. }
  98. returnrule.substring(0,start)+"T"+rule.substring(end+1,size);
  99. }
  100. /**
  101. *当用户输入的rule没有括号的情况:处理并、交、差操作
  102. *@paramstart
  103. *@paramend
  104. *@paramrule
  105. *@returnrule
  106. */
  107. privateStringexecuteNormal(intstart,intend,Stringrule){
  108. intsize=rule.length();
  109. Typeobj=typeFactory(rule.substring(start,start+1));
  110. Stringope=rule.substring(start+1,start+2);
  111. Typearg=typeFactory(rule.substring(end,end+1));
  112. try{
  113. t=execute(obj,arg,ope);
  114. }catch(Exceptione){
  115. e.printStackTrace();
  116. }
  117. returnrule.substring(0,start)+"T"+rule.substring(end+1,size);
  118. }
  119. /**
  120. *根据ope的不同,调用不同的方法
  121. *
  122. *@paramobj
  123. *@paramarg
  124. *@paramope
  125. *@return
  126. *@throwsSecurityException
  127. *@throwsNoSuchMethodException
  128. *@throwsIllegalArgumentException
  129. *@throwsIllegalAccessException
  130. *@throwsInvocationTargetException
  131. */
  132. privateTypeexecute(Typeobj,Typearg,Stringope)
  133. throwsSecurityException,NoSuchMethodException,
  134. IllegalArgumentException,IllegalAccessException,
  135. InvocationTargetException{
  136. Classc=obj.getClass();
  137. Class[]args=newClass[1];
  138. args[0]=arg.getClass();
  139. Methodm=null;
  140. if(ope.equals("+")){
  141. m=c.getMethod("bing",args);
  142. }elseif(ope.equals("*")){
  143. m=c.getMethod("jiao",args);
  144. }elseif(ope.equals("-")){
  145. m=c.getMethod("cha",args);
  146. }else{
  147. System.out.println("NoSuchMethod");
  148. returnnull;
  149. }
  150. return(Type)m.invoke(obj,newObject[]{arg});
  151. }
  152. /**
  153. *读入用户输入的匹配规则如:((C+B)*A)-B
  154. *
  155. *@return
  156. */
  157. publicstaticStringreadInput(){
  158. Stringret=null;
  159. BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
  160. try{
  161. ret=br.readLine();
  162. }catch(IOExceptione){
  163. e.printStackTrace();
  164. returnnull;
  165. }
  166. returnret;
  167. }
  168. /**
  169. *构造工厂
  170. *
  171. *@paramtype
  172. *@return
  173. */
  174. privateTypetypeFactory(Stringtype){
  175. if(type.equals("A")){
  176. returnnewType(a.getArray());
  177. }elseif(type.equals("B")){
  178. returnnewType(b.getArray());
  179. }elseif(type.equals("C")){
  180. returnnewType(c.getArray());
  181. }elseif(type.equals("T")){
  182. returnnewType(t.getArray());
  183. }else{
  184. returnnull;
  185. }
  186. }
  187. /**
  188. *把如{13,2,1,20,30,50}的集合抽象成一个类,提供并、交、差操作
  189. *
  190. *@authorbzwm
  191. *
  192. */
  193. classType{
  194. privateListarray=newArrayList();
  195. publicType(Stringsrt){
  196. this.array=createList(srt);
  197. }
  198. publicType(Listlist){
  199. this.array.addAll(list);
  200. }
  201. publicListgetArray(){
  202. returnthis.array;
  203. }
  204. /**
  205. *并操作
  206. *
  207. *@paramarg
  208. *@return
  209. */
  210. publicTypebing(Typearg){
  211. //是否加入到集合中的标志
  212. booleanadd=true;
  213. //取出传入的Type对象的List
  214. Listlist=arg.getArray();
  215. //遍历传入的Type对象的List
  216. for(inti=0;i<list.size();i++){
  217. add=true;
  218. //与array里的值一一进行比较,如果全都不等,则加入到原array中,否则不加入
  219. for(intj=0;j<array.size();j++){
  220. if(((Integer)list.get(i)).intValue()==((Integer)array
  221. .get(j)).intValue()){
  222. add=false;
  223. }
  224. }
  225. if(add){
  226. array.add(list.get(i));
  227. }
  228. }
  229. //返回新的Type对象
  230. returnnewType(array);
  231. }
  232. /**
  233. *交操作
  234. *
  235. *@paramarg
  236. *@return
  237. */
  238. publicTypejiao(Typearg){
  239. //是否加入到集合中的标志
  240. booleanadd=false;
  241. //存放交集数据的List
  242. Listret=newArrayList();
  243. //取出传入的Type对象的List
  244. Listlist=arg.getArray();
  245. //遍历传入的Type对象的List
  246. for(inti=0;i<list.size();i++){
  247. add=false;
  248. //与array里的值一一进行比较,如果有相等的,则加入到ret中,否则不加入
  249. for(intj=0;j<array.size();j++){
  250. if(((Integer)list.get(i)).intValue()==((Integer)array
  251. .get(j)).intValue()){
  252. add=true;
  253. }
  254. }
  255. if(add){
  256. ret.add(list.get(i));
  257. }
  258. }
  259. //返回新的Type对象
  260. returnnewType(ret);
  261. }
  262. /**
  263. *差操作
  264. *
  265. *@paramarg
  266. *@return
  267. */
  268. publicTypecha(Typearg){
  269. //是否加入到集合中的标志
  270. booleanadd=true;
  271. //存放交集数据的List
  272. Listlist=arg.getArray();
  273. //遍历传入的Type对象的List
  274. for(inti=0;i<list.size();i++){
  275. add=true;
  276. //与array里的值一一进行比较,如果有相等的,则从原array中将其删除,如果全都不等,则加入到原array中
  277. for(intj=0;j<array.size();j++){
  278. if(((Integer)list.get(i)).intValue()==((Integer)array
  279. .get(j)).intValue()){
  280. add=false;
  281. //删除相等的数据
  282. array.remove(j);
  283. }
  284. }
  285. if(add){
  286. array.add(list.get(i));
  287. }
  288. }
  289. //返回新的Type对象
  290. returnnewType(array);
  291. }
  292. /**
  293. *解析字符串,将数字加入到List中
  294. *
  295. *@paramstr
  296. *@return
  297. */
  298. privateListcreateList(Stringstr){
  299. //将字符串解析成字符串数组A{13,2,1,20,30,50}-->newString[]{13,2,1,20,30,50}
  300. Strings[]=str.replaceAll(str.substring(0,1),"").replace("{",
  301. "").replace("}","").split(",");
  302. Listlist=newArrayList();
  303. for(inti=0;i<s.length;i++){
  304. list.add(newInteger(s[i]));
  305. }
  306. returnlist;
  307. }
  308. }
  309. /**
  310. *测试程序
  311. *@paramargs
  312. */
  313. publicstaticvoidmain(Stringargs[]){
  314. EditorStringes=newEditorString();
  315. es.readFile("input.txt");
  316. es.displayResult(readInput());//((C+B)*A)-B
  317. }
  318. }

写完这个程序之后,该睡觉了,也没测试!

有问题了再说啊!

分享到:
评论

相关推荐

    笔试题:输入0123456789对应输出一二三四五六七八九

    本篇文档描述的是一个在线笔试题的解答过程,题目要求是将输入的数字0到9转换成中文的“一二三四五六七八九”。从描述中我们可以了解到,这是一个程序设计相关的题目,要求编程者不仅要处理个位数的转换,还要处理两...

    Code_笔试题_字符串压缩_

    标题中的“Code_笔试题_字符串压缩_”指的是一个与编程相关的笔试题目,重点在于实现字符串的压缩功能。这类问题通常出现在技术面试或招聘过程的笔试试题中,旨在考察应聘者的编程能力和对数据结构的理解。 描述中...

    名企面试笔试真题:TI 笔试题.rar

    这份"名企面试笔试真题:TI 笔试题.rar"文件,通过模拟数字应用工程师和MCU助理应用工程师的笔试题目,为求职者提供了一次了解和准备TI面试的机会。 1. **模拟电路与数字电路**: - 模拟电路涉及电阻、电容、电感...

    2023-4-8 笔记-第一阶段-第2节 分支和循环语句-3.2.5 一道笔试题:-2024.4.15

    2023-04-08 项目笔记-...循环语句 3.1while循环 3.1.1while语句中的break和continue 3.2for循环 3.2.1语法 3.2.2break和continue中 3.2.3for语句的循环控制变量 3.2.4一些for循环的变种 3.2.5一道笔试题:- 2024-04-15

    字符串常见笔试题

    1 将字符串转化为整数。2 将整数转化为字符串(考虑正负号的问题)。3 实现字符串拷贝函数strcpy(程序的完整性)。4 编程实现memcpy函数(以字节为单位的拷贝)。5 编程实现memmove函数。 等笔试题。

    腾讯在线笔试题-字符串反转,以及把整个字符串逆序

    在完成代码实现后,通过 `print_log` 函数来输出处理后的结果,该函数用于在控制台上打印字符串。在 `main` 函数中,初始化字符串,调用反转函数 `rever`,最后输出反转后的字符串。 总结来说,字符串的反转和逆序...

    C++面试题笔试题C++ 数据结构算法笔试题资料合集.zip

    C++面试题笔试题C++ 数据结构算法笔试题资料合集: 50个C、C++面试题.pdf C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案....

    中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题

    中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 v中兴笔试题 中兴笔试题 ...中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题

    java笔试题笔试题

    java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 ...

    百度笔试题 百度 笔试题

    【百度笔试题】中的知识点主要涉及三个方面:编程题、算法题和系统设计。下面将分别对这三个方面进行详细的解析。 1. **编程题** 这道编程题要求编写一个函数`is_include(char *a, char *b)`,判断字符串`b`的所有...

    环球雅思的一道笔试题

    有一组字符串,需要对它进行远程读取并按照规则进行逐行排序。 排序规则: 1. 字符规则(注意:区分大小写):j 2. 最后一列(1,2,3,4,5)需出现在排序后的第一列 3. 排序后输出的内容格式保持不变(即两两一组,...

    查找连续的字符串-百度笔试题

    ### 查找连续的字符串-百度笔试题 #### 题目背景与要求 这是一道来自百度公司的编程笔试题目。题目要求实现一个程序,能够在一个给定的字符串中找到所有连续的数字序列,并最终输出最长的连续数字串。 #### 题目...

    C语言字符串练习(习题+答案).zip

    6. 字符串格式化:学习使用printf()和scanf()函数处理字符串输入和输出,以及如何使用sprintf()和sscanf()在内存中操作字符串。 7. 字符串操作:了解strtok()函数分割字符串,以及其它如strpbrk(), strspn(), ...

    嵌入式软件工程师笔试题.pdf

    本资源是一份嵌入式软件工程师笔试题,涵盖了多个嵌入式软件开发中的知识点,包括字符串逆序、链表逆序、字节位计算、字节搜索、字符串转换等。 题目1:将一个字符串逆序 在这道题中,考生需要编写一个函数将一个...

    华为最新笔试题——编程题及答案.doc

    答案提供了一个使用 C 语言实现的解决方案,该方案使用 gets 函数获取用户输入的字符串,然后使用指针 p 遍历字符串,直到遇到字符串结尾的 '\0',并统计字符的数量。 这道题目涉及到以下知识点: * 字符串的表示...

    华信笔试题笔试题笔试题

    大连华信去年的笔试题,可以给各位即将工作的同学一些参考

    各种C语言字符串函数-笔试面试必备

    ### 各种C语言字符串函数-笔试面试必备 在C语言中,字符串处理是程序员必须掌握的基本技能之一,尤其在笔试和面试环节中,考察字符串函数的使用与自定义实现非常常见。以下是对几种常见的C语言字符串函数的深入解析...

    Qt笔试题总结

    - **QTextStream**:方便地读写文本文件,支持格式化输入输出。 - **QDir**:处理目录操作,如列出目录内容、创建新目录等。 - **QNetworkAccessManager**:处理网络请求,如下载、上传文件。 **5. 多线程** - **...

    西门子Siemens笔试题及答案

    在这篇文章中,我们将讨论西门子Siemens笔试题及答案,涵盖串行通讯、模拟输入模块、数字量输出模块、逻辑运算和电机调速方法等多个方面的知识点。 串行通讯是一种将数据位按照顺序一个接一个地发送的通信方式。在...

Global site tag (gtag.js) - Google Analytics