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; //输入三个数, ...
随机推荐
- day01(计算机组成,进制,内存分布,操作系统)
本周内容: 第一天: 计算机原理 操作系统 第二天: 编程语言 python入门:环境 - 编辑器 变量 基本数据类型 学习方法: 鸡汤 - 干货 wwwh : what | why | where ...
- Open Source
资源来源于http://www.cnblogs.com/Leo_wl/category/246424.html RabbitMQ 安装与使用 摘要: RabbitMQ 安装与使用 前言 吃多了拉就是队 ...
- Python——SQLite
一.连接数据库 import sqlite3 conn = sqlite3.connect('数据库名.db') 二.插入 import sqlite3 conn = sqlite3.connect( ...
- BZOJ 3669 魔法森林
LCT维护生成树 先按照a的权值把边排序,离线维护b的最小生成树. 将a排序后,依次动态加边,我们只需要关注b的值.要保证1-n花费最少,两点间的b值肯定是越小越好,所以我们可以考虑以b为关键字维护最 ...
- Mysql数据库使用量查询及授权
Mysql数据库使用量查询及授权 使用量查询 查看实例下每个库的大小 select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2 ...
- CF618G(利用浮点数精度+矩乘优化DP)
这题真的太神辣,%了一发题解,原来还能这么搞QWQ 设\(A_{i,j}\)表示不加任何限制时,第\(i\)个格子会出现权值为\(j\)的史莱姆的概率,则有: \[A_{i,j}=A_{i,j-1}* ...
- 51nod1812树的双直径(换根树DP)
传送门:http://www.51nod.com/Challenge/Problem.html#!#problemId=1812 题解:头一次写换根树DP. 求两条不相交的直径乘积最大,所以可以这样考 ...
- GWAS群体分层 (Population stratification):利用plink对基因型进行PCA
一.为什么要做祖先成分的PCA? GWAS研究时经常碰到群体分层的现象,即该群体的祖先来源多样性,我们知道的,不同群体SNP频率不一样,导致后面做关联分析的时候可能出现假阳性位点(不一定是显著信号位点 ...
- server被强制关闭,
一个client和一个Server,两者之间建立了一个基于TCP的socket连接,在刚刚建立好连接后,尚未进行数据传输,Server端应用程序突然crush掉了,现在立刻重启Server端应用程序( ...
- ECShop安装及错误修复
ecshop 商城的安装及出现错误的解决 听语音 | 浏览:600 | 更新:2016-03-04 16:02 | 标签:错误 安装 电子商务 1 2 3 4 5 6 7 分步阅读 昨天第一次安装ec ...