逆向思维的思考方式案例:

有时候在处理问题时可能很棘手,一时想不出好的方法,不妨反过来看看,下面的例子就是:

说明:程序中有个bug

package s01_javabasic.day06;import java.util.Scanner;public class GuessingGame {public static void main(String[] args) {//表示玩家猜测的次数int count = 0;//用于保存判断的结果int[] result = new int[2];//全都都对,字符对位置不对Scanner scanner =new Scanner(System.in);System.out.println("GuessingGame>欢迎尝试猜字母游戏!"); //表示猜测的字符串char[] chs = generate();System.out.println(chs);System.out.println("GuessingGame>游戏开始,请输入你所猜的5个字母序列:(exit--退出)");while(true){String inputStr= scanner.next().trim().toUpperCase();if("EXIT".equals(inputStr)){System.out.println("GuessingGame>谢谢你的尝试,再见!");break;}char[] input = inputStr.toCharArray();//result = check(chs,input);if(result[0]==chs.length){//完全猜对的情况int score = 100*chs.length-count*10;System.out.println("GuessingGame恭喜你猜对了!你的得分是"+score);break;}else{count++;System.out.println("GuessingGame>你猜对"+result[1]+"个字符,其中"+result[0]+"个字符的位置正确!(总次数="+count+",exit--退出");}      }scanner.close();}/*** 随机生成需要猜测的字母序列* @return 存储随机字符的数组*/private static char[] generate() {char[] letters = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};boolean[] flags = new boolean[letters.length];char[] chs = new char[5];for(int i=0;i<chs.length;i++){int  index;do{index    = (int)(Math.random()*(letters.length));}while(flags[index]);//判断生成的字符是否重复chs[i] = letters[index];flags[index] = true;}return chs;}/*** 比较玩家输入的字母序列和程序所生成的字母序列,逐一比较字符及其位置,并记载比较结果* @param chs 程序生成的字符序列* @param input 玩家输入的字符序列* @return 存储比较的结果。返回值int数组 的长度为2 其中,索引为0的位置*         用于存放完全猜对的字母个数(字符和位置均正确),索引为1的位置用于存放猜对的字母个数(字符正确,但是位置不正确)*/private static int[] check(char[] chs, char[] input) {int[] result = new int[2];for(int i=0;i<input.length;i++){for(int j=0;j<chs.length;j++){if(input[i]==chs[j]){//判断字符是否正确result[1]++;if(i==j){//判断位置是否正确result[0]++;//次数累加}break;//判断有一个字符相同,不再需要与其他字符比较,(5个字符不同)}  }}return result;}/** BUG解决:check方法中如果用户录入AAAAA ,程序随机字符序列ABCDE* 会输出5个字符对的问题* 原因与解决:* 用户录入不可控可能会录入重复字符,导致取外层用户的每一个字符与内层比较时* 会重复判断相同的字符,认为有多个字符相同* 如果将程序随机字符序列作为外层就不会出现相同的字符* 在与用户录入字符序列比较时就不出现以上问题。* */}
运行程序后测试BUG截图:

一个简单的例子说明下逆向思维的使用。大家若有其他好的例子可以交流交流!

编程中思维方式——逆向思维案例相关推荐

  1. shell 不等于_关于shell编程中的整数值比较的两种方式的简单操作实例

    谈一谈关于shell编程中的整数值比较的两种方式 Shell编程有时处理一个对象时,需要我们对对象进行测试. 只有符合要求的才采取下一步操作,这样做的好处可以避免程序出错. 这个测试的对象可以是文件. ...

  2. 作为程序员,你在编程中吃了哪些数学的亏?

    作为程序员你在编程中吃过哪些亏?(以下留言来自图灵读者亲身经历) 精彩评论 我再等一分钟 吃过最大的亏就是现在看数据分析与挖掘的书,面对各种各样的矩阵.积分.微积分等各类高数,线代的知识......头 ...

  3. SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制...

    SAS学习笔记之<SAS编程与数据挖掘商业案例>(4)DATA步循环与控制.常用全程语句.输出控制 1. 各种循环与控制 DO组 创建一个执行语句块 DO循环 根据下标变量重复执行DO和E ...

  4. python简单编程-编程中最简单的语言Python,这样学或许更容易

    最近微信小程序上面出了一个跳一跳的小游戏 大家有没有玩呀? 编程中最简单的语言Python,这样学或许更容易 分享之前我还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Py ...

  5. Java并发编程中的若干核心技术,向高手进阶

    来源:http://www.jianshu.com/p/5f499f8212e7 引言 本文试图从一个更高的视角来总结Java语言中的并发编程内容,希望阅读完本文之后,可以收获一些内容,至少应该知道在 ...

  6. 《SAS编程与数据挖掘商业案例》学习笔记之十九

    继续<SAS编程与数据挖掘商业案例>学习笔记,本文侧重数据处理实践,包括:HASH对象.自定义format.以及功能强大的正则表达式 一:HASH对象 Hash对象又称散列表,是根据关键码 ...

  7. 《SAS编程与数据挖掘商业案例》学习笔记之十八

    接着以前的<SAS编程与数据挖掘商业案例>,之前全是sas的基础知识,现在开始进入数据挖掘方面笔记,本文主要介绍数据挖掘基本流程以及应用方向,并以logistic回归为例说明. 一:数据挖 ...

  8. 《SAS编程与数据挖掘商业案例》学习笔记之十六

    <SAS编程与数据挖掘商业案例>学习笔记,本次重点:sas宏变量 内容包括:宏变量.宏函数.宏参数.通配函数.字符函数.计算函数.引用函数.宏语句.宏应用 1.宏触发器: %name-to ...

  9. 《SAS编程与数据挖掘商业案例》学习笔记之十四

    继续<SAS编程与数据挖掘商业案例>学习笔记系列,本次重点:常用全程语句 所谓全程语句,是指可以用在任何地方的sas语句,既可以用在data数据步语句里面,也可以用在proc过程步里面,甚 ...

最新文章

  1. intel 82579v驱动下载_最新INTEL和AMD平台轻松安装WIN7,集成M.2和USB3.0驱动
  2. cics oracle xad_Cics安装与配置
  3. VC6.0 使用小结--让开发更加快捷的vc插件
  4. Copy GAC DLL
  5. oracle 从pflie启动,oracle初始化参数文件管理
  6. Java泛型的PECS原则
  7. Cookie和Session有什么区别?
  8. 微软说:麻将AI系统终获突破,人工智能商学院来啦!
  9. SDL2.0超简单入门 100行代码实现播放wav声音文件
  10. 测试环境搭建-7:安装loadrunner提示此计算机上缺少vc2005_sp1_with_atl_fix_redist解决方法
  11. 简单易行的番茄时间管理法——学会专注(转载)
  12. 非参数检验——Wilcoxon 检验 Friedman 检验与 Nemenyi 后续检验
  13. 深度linux双系统切换快捷键,苹果 Mac双系统如何切换?用Option键切换双系统的步骤分享...
  14. 神武授权位置服务器,太古封魔录神武获得,神武服务器入口
  15. java 怎么让打印信息换行?
  16. 安装程序检测出计算机内含有下列,图文帮您win10系统安装ps提示:安装程序检测到计算机处于挂起状态的解决教程...
  17. 雷达回波脉冲压缩python代码
  18. 安装python3.7后报错No module named ‘ufw‘
  19. 计算机菜单打不开,电脑右键菜单打不开怎么办
  20. crmeb商城部署(踩坑及解决方法)

热门文章

  1. Oracle11g安装,配置监听和数据库实例
  2. r5-4600u和r5-3550h哪个好?
  3. seurat提取表达矩阵_单细胞分析实录(5): Seurat标准流程
  4. 小米Note真机体验,3D打磨和单手优化是亮点
  5. 100道动态规划——17 UVA 10934 Dropping water balloons 猜数问题
  6. python的下划线使用
  7. electron打包在linux环境运行,通过Electron基于网页版打包Linux端飞书(Electron-Lark)...
  8. 瀛海威/瀛海威:Internet先烈
  9. JS和JAVA版本的工作日计算器
  10. java获取当前年份、月份和日期字符串等