为什么这个功能的输出1?

时间:2011-12-12 02:23:11

标签: java

我需要解释为什么这段代码打印“1”,我明天参加期末考试,这是一个我无法回答的练习题。任何输入都非常感谢!

public class Test {
  public static void main(String[] args) {
    int[][] values = {{3, 4, 5, 1}, {33, 6, 1, 2}};
    int v = values[0][0];
    for (int[] list : values)
      for (int element : list)
        if (v > element)
          v = element;

    System.out.print(v);
  }
}

4 个答案:

答案 0 :(得分:6)

因为下面的代码会给你嵌套数组values中的最小值,在你的代码中确实是1。

if (v > element)
  v = element;

如果v大于当前element(即。element小于v),请将element分配给v }。

答案 1 :(得分:1)

如果元素大于元素v,则迭代遍历数组中的所有元素并将if (v > element) v = element;设置为元素。因此,您将得到最小的值,即1。

答案 2 :(得分:1)

您认为此代码应该怎么做?目前,它的打印数量最少。为什么?因为对于每个元素,它执行以下检查:

if (v > element)
    v = element;

...其中

v = <the smallest number found so far>
  • 第一次通过循环,到目前为止找到的最小数字是第一个元素 - values[0][0] - 因为, 是此时找到的最小数字,因为我们还没有看过任何元素。
  • 每次通过内循环,我们将到目前为止找到的最小数字与当前元素进行比较。如果到目前为止找到的最小数字大于当前元素,那么当前元素必须是到目前为止找到的最小数字。
  • 在每次后续迭代中,此不变量不会更改。在每次迭代结束时,v包含到目前为止看到的最小数字。

我强烈建议单步执行调试器中的代码,或者(甚至更好)写下纸上的步骤,在每次迭代时测试循环不变量。

答案 3 :(得分:1)

我们需要逐步检查

首先

你得到了主要的二维数组

int[][] values = {{3, 4, 5, 1}, {33, 6, 1, 2}};

然后分配给var V int。数据为[0] [0]。

Note that values[0] = 3,4,5,1
values[0][0] = 3
int v = values[0][0];

然后2表示数组中的每个值。先入     值[0-1]然后是值[] [0-3]

for (int[] list : values)
      for (int element : list)

最后,检查V是否大于您获得的新值。如果它是替代

if (v > element)
          v = element;

这段代码让你成为数组中最小的数字。第一个数字。如果你有两个1则需要第一个。

我希望它有所帮助