'else if'语句中的逻辑运算符

时间:2018-08-20 13:37:14

标签: java if-statement operators

我正在尝试学习“ 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”块时,该行将不再显示。 任何建议将不胜感激。

4 个答案:

答案 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();
  1. 我不确定,但是您在这里使用3个不同的数字。条件之前,请将其写入变量。

  2. 请勿将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();语句,该语句采用从控制台输入的整数。