java - 为什么键盘给出的循环迭代范围本身算作一次迭代?
问题描述
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.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
推荐阅读
- java - Java Android room alter table java.lang.IllegalStateException: 迁移没有正确处理
- getstream-io - 有没有办法通过firebase云功能在服务器端实例化一个新客户端?
- powershell - 重命名时跳过具有给定前缀的文件
- swift - 如何将地址从应用程序传递到谷歌地图,而不仅仅是快速的纬度和经度
- javascript - 如何使移动网页成为主要网页,并且仅在检测到此类设备时将用户转移或重定向到桌面网页?
- angular - 无法在 2 个或更多组件实例之间共享一个表单控件实例
- c# - 无法在第 18 行从“UnityEngine.Touch”转换为“float”
- php - PHP减少函数中的重复
- android - 结果代码永远为 0,数据永远为空,不使用片段
- kubernetes - Kubernetes:在 K8s 中,在入口及其服务之间设置自定义代理的惯用方式是什么?