首页 > 解决方案 > 为什么键盘给出的循环迭代范围本身算作一次迭代?

问题描述

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。哪个是对的。那么问题出在哪里?谢谢。

标签: javastringloopssplititeration

解决方案


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

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

推荐阅读