解题思路:
首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取。这个扫描器在扫描过程中判断停止的依据就是“空白符”,空格啊,回车啊什么的都算做是空白符。
nextInt()方法在扫描到空白符的时候会将前面的数据读取走,但会丢下空白符“\r”在缓冲区中,但是,nextLine()方法在扫描的时候会将扫描到的空白符一同清理掉。
了解了这两个方法特性和区别,就知道了上边的代码究竟是怎么回事,以及知道了解决的方法。像是上边的代码nextInt()方法之后在缓冲区中留下了“\r”,然后nextLine()方法再去缓冲区找数据的时候首先看到了“\r”,然后就把这个“\r”扫描接收进来,并在缓冲区内清除掉。其实,nextLine()方法是执行过的,并没有不执行。
注意事项:
参考代码:
Scanner in=new Scanner(System.in);
int n = in.nextInt();
in.nextLine();//清空结束符号
int[] num= new int[10000];
int count=0,duan=0,chong=0;
for(int i=0;i<n;i++) {
Scanner sc = new Scanner(in.nextLine());//清空结束符号
while (sc.hasNext()) {
num[count++] = sc.nextInt();
}
}
Arrays.sort(num, 0, count);
for (int j = 0; j < count; j++) {
if (num[j + 1] - num[j] != 1 && num[j + 1] != num[j]) {
duan = num[j] + 1;
break;
}
}
for(int j=0;j<count-1;j++){
if(num[j]==num[j+1]){
chong=num[j];
break;
}
}
System.out.println(duan+" "+chong);
0.0分
0 人评分
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:486 |
数组输出 (C语言代码)错误???浏览:596 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:677 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:1107 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:535 |
Tom数 (C语言代码)浏览:515 |
1051(奇了怪了)浏览:739 |
C二级辅导-进制转换 (C语言代码)浏览:743 |
C语言程序设计教程(第三版)课后习题12.6 (C语言代码)浏览:724 |
排序算法(选择,插入,冒泡)浏览:874 |