【问题标题】:Java array seems to change values without being directly modifiedJava数组似乎改变了值而不被直接修改
【发布时间】:2019-04-11 19:21:56
【问题描述】:

所以我试图在java(特别是处理)中制作一个mergesort程序,逐帧执行该过程。当它通过 for 循环在 1 帧中对其进行排序时,它似乎工作正常(我没有对它进行广泛测试,因为这不是我的目标)但是在对其进行必要的更改以使其发挥作用之后,它并没有似乎想要正常工作。

我没有尝试很多,因为我完全不知道是什么原因造成的。

merge();

if (i1 < arr.length) {
  if (i2 < arr.length) {
    if (i3 <= i2 + i1) {
      i3++;
    } else {
      i2 += i1 * 2;
      l = i2 + 0;
      r = i2 + i1;
    }
  } else {
    i1 *= 2;
    i2 = 0;
    i3 = 0;
    l = 0;
    r = i1 + 0;

    arr = w.clone();
  }
} else {
  noLoop();
}

void merge() {
  int lMax = i2 + i1;
  int rMax = i2 + i1 * 2;

  if (r < arr.length - 1 && l < arr.length - 1) {
    if ((l <= lMax) && (r >= rMax || arr[l] <= arr[r])) {
      float[] t = arr.clone();
      w[i3] = t[l];
      arr = t.clone();
      l++;
    } else {
      float[] t = arr.clone();
      println(arr[r], t[r], w[i3]);
      w[i3] = t[r];
      println(arr[r], t[r], w[i3]);
      arr = t.clone();
      r++;
      println();
    }
  }
}

它应该只对arr 的元素进行排序,但它似乎在arr[r] &lt; arr[l] 时重复它们

【问题讨论】:

  • 最好的办法是使用调试器逐步完成。我相信您将能够立即看到发生了什么。
  • @DawoodibnKareem 我该怎么做呢?
  • 您的 IDE 将内置一个调试器。如果不明白如何使用它,在线某处会有说明。 Google 是您的朋友。
  • @DawoodibnKareem 我用处理调试器逐步完成了它,但我得到的只是更困惑

标签: java arrays sorting processing mergesort


【解决方案1】:

我在工作中经常遇到这种类型的问题,并且(如果您使用的是 Eclipse,至少,我使用的是这个)我所做的是进入调试模式并在每一行放置一个断点有问题的部分中的代码并仔细观察变量,相应地更改代码。希望对您有所帮助!

【讨论】:

  • 使用调试器是个好主意,但这并不能回答问题。
猜你喜欢
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 2022-01-20
  • 1970-01-01
相关资源
最近更新 更多