解释是否嵌套块

时间:2019-06-02 12:57:39

标签: java

这是关于一些作业的,我试图将范围设置为10到40。 该代码将接受该范围内的两个输入。然后,该方法将检查两个数字是否都在该范围内,然后检查两个数字的乘积,如果不是,则应该向我显示一条消息。

我已经为此工作了很长时间,但是我是一个完全的初学者,但是我无法使其正常工作。

public class testing
{

    public static int computeProduct(int first , int second) 
    {     int max = 40;
        int min = 10;

        int total = first * second;
        if (min <= first) {
            if (first <= max) {
                if (min <= second) {
                    if (second <= max) {
                        total = first * second;
                    } else {
                        System.out.println("Number is not in range, please try again");
                    }
                }
            }
        }
        return total;

    }



    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter a number between 10 to 40:");
        int x = scanner.nextInt();
        System.out.println("Enter another number between 10 to 40:");
        int y = scanner.nextInt();

        int total = computeProduct(x, y);
        System.out.print("Product of x and y = " + total);



    }
}

预期的结果是告诉我这些数字是否在范围内,但当前不在此范围内。 不管它是否在范围内,它都会给我两个数字的乘积。

3 个答案:

答案 0 :(得分:2)

这里:

int total = first * second;

后跟if,后跟:

return total;

含义:每当您的if计算为false时,您的方法只会返回您最初分配的值!

您可以做什么:有一个else块来打印错误消息。否则会引发异常。

但是理想情况下,您应该在这里分开关注点。含义:

  • 编写类似boolean inRange(int first, int second)的方法。该方法返回truefalse,具体取决于匹配条件的第一个/第二个
  • 如果该方法返回true,请调用compute(),否则打印您的消息

换句话说:如果完全阻塞,您的compute()方法可能不应该具有该功能。让该方法计算结果,然后让另一个方法告诉您是否要调用compute()

答案 1 :(得分:1)

if构建的“阶梯”的行为就像是逻辑and的关系。当条件适用时,第一个if通过,然后当先前条件适用和它自己的条件都通过时,第二个if通过。依此类推。
但是,对于检查是否存在问题,只要违反 any (甚至是单个规则)规则,这就是逻辑or关系。

虽然这不是最佳的编码样式,但是您可以通过翻转比较并拆除梯子来机械地将该结构重写为这种结构:

public static int computeProduct(int first , int second) 
{
    int max = 40;
    int min = 10;

    if (first < min) {
        System.out.println("Number is not in range, please try again");
        return 0;
    }
    if (first > max) {
        System.out.println("Number is not in range, please try again");
        return 0;
    }
    if (second < min) {
        System.out.println("Number is not in range, please try again");
        return 0;
    }
    if (second > max) {
        System.out.println("Number is not in range, please try again");
        return 0;
    }

    return first*second;
}

此方法显示消息,如果输入无效,则返回0,如果一切正常,则返回乘积。

然后它可以变成实际的逻辑or,在Java中用||表示:

public static int computeProduct(int first , int second) 
{
    int max = 40;
    int min = 10;

    if (first < min
          || first > max
          || second < min
          || second > max) {
        System.out.println("Number is not in range, please try again");
        return 0;
    }

    return first*second;
}

现在,正如我所想到的,您的原始条件也没有错,只是必须翻转结果:当代码到达最内层的块时,一切都很好,因此可以在这里{{ 1}}。而且,如果return first*second;中的任何一个失败,则需要显示消息和if

return 0;

现在我不确定这是否有帮助...

答案 2 :(得分:0)

去那里:

public static int computeProduct(int first , int second) 
        {     int max = 40;
            int min = 10;
            if(first<=min || second<=min ||first>=max||second>=max)
            {
               System.out.println("Number is not in range, please try again");
               return 0; //or return whatever you like
             }
            return first *second ;

        }


    public static void main(String[] args)
        {
            Scanner scanner = new Scanner(System.in);
            System.out.println("Enter a number between 10 to 40:");
            int x = scanner.nextInt();
            System.out.println("Enter another number between 10 to 40:");
            int y = scanner.nextInt();

            int total = computeProduct(x, y);
            if(total!=0){
            System.out.print("Product of x and y = " + total);
             }
     else {
      System.out.print("cannot compute as numbers are not in range");
    }
}