JAVA - 找出差异

时间:2013-03-21 08:40:39

标签: java

我遇到了下面的问题,但无论采取何种方法,我都无法通过所有测试。谁能指出我哪里出错?

问题必须使用Math.abs()和IF语句解决,没有循环/函数/等。

////////////////////////////// PROBLEM STATEMENT //////////////////////////////
// Given three ints, a b c, print true if one of b or c is "close"           //
// (differing from a by at most 1), while the  other is "far", differing     //
// from both other values by 2 or more. Note: Math.abs(num) computes the     //
// absolute value of a number.                                               //
//   1, 2, 10 -> true                                                        //
//   1, 2, 3 -> false                                                        //
//   4, 1, 3 -> true                                                         //
///////////////////////////////////////////////////////////////////////////////

我的代码:

  if ((Math.abs(a-b) <= 1 || Math.abs(a+b) <= 1) && (Math.abs(a-c) >= 2 || Math.abs(a+c) >= 2)) {

    if (Math.abs(a-c) >= 2 || Math.abs(a+c) >= 2) {
      System.out.println("true");
    } else {
      System.out.println("false");
    }

  } else if (Math.abs(a-c) <= 1 || Math.abs(a+c) <= 1) {

    if (Math.abs(a-b) >= 2 || Math.abs(a+b) >= 2) {
      System.out.println("true");
    } else {
      System.out.println("false");
    } 

  } else {
     System.out.println("false"); 
    }

2 个答案:

答案 0 :(得分:1)

看起来过于复杂,你可能想要更简单的事情:

boolean abIsClose = Math.abs(a-b) <= 1;
boolean acIsClose = Math.abs(a-c) <= 1;
boolean bcIsClose = Math.abs(b-c) <= 1;
boolean result = abIsClose && !acIsClose && !bcIsClose;
result = result || (!abIsClose && acIsClose && !bcIsClose);
result = result || (!abIsClose && !acIsClose && bcIsClose);

Abs总是给出一个正数,这样你就不需要确认一个值介于-1和1之间,你只需要确认&lt; = 1.

答案 1 :(得分:0)

true

时,您可以将其分解为两种可能的情况
  1. b已关闭且c
  2. c已关闭且b
  3. 现在,1是什么意思?

    • b已关闭 - Math.abs(a-b) <= 1
    • c远 - Math.abs(a-c) >= 2 && Math.abs(b-c) >= 2

    所以我们最终得到了

    if (Math.abs(a - b) <= 1 && Math.abs(a - c) >= 2 && Math.abs(b - c) >= 2) {
        return true;
    }
    

    现在将相同的逻辑应用于第二个条件:

    if (Math.abs(a - c) <= 1 && Math.abs(a - b) >= 2 && Math.abs(b - c) >= 2) {
        return true;
    }
    

    所以最后的方法如下:

    public static boolean myMethod(int a, int b, int c) {
        if (Math.abs(a - b) <= 1 && Math.abs(a - c) >= 2 && Math.abs(b - c) >= 2) {
            return true;
        }
        if (Math.abs(a - c) <= 1 && Math.abs(a - b) >= 2 && Math.abs(b - c) >= 2) {
            return true;
        }
        return false;
    }
    

    输出:

    public static void main(String[] args) {
        System.out.println(myMethod(1, 2, 10));
        System.out.println(myMethod(1, 2, 3));
        System.out.println(myMethod(4, 1, 3));
    }
    true
    false
    true