我正在尝试学习“ if else”语句,并且在脚本的中间“ if else”部分遇到了麻烦。
package practice;
import java.util.Scanner;
public class Practice {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
System.out.println("enter a number between 1 and 10 ");
if (!in.hasNextDouble()) {
String word = in.next();
System.err.println(word + " is not a number");
} else if (!(in.nextDouble() > 0) || !(in.nextDouble() <= 10)) {
Double wrongnumber = in.nextDouble();
System.err.println(wrongnumber + " is not between 1 and 10");
} else {
System.out.println("It works!");
}
return;
}
}
没有错误,但是在'else if'块中,无论我是否输入1到10或更高。它还不会打印“有效”的字样。当我添加“ else if”块时,该行将不再显示。 任何建议将不胜感激。
答案 0 :(得分:4)
您在in.nextDouble()
区块中多次校准if else
,因此每次都会获得其他收益。
if (!(in.nextDouble() > 0) || !(in.nextDouble() <= 10)) {
Double wrongnumber = in.nextDouble();
System.err.println(wrongnumber + " is not between 1 and 10");
}
将其转换为类似
double next = in.nextDouble();
if (!(next > 0) || !(next <= 10)) {
Double wrongnumber = next;
System.err.println(wrongnumber + " is not between 1 and 10");
}
要在逻辑上正确,您可以切换到Integer
而不是Double
值。
答案 1 :(得分:2)
您多次致电in.hasNextDouble()
。每次它从输入中扫描新的号码,因此可能会导致您的问题。您还应该考虑如何编写条件。我知道您可能只是尝试一下那里发生的事情,但是这种情况很难理解。您可以使用
(number <= 1) || (number > 10)
(通过取反运算符来消除否定)。
答案 2 :(得分:1)
else if (!(in.nextDouble() > 0) || !(in.nextDouble() <= 10)) {
Double wrongnumber = in.nextDouble();
我不确定,但是您在这里使用3个不同的数字。条件之前,请将其写入变量。
请勿将int与double进行比较
答案 3 :(得分:1)
@RevCarl,根据我对您的代码和提供的说明的理解,您想要检查的是输入是否为数字,以及该数字是否介于1到10之间。同样,您也没有明确说明您期望的输入。我认为它是整数,下面的代码将完成任务。
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter a No between 1 to 10");
String next = input.next();
Integer i = Integer.parseInt(next);
if (null == i) {
System.out.println("Input is not a number");
} else {
if (i > 0 && i < 10) {
System.out.println("It works");
} else {
System.out.println("Not Between 1 to 10");
}
}
}
}
否则,您可以将String next = input.next();
替换为Integer i = input.nextInt();
语句,该语句采用从控制台输入的整数。