对于递归遇到in.next()阻塞吞数据的一些思考?
起因:
打了一个递归程序,把输入的位置放在了递归的位置内,结果在测试数据的时候,发现编译器竟然会吞数据,当场我就无语了。
------所以我当时就开启了debug.结果就发现了一个惊天大秘密。
测试程序如下。
import java.util.Scanner;
public class Main1349 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in = new Scanner(System.in);
int da = 1;
while(in.hasNext()) {
int fa = in.nextInt();
System.out.println("Case #"+da+++":"+new re().toFan(fa));
}
}
}
class re {
Scanner in = new Scanner(System.in);
int max=0;
public int toFan(int n) {
if(n == 1) {
int s = in.nextInt();
if(s>max)max = s;
return max;
}else {
int s = in.nextInt();
if(s>max)max = s;
return toFan(--n);
}
}
}
测试数据如下。
5
9 4 8 5 3
8
5 -9 12 8 10
这个时候你会神奇的发现,竟然不需要输数据了,此时的答案已经出来了。
其实这个问题,答主在之前也有提过,就是输入数据阻塞的时间差,其实我们编译器读取数据是以一个回车进行一个数据读取的,又因为我们的各个数据的数据输入放在了递归函数内,这就导致了一个时间差。所以此时读取的递归次数是第一次数据的递归次数,且中间的数据因为时间差,把中间的数据给吞了。(目前我是这么理解的,要是有大佬觉得有问题,欢迎指出问题,共同进步嘛。)
哈哈哈哈哈哈-------加油奥。