这个是由于nextline 的存储方式决定的。
scanner.nextInt() 和 scanner.nextLine() 处理机制不一样:
用 nextInt()处理,我们在输入 4 按下空格后,会将 4 和 空格‘\r’ 存入缓存区,返回时返回 4,但是‘\r’会继续存在缓存区里面,在我们for循环时用scanner.nextLine() 读取时,发现缓存区里面有“\r”,那么跳过输入,直接将“\r”赋值给 str,然后在控制台输出换行。
用nextLine() 处理,会将 4 和 空格‘\r’ 存入缓存区,返回时返回 4,去除掉“\r”,那么在我们for循环时用scanner.nextLine() 读取时,会发现没有东西,就会让我们在控制台输入。
这就是为什么用nextInt()时会莫名其妙出现一个换行。