为什么首先跳过循环迭代?
我的代码产生了意想不到的结果。 似乎我的for循环跳过第一次迭代,我不明白为什么。
public static void main(String[] args) { Scanner get = new Scanner(System.in); int number; // Ex.1. String family_name; String[] family_array; System.out.println("Enter number of family members: "); number = get.nextInt(); family_array = new String[number]; for(int i = 0; i < number; i++){ System.out.println("Enter family member name: "); family_name = get.nextLine(); family_array[i] = family_name; } for(int i = 0; i < number; i++){ System.out.println(family_array[i]); } }
返回…(假装数字输入是名称)
Enter number of family members: 5 Enter family member name: Enter family member name: 1 Enter family member name: 2 Enter family member name: 3 Enter family member name: 4 1 2 3 4
为什么跳过第一个get.nextLine()?
目前您对Scanner#nextInt的调用不会消耗换行符,因此它将被传递给您第一次调用Scanner#nextLine
,因此它不会阻塞。
你需要添加
get.nextLine();
在调用nextInt
之后,第一次调用nextLine
将阻止IO
。
注意4和1之间的空白行?
4 //this is it 1
当你调用get.NextInt()时,你不会吃整行,只是下一个int。 在第一次循环迭代中吃剩下的空行。 在读取int之后添加对get.nextLine()的调用。
对我有用的是在每次迭代中实例化一个新的Scanner
:
for(int i = 0; i < number; i++) { System.out.println("Enter family member name: "); Scanner loopGet = new Scanner(System.in); family_name = loopGet.nextLine(); family_array[i] = family_name; }
我要说这是因为你还有一个缓冲的CR / LF – 所以第一个被设置为空白。 在打印姓氏(数字)时请注意空白行。 那是你的空白姓。
键盘输入是一个缓冲流 – 它有你的5,它有一个CR / LF(或者只是一个LF,取决于你的操作系统)。
您可能想要获取LINE然后执行string.convert,atoi,system.convert(无论哪个是Java)来获取#。
number = get.nextInt(); // if i enter 4 then it will 4\n and nextInt will take only 4 // and the \n will be taken as input by the getline. get.nextLine(); //this will return the "" from ""\n . so adding this will solve your problem family_array = new String[number];
- 没有当前背景的opengl es api
- 无法加载多个版本的AppEngine项目并查看HardDeadLineExceededexception
- 重构HashMap的最快方法
- 应用程序冻结自动完成textChanged
- Android:将calcOpticalFlowPyrLK与MatOfPoint2f一起使用
- AndroidRuntime引起:java.lang.unsatisfiedLinkError:无法加载tfp_jni:findLibrary返回null
- 在Android应用中使用XML更改进度条颜色
- 从Android上的Calendar Provider中删除事件
- setContentView上的另一个资源$ NotFoundException