我发现,当我切换“ nextInt()”和“ hasNextInt()”的顺序时,我的代码结果将发生变化,但是我不知道为什么。如何解释先写nextInt()
和先写hasNextInt()
之间的区别?
第一次,我在
之前写了i=sc.nextInt()
while(!sc.hasNextInt()) {
System.out.print("please input an integer");
sc.next();
}
但是,代码最终使我输入了两个整数,这不是我想要的。
因此,我切换了i=sc.nextInt()
和
while(!sc.hasNextInt()) {
System.out.print("please input an integer");
sc.next();
}
这次我只需要输入一个整数即可。
import java.util.*;
public class square {
public static void main(String[] args) {
while(true) {
Scanner sc = new Scanner(System.in);
int i;
System.out.print("Input a number to calculate the square of it");
i = sc.nextInt();
while(!sc.hasNextInt()) {
System.out.print("please input an integer");
sc.next();
}
System.out.println("the square of"+i+"is"+i*i);
} //while(true)
}
}
如果我在
前写i=sc.nextInt()
while(!sc.hasNextInt()) {
System.out.print("please input an integer");
sc.next();
}
我的代码的结果是我输入的第一个数字的平方。而且我不明白我输入的第二个数字在哪里以及为什么我需要输入两次整数。
但是如果我写
while(!sc.hasNextInt()) {
System.out.print("please input an integer");
sc.next();
}
在i=sc.nextInt()
之前,程序将正确执行。
答案 0 :(得分:0)
首先,您应该在循环之前声明一次Scanner
。据我所知,问题是您的内部循环使用了非整数值。而不是像这样循环,我会在尝试使用if
并使用int
消费其他任何东西之前先检查else
是否存在System.out
。同样,println()
被缓冲;如果您不使用flush
(具有隐式 flush()
),则 应该 Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("Input a number to calculate the square of it");
if (sc.hasNextInt()) {
int i = sc.nextInt();
System.out.printf("the square of %d is %d%n", i, i * i);
} else {
System.out.println("please input an integer");
sc.next();
}
} // while(true)
。喜欢,
vm.openPopup = function() {
$uibModal.open({
templateUrl: 'popup.html',
controller: function() {
var modal = this;
modal.hi = function() {
// some code here
}
}
});
};