[英]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.