.length函数始终返回0

时间:2020-03-19 11:07:30

标签: java arrays bubble-sort

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

Private usedRowsCount As Long, v As Variant

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  usedRowsCount = Target.Worksheet.UsedRange.Rows.Count
  v = Selection.Resize(, 3).Value 'columns A-C of selected row
End Sub

Sub Worksheet_Change(ByVal Target As Range)
  If usedRowsCount < Target.Worksheet.UsedRange.Rows.Count Then
    Debug.Print "Row Added: ", Target.Address
  ElseIf usedRowsCount > Target.Worksheet.UsedRange.Rows.Count Then
   Worksheets("Sheet2").Range("A2").Resize(, 3).Value = v
    Debug.Print "Row deleted: ", Target.Address
  End If
End Sub

输出:

Wie viele Zahlen sollen sortiert werden:5 原稿:443、322、183、574、108 Sortiert:443、322、183、574、108

1 个答案:

答案 0 :(得分:1)

您应该将参数传递给方法,而不是声明静态字段。在这种情况下发生的事情称为阴影。您在未初始化的静态变量而不是初始化列表上调用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);
    }
}
相关问题