java - 为什么键盘给出的循环迭代范围将自身算作一次迭代?

标签 java string loops split iteration

public class P7 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int range=scanner.nextInt();
        for(int i=1;i<=range;i++){
            String stringInput =scanner.nextLine();
            String[] total =stringInput.split("\\s");
            int length=total.length;
            System.out.println(length);
        } 
    }
}

如果您输入范围为 3,它将打印其长度为 1。但第一次迭代应在获取 stringInput 后​​打印长度。 此外,当您以字符串形式输入范围时,您将得到InputMismatchException。哪个是对的。那么问题出在哪里呢? 谢谢。

最佳答案

Scanner.nextInt() 仅消耗您输入的数字,并将“\n”保留在扫描仪缓冲区中。您可以在调用 Scanner.nextInt() 后立即使用 Scanner.next() 清除该缓冲区。

import java.util.Scanner;

public class StackOverflow {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int range=scanner.nextInt();
        scanner.next();

        for(int i=1;i<=range;i++){
            String stringInput =scanner.nextLine();
            String[] total =stringInput.split("\\s");
            int length=total.length;
            System.out.println(length);
        }

        scanner.close();
    }
}

结果:

3
The asdfj
2
asldkja sfaslkj asdfljk
3
asdfjk asdfjlkasdf alksjdf asdflkj
4

关于java - 为什么键盘给出的循环迭代范围将自身算作一次迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51423774/

相关文章:

java - Android Studio "Variable ' 示例“可能尚未初始化”现在做什么?

c# - 访问 DialogFragment 的父 Activity

java - 使用 JFreeChart 的箱线图

java - Java中如何将8个字符串一次转换为一个字节写入文件?

ruby-on-rails - Ruby 遍历日期

c# - 在 C# 中高效地复制对称矩阵

java - 使上传方法返回字符串 "the uploaded file url"

python - 对于看似相同的列表,格式有不同的行为

java - 如何在java中分割一个值包含分隔符的字符串?

list - 生成组合