命令行参数在 "main" 线程中导致异常
Command line arguments is causing Exception in "main" thread
import java.util.*;
public class bubblesort {
public int input;
public int c;
public int d;
public int swap;
public int[] arr= new int[input];
Random rand = new Random();
Scanner in = new Scanner(System.in);
public static void main(String[] args) {
bubblesort b = new bubblesort();
Scanner in = new Scanner(System.in);
System.out.println("Ascending(1),Descending(2),Random(3)");
int arrayInput= in.nextInt();
if (arrayInput == 1) {
b.ascending(args);
}
else if (arrayInput == 2) {
b.descending(args);
}
else if (arrayInput == 3) {
b.random(args);
}
}
public void ascending(String[] args){
this.input = Integer.parseInt(args[0]);
for (c = 0; c < input; c++){
arr[c] = rand.nextInt(Integer.MAX_VALUE);
}
for (c = 0; c < ( input - 1 ); c++) {
for (d = 0; d < input - c - 1; d++) {
if (arr[d] > arr[d+1]){
swap = arr[d];
arr[d] = arr[d+1];
arr[d+1] = swap;
}
}
}
for (c = 0; c < input; c++)
System.out.println(arr[c]);
long startTime = System.nanoTime();
for (c = 0; c < input - 1; c++){
for (d =0; d < input - c -1 ; d++){
if (arr[d] > arr[d+1]){
swap = arr[d];
arr[d] = arr[d+1];
arr[d+1] = swap;
}
}
}
long endTime = System.nanoTime();
long estimatedTime = endTime - startTime;
System.out.println("Sorted list of numbers");
for (c = 0; c < input; c++)
System.out.println(arr[c]);
System.out.println("The time it takes to sort an descending array into an ascending array is "+estimatedTime+" nano seconds");
}
}
所以当我编译这个文件(这不是我的整个文件)时它编译,就在我尝试 运行 它给出了异常:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at bubblesort.ascending(bubblesort.java:61)
at bubblesort.main(bubblesort.java:23)
我认为问题在于数组长度,或者我称之为 "input" 没有更改为命令行参数整数,因此输入保持为零。如果是这样,我该如何解决这个问题?
在你有变量的顶部。
public int input; //NOT INITIALIZED
public int[] arr= new int[input];
在您尝试创建数组之前,您的输入未初始化。所以它没有尺寸。
尝试在主函数中使用用户输入对其进行初始化,然后创建数组。
int arrayInput= in.nextInt();
arr = new int[arrayInput];
您无法在解析用户输入之前初始化 arr
。语句 public int[] arr= new int[input];
产生一个大小为 0 的数组,因此任何访问它的尝试都会抛出异常。解析数组长度后,尝试在 main 中初始化数组。
import java.util.*;
public class bubblesort {
public int input;
public int c;
public int d;
public int swap;
public int[] arr= new int[input];
Random rand = new Random();
Scanner in = new Scanner(System.in);
public static void main(String[] args) {
bubblesort b = new bubblesort();
Scanner in = new Scanner(System.in);
System.out.println("Ascending(1),Descending(2),Random(3)");
int arrayInput= in.nextInt();
if (arrayInput == 1) {
b.ascending(args);
}
else if (arrayInput == 2) {
b.descending(args);
}
else if (arrayInput == 3) {
b.random(args);
}
}
public void ascending(String[] args){
this.input = Integer.parseInt(args[0]);
for (c = 0; c < input; c++){
arr[c] = rand.nextInt(Integer.MAX_VALUE);
}
for (c = 0; c < ( input - 1 ); c++) {
for (d = 0; d < input - c - 1; d++) {
if (arr[d] > arr[d+1]){
swap = arr[d];
arr[d] = arr[d+1];
arr[d+1] = swap;
}
}
}
for (c = 0; c < input; c++)
System.out.println(arr[c]);
long startTime = System.nanoTime();
for (c = 0; c < input - 1; c++){
for (d =0; d < input - c -1 ; d++){
if (arr[d] > arr[d+1]){
swap = arr[d];
arr[d] = arr[d+1];
arr[d+1] = swap;
}
}
}
long endTime = System.nanoTime();
long estimatedTime = endTime - startTime;
System.out.println("Sorted list of numbers");
for (c = 0; c < input; c++)
System.out.println(arr[c]);
System.out.println("The time it takes to sort an descending array into an ascending array is "+estimatedTime+" nano seconds");
}
}
所以当我编译这个文件(这不是我的整个文件)时它编译,就在我尝试 运行 它给出了异常:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at bubblesort.ascending(bubblesort.java:61)
at bubblesort.main(bubblesort.java:23)
我认为问题在于数组长度,或者我称之为 "input" 没有更改为命令行参数整数,因此输入保持为零。如果是这样,我该如何解决这个问题?
在你有变量的顶部。
public int input; //NOT INITIALIZED
public int[] arr= new int[input];
在您尝试创建数组之前,您的输入未初始化。所以它没有尺寸。
尝试在主函数中使用用户输入对其进行初始化,然后创建数组。
int arrayInput= in.nextInt();
arr = new int[arrayInput];
您无法在解析用户输入之前初始化 arr
。语句 public int[] arr= new int[input];
产生一个大小为 0 的数组,因此任何访问它的尝试都会抛出异常。解析数组长度后,尝试在 main 中初始化数组。