我是Java的初学者。我正在尝试做练习。
P3.3编写一个读取整数的程序并打印多少位数 通过检查数字是否≥10,≥100等,该数字具有 上。 (假设所有整数都小于100亿。)如果 number为负数,首先将其乘以-1。
问题是:我看到在获得输出之前我必须输入两次输入。我知道它与代码有关:
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.");
}
}
}
答案 0 :(得分:0)
请参阅hasNextInt。
当第二次输入将被提供时,
public boolean hasNextInt()
如果是下一个标记,则返回true 扫描仪的输入可以解释为默认值中的int值 radix使用nextInt()方法。扫描仪没有超前 任何输入。
if(in.hasNextInt()){
条件将被评估true
或false
。 只有当第二个输入可以解释为int值时,这种情况才会成立。
因此,请从代码中删除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()){
条件内。
答案 1 :(得分:0)
您可以通过以下方式更改代码:
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) { ...
}