【问题标题】:Having trouble reading the output of my code阅读我的代码输出时遇到问题
【发布时间】:2015-12-11 06:34:36
【问题描述】:

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

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

【问题讨论】:

    标签: list output


    【解决方案1】:

    想象一下值数组:1,2,3。正确的最小值是 1。但是,您已将 min 初始化为 0。此数组中没有任何值小于 0,因此,min 保持为 0。哎呀,答案是错误的。类似的情况:-1、-2、-3 和最大值的数组初始化为 0 - 再次,错误的结果。

    我知道解决此问题的三种标准方法:

    1. 最大值和最小值被初始化为序列的第一个值(数组,在你的情况下)。这正是您修复它的方式 - 通过设置为 nums[0]。 OTOH,您不必从索引 0 - 1 开始也很好(非常小的优化,但值得注意)。
    2. Maximum 以该类型可能的最小值初始化(对于 int,它是 INT_MIN,来自 &lt;limits.h&gt;),最小值 - 到可能的最大值(分别为 INT_MAX)。很可能两者都会立即更新为 nums[0]。
    3. 测试了一个带有“还没有值”的布尔变量,并在设置时使用直接赋值而不是比较(在您的情况下,使用 i == 0 并立即重置为 false。对于直接可用的整数数组,但适用于比较繁琐的情况,比较是在通过模板调用序列实例化的回调内部,或另一个太多抽象级别的设计......

    您已经警告过else 是错误的,但是从数学上讲,它允许用于我的变体 1 和 3(但不是变体 2!让您自己找出故障证明)。

    【讨论】:

    • 谢谢 :D 15 个字符
    【解决方案2】:

    当您只是在玩耍并更改 int max = nums[0]; int min = nums[0];工作

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

    所以,变量min必须比数组的每个成员都大!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 2014-12-05
      • 1970-01-01
      相关资源
      最近更新 更多