.length 函数总是 returns 0

The .length function always returns 0

出于某种原因,我的 "Bubblesort()" 方法中的 .length 函数始终 returns 为零。有人可以解释为什么返回值 0 吗?

import java.util.Random;
import java.util.Scanner;

public class BubbleSortS {
    static int Count;
    static Integer org[];
    static Integer list[] = {  };

    public static void main(String[] args) {

        Scanner eingabewert = new Scanner(System.in);
        System.out.print("Wie viele Zahlen sollen sortiert werden: ");
        Count = eingabewert.nextInt();

        Integer list[] = intList();
        org = list.clone();
        Bubblesort();
        System.out.print("Original: ");
        printArray(org);
        System.out.print("\nSortiert: ");
        printArray(list);
        eingabewert.close();
    }

    public static void printArray(Integer[] toPrint) {
        for(int i = 0; i < toPrint.length; i++) {
            if(i < toPrint.length-1)
            {
                System.out.print(toPrint[i]+ ", ");
            } else {
                System.out.print(toPrint[i]);
            }
        }
    }

    public static Integer[] intList() {
        Integer[] nums = new Integer[Count];
        Random rand = new Random();
        for (int i = 1; i <= nums.length; i++)
        {
            nums[i - 1] = rand.nextInt((int) (System.currentTimeMillis()/1000000000));
        }
        return nums;
    }

    public static void Bubblesort() {
          int n = list.length;
          int temp = 0;
          boolean swapped;
                  do{
                    swapped = false;
                    for (int i=0; i < n-1; ++i)
                    {
                        if (list[i] > list[i+1])
                        {
                            temp = list[i+1];
                            list[i+1] = list[i];
                            list[i] = temp;
                            swapped = true;
                        }
                    }
                    n = n-1;
                  } while (swapped);
    }
}

输出:

Wie viele Zahlen sollen sortiert werden: 5 原文:443、322、183、574、108 出击:443、322、183、574、108

您应该将参数传递给您的方法,而不是声明静态字段。在这种情况下发生的事情称为阴影。您在未初始化的静态变量上调用 length 方法,而不是在初始化的列表上。 您可以这样重写您的程序:

import java.util.Random;
import java.util.Scanner;

public class Bubblesort {
    public static void main(String[] args) {
        Scanner eingabewert = new Scanner(System.in);
        System.out.print("Wie viele Zahlen sollen sortiert werden: ");
        int count = eingabewert.nextInt();
        Integer list[] = intList(count);
        Integer org[] = list.clone();
        bubblesort(list);
        System.out.print("Original: ");
        printArray(org);
        System.out.print("\nSortiert: ");
        printArray(list);
        eingabewert.close();
    }

    public static void printArray(Integer[] toPrint) {
        for(int i = 0; i < toPrint.length; i++) {
            if(i < toPrint.length-1)
            {
                System.out.print(toPrint[i]+ ", ");
            } else {
                System.out.print(toPrint[i]);
            }
        }
    }

    public static Integer[] intList(int count) {
        Integer[] nums = new Integer[count];        
        Random rand = new Random();
        for (int i = 1; i <= nums.length; i++)
        {
            nums[i - 1] = rand.nextInt((int) (System.currentTimeMillis()/1000000000));
        }
        return nums;
    }

    public static void bubblesort(Integer list[]) {
        int n = list.length;
        int temp;
        boolean swapped;
        do{
            swapped = false;
            for (int i=0; i < n-1; ++i)
            {
                if (list[i] > list[i+1])
                {
                    temp = list[i+1];
                    list[i+1] = list[i];
                    list[i] = temp;
                    swapped = true;
                }
            }
            n = n-1;
        } while (swapped);
    }
}