gpt4 book ai didi

java - 当我在排序后尝试在数组中插入值时,我得到默认值 0

转载 作者:搜寻专家 更新时间:2023-11-01 02:00:34 25 4
gpt4 key购买 nike

我有一个大小为 4 的整数数组。我通过 add 方法向其中添加元素。这是一个未排序的数组。我正在通过下面代码中显示的排序方法对其进行排序。 sort 方法将最小的数字放在 a[0] 的位置。当我在调用 sort 方法后尝试添加元素时,我总是得到 0 的返回值。有解决办法吗?

  import java.util.Arrays;

public class Scrap {
private static int[] array = new int[4];
private static int i = 0;

public static void main(String[] args) {
Scrap pq = new Scrap();
pq.add(4);
pq.insert(3);
pq.add(5);

pq.sort();// smallest to largest sort method.
// System.out.println(array[0]);
pq.insert(1);
pq.sort();
int test = pq.Minimum();
System.out.println("The smallest element of the array is " + test);
pq.sort();
}

//
public void add(int input) {
insert(input);
}

// Method to insert number into the array.
public void insert(int input) {
array[i] = input;
i++;
}

// Finding smallest number of the array.
public int Minimum() {
int a = array[0];
return a;
}

// Sorts the array from smallest to largest integer
public void sort() {
int first, temp;
for (int i = array.length - 1; i > 0; i--) {
first = 0;
for (int j = 1; j <= 1; j++) {
if (array[j] > array[first])
first = j;
}
temp = array[first];
array[first] = array[i];
array[i] = temp;
}

}

public int remove() {
return delete();
}

public int delete() {
return remove();
}
// Method to convert the array into a string for output
}

最佳答案

问题简述:

  • 你从一个长度为 4 的数组开始。
    • 此时数组包含4个零,即:[0, 0, 0, 0]
  • 您添加 4、3 和 5。这些操作将数组的内容更新为 [4, 3, 5, 0]
  • 你对数组进行排序。这应该将数组的内容更改为 [0, 3, 4, 5]。事实上,它变为 [0, 5, 3, 4],这意味着您的 sort 实现显然已损坏。
    • 您可能没想到 0 值会移动。 您可以通过仅对前 3 个值进行排序来解决此问题。(当然,您还应该修复 sort 的实现。)
  • 然后当您插入 1 时,程序更新索引 3 处的值,因此内容更改为 [0, 5, 3, 1]

如果您实现我上面建议的修复,并且只对第一个 size 元素进行排序,那么在第一次调用 sort 之后的内容应该变成 [3 , 4, 5, 0],插入1后的内容应该变成[3, 4, 5, 1]。当您再次对其进行排序时,内容应变为 [1, 3, 4, 5] 并且最小值将如预期的那样为 1,而不是 0。

更具体地说:

  • 首先,将 private static int i = 0; 更改为 private int size = 0;i 这个名字在这里非常不合适,肯定会让你感到困惑。 大小 合适。让它成为 static 也没有意义,所以我建议删除该关键字。
  • 修复排序的实现。有许多易于实现的基本排序算法。在实现中,不是一直到 array.size,而是一直到 size。你看得到差别吗? sizeScrap 中的字段,本质上是您使用 addinsert 方法添加的元素的数量。

一些清理也很好:

  • 删除add方法并将insert重命名为add
  • 删除removedelete 方法。它们未被使用,如果您尝试按现在的方式使用它们(这些方法永远相互调用),您将得到堆栈溢出

在程序的每一步之后查看数组的内容。

创建Scrap pq后,这是其数组的内容:

[0, 0, 0, 0]

然后进行一些修改:

pq.add(4);
pq.insert(3);
pq.add(5);

此时的内容:

[4, 3, 5, 0]

到目前为止一切顺利。

然后你对它进行排序:

pq.sort();

此时的内容:

[0, 5, 3, 4]

哎呀。排序实现不是很好,是吧。但是让我们暂时忽略它。下一步:

pq.insert(1);

此时的内容:

[0, 5, 3, 1]

这些行为都没有意义,这可能不是您希望程序运行的方式。审查程序,验证每一步后的内容。在当前步骤正常工作之前,不要继续下一步。

关于java - 当我在排序后尝试在数组中插入值时,我得到默认值 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49340452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com