做的一道算法题遇到的问题,算法题很简单,不做赘述,就是求N个数的最大值和最小值问题,这里使用到了nextInt和nextLine. 如果我们在使用nextInt(),nextFloat()等只需要读取一个元素的输入时,nextline()会自动读取我们输入后的’/n‘(回车等符号),就是使用了nextInt()以后,无法读取到下一行的数据。
1.Scanner中的nextInt和nextLine的区别
nextInt(); // 读取结果为一个int类型数据,返回int值
nextFloat(); // 读取结果为float类型,返回float值
next(); // 读取结果为String类型,返回string类型
nextLine(); // 读取结果为String类型,返回string类型
2.回车符号与空格对nextInt和nextLine的影响
1.在使用next()、nextInt()、nextFloat()等只读取一个元素的输入时,这些函数(或者方法)会将空格符或者回车符看做是读取结束,此时不会读取回车符和空格符号。
2.第1点中的意思就是 next()、nextInt()、nextFloat()不会读取上面的回车符号。(注意,正因为不会读取回车符号,从而导致上面输入的 ‘\n’ 会保留下来,如果后面有nextLine()需要读取下一行的数据,则会自动将该回车符赋给 nextLine() 读取,从而导致错误。)
3.而nextLine() 则是读取下一行的输入,以回车符’\n’结尾(只能以回车符结尾,并且会读取回车符号)
3.解决方案
1.在next()、nextInt()和nextFloat() 之后加入nextLine() 方法,从而使其屏蔽掉由于’\n’导致的异常。
System.out.print("Please input a num1: ");
int num1 = sc.nextInt();
sc.nextLine(); // 这里使用nextLine()来接收上面的'\n'
2.使用nextLine()进行读取,然后进行强制类型转换。
System.out.print("Please input a num1: ");
// 使用Integer.parseInt(String str)后,此时的输入只能为整数,否则会抛出异常(可以使用double型,然后再强制转化为int型)
int num1 = Integer.parseInt(sc.nextLine());
// 將String类型强制转换为int型
// int num1 = (int) Double.parseDouble(sc.nextLine());