【问题标题】:Why does my last index have a value when it shouldn't have one? [closed]为什么我的最后一个索引不应该有一个值? [关闭]
【发布时间】:2021-03-21 17:24:51
【问题描述】:

我试图将数组中的所有元素向左移动 1,我试图从数组中删除索引 0 处的元素 3,但我收到的输出与我的预期完全不同。我不明白为什么我会收到这个输出。

我希望收到的输出是 [2,2,3,0] 我希望最后一个索引为零,因为我将所有元素都向左移动了,所以没有值移动到最后一个索引。但我反而收到了 [2,2,3,3]。我不明白为什么 3 在最后一个索引中?

int [] nums = {3,2,2,3};
int length = nums.length;

for (int j = 1; j < length; j++) {

   nums [j - 1] = nums [j];
}

return nums.length;

【问题讨论】:

  • 你为什么期望最后 3 神奇地变成 0?数组值不会改变,当没有人改变它们时。
  • 您需要将0 显式分配给最后一个索引,因为它已经被占用,因此它不再具有默认值。
  • 是的,我不小心使用了错误的语法,我想是因为我将所有元素向左移动了 1,所以最后一个索引会为零?
  • 您永远不会为 nums[3] 赋值,因为 j-1 只会上升到 2。尝试在调试器中逐步运行它,并特别查看最终迭代。
  • 不,因为您实际上并没有在此处 shift 任何内容,而是将值从一个索引复制 到另一个。最终结果看起来就像一个转变。而且由于您复制了这些值,因此最后 3 个值保持不变。

标签: java arrays for-loop indexing integer


【解决方案1】:

试试这个,我只是把最后一个设为0:

int[] nums = {3,2,2,3};
int length = nums.length;

for (int j = 1; j < length; j++) {
    nums [j - 1] = nums [j];
}

nums[nums.length - 1] = 0;

for (int number : nums) {
    System.out.print(number);
}

我将最后一个数字设置为 0,因为您只使用 for 循环更改了索引 0、1 和 2,以便最后一个索引(即索引 3)保持值 3。

所以你得到这个:2230。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2017-02-09
    • 2012-11-13
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多