Кажется, что массив Java меняет значения без непосредственного изменения - PullRequest
0 голосов
/ 11 апреля 2019

Итак, я пытаюсь создать программу слияния в java (в частности, обрабатывающую), которая шаг за шагом проходит процесс.Когда он сортировал его в 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] < arr[l]

1 Ответ

0 голосов
/ 11 апреля 2019

Я сталкиваюсь с подобным типом проблем в своей работе, и (если вы используете Eclipse, по крайней мере, именно этим я и пользуюсь) я вхожу в режим отладки и ставлю точку останова на каждой отдельной строкекода в соответствующем разделе и внимательно следите за переменными, соответственно изменяя код.Надеюсь, это поможет!

...