[英]Scanner requests input twice
我是Java的初学者。 我正在尝试锻炼。
P3.3通过检查数字是否≥10,≥100等来编写一个程序,该程序读取整数并打印数字具有的位数。 (假设所有整数都小于100亿。)如果数字为负数,请先将其乘以–1。
问题是:我看到我必须输入两次enter才能得到输出。 我知道这与代码有关:
if(in.hasNextInt()){
int number = in.nextInt();
}
但是在这种情况下,我应该更改为仅输入一个而不是2个呢? 提前致谢。
package week2;
import java.util.Scanner;
public class P3_3_Digits {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Voer een getal in: ");
int number = in.nextInt();
if(in.hasNextInt()){
in.close();
if(number < 0){
number = number * -1;
if(number >= 10 && number < 100){
System.out.println("Het getal -" + number + " heeft 2 digits.");
}
else if(number >= 100 && number < 1000){
System.out.println("Het getal -" + number + " heeft 3 digits.");
}
else if(number >= 1000 && number < 10000){
System.out.println("Het getal -" + number + " heeft 4 digits.");
}
else if(number >= 10000 && number < 100000){
System.out.println("Het getal -" + number + " heeft 5 digits.");
}
else if(number >= 100000 && number < 1000000){
System.out.println("Het getal -" + number + " heeft 6 digits.");
}
else if(number >= 1000000 && number < 10000000){
System.out.println("Het getal -" + number + " heeft 7 digits.");
}
else if(number >= 10000000 && number < 100000000){
System.out.println("Het getal -" + number + " heeft 8 digits.");
}
}
else {
if(number >= 10 && number < 100){
System.out.println("Het getal " + number + " heeft 2 digits.");
}
else if(number >= 100 && number < 1000){
System.out.println("Het getal " + number + " heeft 3 digits.");
}
else if(number >= 1000 && number < 10000){
System.out.println("Het getal " + number + " heeft 4 digits.");
}
else if(number >= 10000 && number < 100000){
System.out.println("Het getal " + number + " heeft 5 digits.");
}
else if(number >= 100000 && number < 1000000){
System.out.println("Het getal " + number + " heeft 6 digits.");
}
else if(number >= 1000000 && number < 10000000){
System.out.println("Het getal " + number + " heeft 7 digits.");
}
else if(number >= 10000000 && number < 100000000){
System.out.println("Het getal " + number + " heeft 8 digits.");
}
}
}
else { System.out.println(" Onjuiste invoer. Voer een getal in.");
}
}
}
请参考hasNextInt 。
public boolean hasNextInt()
如果可以使用nextInt()方法将此扫描器输入中的下一个标记解释为默认基数中的int值,则返回true。 扫描仪不会前进超过任何输入。
if(in.hasNextInt()){
条件将被计算true
或false
时将提供第二输入 。 仅当第二个输入可以解释为int值时,此条件才成立。
因此,将if(in.hasNextInt()){
从您的代码中删除if(in.hasNextInt()){
所有设置。
更正后的代码如下:
Scanner in = new Scanner(System.in);
System.out.print("Voer een getal in: ");
if (in.hasNextInt()) {
int number = in.nextInt();
in.close();
if (number < 0) {
number = number * -1;
if (number >= 10 && number < 100) {
System.out.println("Het getal -" + number + " heeft 2 digits.");
}
else if (number >= 100 && number < 1000) {
System.out.println("Het getal -" + number + " heeft 3 digits.");
} else if (number >= 1000 && number < 10000) {
System.out.println("Het getal -" + number + " heeft 4 digits.");
} else if (number >= 10000 && number < 100000) {
System.out.println("Het getal -" + number + " heeft 5 digits.");
} else if (number >= 100000 && number < 1000000) {
System.out.println("Het getal -" + number + " heeft 6 digits.");
} else if (number >= 1000000 && number < 10000000) {
System.out.println("Het getal -" + number + " heeft 7 digits.");
} else if (number >= 10000000 && number < 100000000) {
System.out.println("Het getal -" + number + " heeft 8 digits.");
}
} else {
if (number >= 10 && number < 100) {
System.out.println("Het getal " + number + " heeft 2 digits.");
}
else if (number >= 100 && number < 1000) {
System.out.println("Het getal " + number + " heeft 3 digits.");
} else if (number >= 1000 && number < 10000) {
System.out.println("Het getal " + number + " heeft 4 digits.");
} else if (number >= 10000 && number < 100000) {
System.out.println("Het getal " + number + " heeft 5 digits.");
} else if (number >= 100000 && number < 1000000) {
System.out.println("Het getal " + number + " heeft 6 digits.");
} else if (number >= 1000000 && number < 10000000) {
System.out.println("Het getal " + number + " heeft 7 digits.");
} else if (number >= 10000000 && number < 100000000) {
System.out.println("Het getal " + number + " heeft 8 digits.");
}
}
} else {
System.out.println(" Onjuiste invoer. Voer een getal in.");
}
编辑-: int number = in.nextInt();
这行代码已移至if(in.hasNextInt()){
条件中。
您可以通过以下方式更改代码:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Voer een getal in: ");
String s = in.nextLine();
boolean isNumeric = s.chars().allMatch( Character::isDigit );
while (!isNumeric) {
System.out.println(" Onjuiste invoer. Voer een getal in.");
s = in.nextLine();
isNumeric = s.chars().allMatch( Character::isDigit );
}
int number = Integer.parseInt(s);
in.close();
// if (number < 0) { ...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.