.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);
}
}
出于某种原因,我的 "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);
}
}