首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Do-While循环和hasNextInt()

Do-While循环和hasNextInt()
EN

Stack Overflow用户
提问于 2019-05-03 20:17:53
回答 3查看 159关注 0票数 3

我知道这听起来可能是一个非常愚蠢的问题,但我不明白我的错误在哪里。

为什么在循环的第二次迭代中,它没有打印'Enter a number:'?

代码语言:javascript
复制
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner console = new Scanner(System.in);
        int[] v = new int[10];
        int index = 0;
        do {
            System.out.print("Enter a number:\t");
            v[index] = console.nextInt();
            index++;
        } while(console.hasNextInt());

        for (int i = 0; i < index; i++){
            System.out.print(v[i] + "\t");
        }
        System.out.println("\n" + index);
    }
}

这是输出:

代码语言:javascript
复制
Enter a number: 1
2
Enter a number: 3
Enter a number: 4
Enter a number: 5
Enter a number: ^D
1       2       3       4       5
5
EN

回答 3

Stack Overflow用户

发布于 2019-05-03 20:20:27

因为在控制台上存在int之前,hasNextInt都会阻塞,因此不会进入循环的下一次迭代。

票数 3
EN

Stack Overflow用户

发布于 2019-05-03 20:25:19

欢迎。请参阅注释中的答案。希望清楚:-)

代码语言:javascript
复制
do {
        System.out.print("Enter a number:\t");  // Prints "Enter a number: "
        v[index] = console.nextInt(); // accepts input "1"
        index++; // increments
    } while(console.hasNextInt()); // waits for input at which point you enter "2"

好了,让我们说得更清楚一些。

do while循环在对while条件求值之前执行do块。然后,如果while条件的计算结果为true,它将再次执行do块并重复,直到while条件的计算结果为false。。

console.nextInt和console.hasNextInt都从控制台读取输入。因此,作为do块的一部分,"Enter a number:\t“已经打印出来,第一个nextInt()调用已经接受了输入"1",然后是递增,然后是while条件的求值- console.hasNextInt(),它再次等待输入并接受"2”。这解释了为什么在用户输入"2“之前没有打印"Enter a number:\t”。

当然,因为输入值2,while条件的计算结果为true,所以do块将再次执行并继续执行。

也许您需要while循环。相比之下,只有当while条件的计算结果为true时,它才会执行代码块

代码语言:javascript
复制
System.out.print("Enter a number:\t");
while(console.hasNextInt()){
        v[index] = console.nextInt(); 
        index++; // increments
        System.out.print("Enter a number:\t");  
    } 
票数 1
EN

Stack Overflow用户

发布于 2019-05-03 20:24:58

当达到数组的足够大小时,考虑退出循环。就像这样

代码语言:javascript
复制
   do {
            System.out.print("Enter a number:\t");
            v[index] = console.nextInt();
            index++;
        } while(index<10); // if you want the user to enter 10 numbers. 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55969661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档