无法读取我的代码输出

时间:2015-12-11 06:34:37

标签: list output

所以问题是要返回最大数和最小数之间的差异。我写的第一个代码是。

public int bigDiff(int[] nums) {
    int max = 0;
    int min = 0;
    for(int i = 0; i < nums.length; i++){
        if(Math.max(max, nums[i]) == nums[i])
            max = nums[i];
        else if (Math.min(min, nums[i]) == nums[i])
            min = nums[i];

    }
    return max-min;
}

但这仅输出列表中的最大数字。

虽然,当我刚刚玩耍并改变时

int max = nums[0];
int min = nums[0];

它有效吗?但我不明白为什么。如果有人能理解我会如何理解解释:D

2 个答案:

答案 0 :(得分:0)

想象一下值数组:1,2,3。适当的最小值为1.但是,您已将min初始化为0.此数组中的值不小于0,因此,min仍为0.哎呀,答案是错误的。类似的情况:-1,-2,-3的数组,最大值为0 - 再次,错误的结果。

我知道有三种标准方法可以解决这个问题:

  1. 最大值和最小值是序列的第一个值(在您的情况下为数组)。这正是你修复它的方法 - 设置为nums [0]。 OTOH你不需要从索引0开始 - 1也很好(非常小的优化,但值得注意)。
  2. 此类型的最大值(对于int,INT_MIN来自<limits.h>)和minumum - 可能是最大值(INT_MAX)。很可能两者都会立即更新为nums [0]。
  3. 测试了一个意思是“没有值”的布尔变量,并且在设置时使用直接赋值而不是比较(在您的情况下,使用i == 0并立即重置为false。这绝对是一种过度杀伤力。一个直接可用的整数数组,但是当比较是通过模板调用序列实例化的回调内部,或者是另一个太多抽象级别的设计时,这对于繁琐的情况是好的...
  4. 您已经警告过else是错误的,但是,从数学角度来说,它允许我的变体1和3(但不适用于变体2!让您自己找出失败证明)。

答案 1 :(得分:-1)

当你刚刚玩游戏并改变int max = nums[0]; int min = nums[0];时,工作

因为,如果你想获得最大数量,你必须让变量max小于所有arrary成员,那么函数max()将使max成为当前的最大数量。

因此,变量min必须大于数组的每个成员!