博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中输入判定的错误和纠正
阅读量:6280 次
发布时间:2019-06-22

本文共 1607 字,大约阅读时间需要 5 分钟。

在编程过程中,很多技术人员看重程序的简洁性,效率性和包容性。其中最容易问到的就是假如输入数据不符合要求时的程序处理,这也是很多公司的机试题中应聘人员写出了符合功能要求的程序却并未通过面试的原因。下面是本人在刷《剑指offer》的过程中遇到的第一个问题,java中使用Scanner进行输入时,关于判定用户输入数据是否符合数据类型要求的处理的问题。

比如编程题中要求程序判定用户输入的数是否为水仙花数。

题意中虽然并没有特意说明数据类型,通常我们会采用int型变量作为程序中的主要参数,很多程序员在面试过程中拿到题目便不假思索,洋洋洒洒的写出了简洁高效的代码,但是最后却被通知机试不通过。有可能就是面试官希望在程序中看到关于异常情况的处理,但是程序员提交的答案却完全没有考虑到这点。

我在刚接触输入验证的过程中看到网友介绍了很多方法,筛选过后认为一下方法是最适合初学者的。

假如已知程序中定义的基本数据类型为int型,需要写出输入验证的处理过程是“当用户输入非整数的时候便一直提醒用户输入整数,直到正确输入再进行后续操作”。

于是我在一开始写下的代码如下:

1 import java.util.Scanner; 2  3 public class test { 4     public static void main(String[] args){ 5         Scanner sc=new Scanner(System.in); 6         int num; 7         while(true){ 8             if (sc.hasNextInt()){ 9                 num=sc.nextInt();10                 break;11             }else{12                 System.out.println("输入错误,请重新输入整数:");13             }14         }15     }16 }

该代码的思路是在while循环里用if判断输入的是否为整数,如果是整数则将该值赋值给num,跳出循环,如果不是整数则打印“输入错误,请重新输入整数:”,实际上,因为while循环的判定语句是true,始终成立,所以while循环体内的语句会无限循环,所以一旦接收到非整数的输入,则会无限打印上面的提示文字。

该代码中需要改正的问题就是要将hasNextInt()的判定放在while循环的判定中,只有输入为整数的时候循环才会结束并且因为hasNexInt()判定完输入的数据后并不会将标记移动到下一行,所以循环的过程中并不会再次判断输入的数据是否为整数,只会继续往后执行打印提示文字的语句想要把标记移动到下一行重新判断用户再次输入的数据是否符合要求需要用next(),改进后的代码如下:

import java.util.Scanner;public class test {    public static void main(String[] args){        Scanner sc=new Scanner(System.in);        int num;        while(!sc.hasNextInt()){            sc.next();            System.out.println("输入错误,请重新输入整数:");        }        num=sc.nextInt();        System.out.println("你输入的是:"+num);    }}

 

转载于:https://www.cnblogs.com/edward-life/p/10502954.html

你可能感兴趣的文章
virtualbox 笔记
查看>>
Git 常用命令
查看>>
驰骋工作流引擎三种项目集成开发模式
查看>>
SUSE11修改主机名方法
查看>>
jdk6.0 + Tomcat6.0的简单jsp,Servlet,javabean的调试
查看>>
Android:apk签名
查看>>
2(2).选择排序_冒泡(双向循环链表)
查看>>
MySQL 索引 BST树、B树、B+树、B*树
查看>>
微信支付
查看>>
CodeBlocks中的OpenGL
查看>>
短址(short URL)
查看>>
第十三章 RememberMe——《跟我学Shiro》
查看>>
mysql 时间函数 时间戳转为日期
查看>>
索引失效 ORA-01502
查看>>
Oracle取月份,不带前面的0
查看>>
Linux Network Device Name issue
查看>>
IP地址的划分实例解答
查看>>
如何查看Linux命令源码
查看>>
运维基础命令
查看>>
入门到进阶React
查看>>