有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个大小为4的整数数组。我通过add方法向它添加元素。这是一个未排序的数组。我通过下面代码中显示的排序方法对其进行排序。排序方法将最小的数字放在位置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
}

共 (3) 个答案

  1. # 1 楼答案

    我假设您将使用正确的sort方法(因为这不正确,您可以使用Arrays.sort)。但如果排序正确,代码中仍然存在逻辑问题

    开始时,数组包含所有0。添加前3个int后,当调用sort方法时,数组按以下顺序包含值:

    0,3,4,5
    

    注意,i的值没有改变。在这种状态下,i的值是3。因此,当您插入1时,新值变为

    0,3,4,1
    

    因此,在再次排序之后,数组的值变为

    0,1,3,4
    

    所以很明显,最小值是0

  2. # 2 楼答案

    我认为这不是对数组进行排序的最有效方法。只需1个for循环就可以实现这一点。尝试将数组从最小到最大排序

    int temp;
    for(int i=0;i<array.length-1;i++){
    if(array[i]>array[i+1]){
        temp=array[i];
        array[i]=array[i+1];
        array[i+1]=temp;
        i=-1;
    }
        }
    
  3. # 3 楼答案

    简而言之,问题是:

    • 从长度为4的数组开始。
      • 此时数组包含4个零,即:[0, 0, 0, 0]
    • 添加4、3和5。这些操作将数组的内容更新为[4, 3, 5, 0]
    • 对数组进行排序。这会将数组的内容更改为[0, 3, 4, 5]。事实上,它变为^{,这意味着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非常不合适,肯定会让你感到困惑size是合适的。把它设为static也没有意义,所以我建议删除这个关键字
    • 修复sort的实现。有许多基本的排序算法很容易实现。在实现中,不要一直到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]
    

    所有这些行为都没有意义,可能这不是您计划的程序工作方式。检查程序,在每个步骤后验证内容。在当前步骤正常工作之前,不要进行下一步