Java中输入判定的错误和纠正
在编程过程中,很多技术人员看重程序的简洁性,效率性和包容性。其中最容易问到的就是假如输入数据不符合要求时的程序处理,这也是很多公司的机试题中应聘人员写出了符合功能要求的程序却并未通过面试的原因。下面是本人在刷《剑指offer》的过程中遇到的第一个问题,java中使用Scanner进行输入时,关于判定用户输入数据是否符合数据类型要求的处理的问题。
比如编程题中要求程序判定用户输入的数是否为水仙花数。
题意中虽然并没有特意说明数据类型,通常我们会采用int型变量作为程序中的主要参数,很多程序员在面试过程中拿到题目便不假思索,洋洋洒洒的写出了简洁高效的代码,但是最后却被通知机试不通过。有可能就是面试官希望在程序中看到关于异常情况的处理,但是程序员提交的答案却完全没有考虑到这点。
我在刚接触输入验证的过程中看到网友介绍了很多方法,筛选过后认为一下方法是最适合初学者的。
假如已知程序中定义的基本数据类型为int型,需要写出输入验证的处理过程是“当用户输入非整数的时候便一直提醒用户输入整数,直到正确输入再进行后续操作”。
于是我在一开始写下的代码如下:
import java.util.Scanner;
public class test {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int num;
while(true){
if (sc.hasNextInt()){
num=sc.nextInt();
break;
}else{
System.out.println("输入错误,请重新输入整数:");
}
}
}
}
该代码的思路是在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);
}
}
Java中输入判定的错误和纠正的更多相关文章
- 深入探讨Java中的异常与错误处理
Java中的异常处理机制已经比较成熟,我们的Java程序到处充满了异常的可能,如果对这些异常不做预先的处理,那么将来程序崩溃就无从调试,很难找到异常所在的位置.本文将探讨一下Java中异常与错误的处理 ...
- 记一次在java中的日期parse错误
String dateString = "2014101517"; new SimpleDateFormat("yyyyMMddHH").parse(dateS ...
- 简单聊聊java中如何判定一个对象可回收
背景 说到java的特性,其中一个最重要的特性便是java通过new在堆中分配给对象的内存,不需要程序员主动去释放,而是由java虚拟机自动的回收.这也是java和C++的主要区别之一:那么虚拟机是如 ...
- Java中的一些常见错误
1.空指针错误 在java数组的使用中,有时候需要对字符串数组中的元素进行对比.那么当元素不为null时,程序会正常运行:然而,一旦对比的元素为null,那么程序就会出现空指针错误. 解决方法:加入保 ...
- java中输入方式Scanner和BufferedReader
Scanner 在java.util包中,需要引入时可以用import java.util.*;或者import java.util.Scanner; 工作原理:通过new创建一个Scanner对象, ...
- Java中输入字符的排列以及按从小到大的顺序输出
今天笔试,遇到一个问题,大意就是输入一行字符,例如a b c ,按从小到大的顺序输出它们排列而成的字符串,输出就是abc acb bac bca cba cab.求这个程序怎么实现. 其实这个题很简单 ...
- java中数组实现的错误
作为一个刚学java的小白 真是错误百出 下面就是一个大神会非常不屑的一个小错误 数组在初始化的时候仅仅是定义了一个数组,并未其中的内容初始化. 附上错误代码 : class student{publ ...
- java 中常见的一些错误
1.NosuchMethodError java 类中找不到该方法! 可能该类所在的同一个包下有一个相同的相同的类,然后那个类中没有我们所要调用的类. 解决方法:若那个类不需要,可以删除class! ...
- java中输入3个数,从大到小的输出。。。。
总结:我暂时不能理解,C语言时讲过,java里就不理解了 package com.a; import java.sql.Date; import java.util.Scanner; //输入三个数, ...
随机推荐
- mybatis的foreach标签
今天写sql发现了一点问题,乱弄了好久算是搞定了.关于mybatis的批量插入使用foreach插入形式为: insert into role_privilege( role_id, privileg ...
- Python Revisited (变量)
目录 = 浅拷贝 深拷贝` 函数的默认参数为可变类型时 危险 全局变量与临时变量 global 在函数里面进行复制 再看一个例子 numpy里的bug? 待续 @ 首先,需要指出的是,Python的变 ...
- Linux下修改MySQL数据表中字段属性
一.修改某个表的字段类型及指定为空或非空 alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空]; alter table 表名称 modify 字段名称 字段类 ...
- python操作MONGODB数据库,提取部分数据再存储
目标:从一个数据库中提取几个集合中的部分数据,组合起来一共一万条.几个集合,不足一千条数据的集合就全部提取,够一千条的就用一万减去不足一千的,再除以大于一千的集合个数,得到的值即为所需提取文档的个数. ...
- 软工+C(10): 团队项目[NABCD] - 对话式编辑
上一篇:助教指南,持续更新... 下一篇:从命令行开始逐步培养编程能力(Java) 动机(Motivation) Eating your own dog food, also called dogfo ...
- 访问docker仓库
仓库(Repositiry)是集中存放镜像的地方,分为公共仓库和私有仓库.一个容易与之混淆的概念是注册服务器(Registry).实际上注册服务器是存放仓库的具体服务器,一个注册服务器上可以有多个仓库 ...
- ☆ [ZJOI2006] 书架 「平衡树维护数列」
题目类型:平衡树 传送门:>Here< 题意:要求维护一个数列,支持:将某个元素置顶或置底,交换某元素与其前驱或后继的位置,查询编号为\(S\)的元素的排名,查询排名第\(k\)的元素编号 ...
- Magento 2 Error: A technical problem with the server created an error. Try again to continue what you were doing. If the problem persists, try again later.
有时在Magento上进行调试会很烦人,特别是如果出现了一些问题,而不是在你实际编写代码时. 这是Magento管理面板上发生的事情.截至目前,它可能是三个原因之一,让我们讨论一下: 1.管理员密码 ...
- [linux]解除linux对多次登录密码错误的账户的锁定
其他wheel账户下,执行: sudo pam_tally2 --user=username --reset
- 树&堆
树 什么是树? 大概像下面这样: 树的概念 树的每个点被称为节点: 连接的两个点,一个为父节点,一个为子节点,例如上图中,\(1\)是\(4\)的父节点,\(4\)是\(1\)的子节点: 没有父节点的 ...