由于某种原因,我的“ 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
答案 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);
}
}