在笔试遇到这样的一道题目 :
输入框输入两个数字 进行除法运算 因为UI没有进行判断 所以 要在代码中进行判断
要求:指定在一行输入 不考虑浮点数和不能整除情况
合法输入举例:345 345
输出:1
非法输入举例:345
输出:ERROR
代码如下:
public static void main (String[] args){
Scanner sc = new Scanner(System.in);
int[] a = new int[20];
int i = 0;
while (!sc.hasNextLine()) {//注意while处理多个case
a[i++] = sc.nextInt();
}
if(i==0||i>=2||a[1] == 0){
System.out.println("ERROR");
}else{
System.out.println(a[0]/a[1]);
}
}
关于这里用到的hasNextLine()判断:当读取到换行符时 判断为true
如果while判断条件为hasNextInt() 读取到换行符时 并不会跳出while循环
nextInt()也是不读取换行符的 nextLine读取到换行符就结束一行的读入
再看下面一个例子:
http://blog.youkuaiyun.com/chen820655096/article/details/8003619
public static void main (String[] args){
int n=0;
String s1;
Scanner s=new Scanner(System.in);
n=s.nextInt();
s1=s.nextLine();//加这句与不加的差别很大
//System.out.println("n为:"+n);
int s2[]=new int[n] ;
for(int i=0;i<n;i++){
s1=s.nextLine();
s2[i]=getLineSum(s1);
}
for(int i=0;i<n;i++){
System.out.println(s2[i]);
}
}
public static int getLineSum(String strLine){
Scanner s=new Scanner(strLine);
int sum=0;
while(s.hasNextInt())
{
sum+=s.nextInt();
}
return sum;
}
不加s1=s.nextLine()
结果为
2
1 3
0
4
加上以后的结果为
2
1 3
2 4
4
6
nextInt()读入的是仅是数字,而换行符没有读入,
使用nextInt()的时候,读取一定是数值型的字符,然后就按换行符 接着使用nextLine(),它是读到行分隔符就结束,而行分隔符前已经没信息,所以没有读到任何可返回的信息。