hasNextInt实际上是如何工作的? (Java)的

时间:2015-08-27 22:40:36

标签: java input

我正在尝试建立一个与用户指示一样高的金字塔。如果我使用下面的代码,它会告诉我我没有引入一个Integer btw 1-20 ... 评论 if(scan.hasNextInt ...)使代码工作,只要我不插入数字< 1。

我正确使用 hasNextInt()吗?

Scanner scan = new Scanner (System.in);
int rows = 0, i=1, j=0;

    //Asking for the Input
System.out.println("How many rows should the pyramid have?\n"+
                    "(Insert an Integer btw 1-20)");

    //Checking if there's an Input
if (scan.hasNextInt() && rows>0 && rows<=20)
    rows = scan.nextInt();
else System.out.println("Not an Integer btw 1-20 inserted");

    //Building the pyramid
while (i<=rows){
    while (j<i){System.out.print("*");j++;}
    System.out.println();
    i++;j=0;
}

scan.close(); //closing scan
}

3 个答案:

答案 0 :(得分:1)

您遇到的问题是rows变量等于0,因此它不会进入if声明。

if (scan.hasNextInt() && rows>0 && rows<=20) //Here rows it's equals to 0
    rows = scan.nextInt();
else System.out.println("Not an Integer btw 1-20 inserted");

您必须在输入rows之前修改if变量,否则,它始终会显示消息"Not an Integer btw 1-20 inserted"

尝试做:

if (scan.hasNextInt())

    do{
       rows = scan.nextInt();
    while(rows>0 && rows<=20);

else System.out.println("There is no integer");

如果您希望用户强制在这两个号码之间输入int。如果没有,您可以用do-while语句替换if循环。

我希望它会对你有所帮助!

答案 1 :(得分:1)

首先你做:

int rows = 0

然后

if (scan.hasNextInt() && rows>0 && rows<=20)

这不可能是真的,因为您只在检查后更改行的值。更改行的条件或初始值。

如果你想确定用户在某个时间间隔内输入的整数,你应该使用do ... while循环或类似的东西,并提示用户再次输入一个数字,如果它不在允许的时间间隔内。< / p>

这样的事情:

do {
    //Asking for the Input
    System.out.println("How many rows should the pyramid have?\n"+
    "(Insert an Integer btw 1-20)");

    //Checking if there's an Input
    if (scan.hasNextInt()) {
        rows = scan.nextInt();
        if (rows > 0 && rows <= 20)
            break;  // leave the loop and continue
        else
            System.out.println("Not an Integer btw 1-20 inserted");
    }
} while (true); // loop forever.

答案 2 :(得分:1)

这是问题

StringBuilder sb = new StringBuilder(); sb.append("Hello").append(" sick").append(" sad").append(" world!").append(" 213763e83456382582463456"); String a = sb.toString();

最初if (scan.hasNextInt() && rows>0 && rows<=20)

您可以尝试rows =0并检查值是否介于0和20之间