Java 我的鸡尾酒分类代码有什么问题?

Java 我的鸡尾酒分类代码有什么问题?,java,sorting,methods,Java,Sorting,Methods,我设法翻译了鸡尾酒排序方法的伪代码,但当我运行它时,我得到一个运行时错误,显示如下: java.lang.ArrayIndexOutOfBoundsException: 1 at Sorting.cocktailSort(Sorting.java:119) at Sorting.plotCocktailSortTest(Sorting.java:213) at Sorting.main(Sorting.java:19) at sun.reflect.NativeM

我设法翻译了鸡尾酒排序方法的伪代码,但当我运行它时,我得到一个运行时错误,显示如下:

java.lang.ArrayIndexOutOfBoundsException: 1
    at Sorting.cocktailSort(Sorting.java:119)
    at Sorting.plotCocktailSortTest(Sorting.java:213)
    at Sorting.main(Sorting.java:19)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
以下是我的排序方法代码:

public static int cocktailSort(String[] numbers) {
    String [] inputCocktail = new String [numbers.length];
    for(int a = 0; a < numbers.length-2; a++) { 
        inputCocktail[a] = numbers [a]; 
    }      
    int left = 0;
    int right = numbers.length;
    boolean swapped =true; 
    String temp = "";
    int counter = 0;
    while (left < right && swapped) {
        swapped =false;
        for  (int mid = 0; mid < numbers.length; mid++) {
            if ((inputCocktail[mid].compareTo(inputCocktail[mid+1]))>0)
            { temp = inputCocktail[mid];
                inputCocktail[mid] = inputCocktail[mid+1];
                inputCocktail[mid+1] = temp;
                swapped = true;
            }  
        }    
        right--;
        if (swapped){
            swapped = false;
            for(int mid = numbers.length-2; mid>0; mid--)
                if ((inputCocktail[mid].compareTo(inputCocktail[mid-1]))<0)
                { temp = inputCocktail[mid];
                    inputCocktail[mid]= inputCocktail[mid-1];
                    inputCocktail[mid-1] = temp;
                    swapped = true;
                }
        }    
    }      
    left++;
    counter++;
    return counter;
}     
public static int cocktailSort(字符串[]数字){
String[]InputCuttack=新字符串[numbers.length];
对于(inta=0;a0)
{temp=输入鸡尾酒[mid];
输入鸡尾酒[mid]=输入鸡尾酒[mid+1];
输入鸡尾酒[mid+1]=温度;
交换=真;
}  
}    
对--;
如果(交换){
交换=假;
对于(int mid=numbers.length-2;mid>0;mid--)
如果((Input鸡尾酒[mid].compareTo(Input鸡尾酒[mid-1]))这看起来是错误的

for  (int mid = 0; mid < numbers.length; mid++) {
       if ((inputCocktail[mid].compareTo(inputCocktail[mid+1]))>0)
我不知道什么是
ArrayUtilities
,但是
getRandomNamesArray(1)
可能会返回一个大小为
1


在以后的代码中,您试图访问基于
size-2
size+1
的数组,这显然会失败。

我建议您寻找触发此错误的最短数据集,并在调试器中逐步执行代码。我将其更改为numbers.length-2,但仍然会出现相同的错误。请回答什么如何调用此代码以及您使用的参数。我不知道您想要我显示什么…抱歉,我是java新手。如果您愿意,我可以添加我的全部代码。不,如果您查看错误堆栈跟踪,您将在Sorting.main的
Sorting.cocktailSort(Sorting.java:119)处看到Sorting.plotCocktailSortTest(Sorting.java:213)处看到Sorting.main处的
Sorting.cocktailSort(Sorting.java:119)(Sorting.java:19)
这意味着此方法是从第213行的
PlotCocktailSortes
调用的。请快速,帮助我帮助您我已经更新了我的答案。学会调试,有能力的程序员必须知道如何调试。
  public static void plotCocktailSortTest(int N_MAX) {
    int[] cocktail_sort_results = new int[N_MAX];

// test sorting for arrays from size 1 to N_MAX
    // MAKE SURE THAT YOUR METHOD IS ACTUALLY SORTING THE TEST ARRAY!!!!!!
    for (int i = 1; i < N_MAX; i++) {
      String[] test_array = ArrayUtilities.getRandomNamesArray(i);
      cocktail_sort_results[i] = cocktailSort(test_array);
    }
    // create a plot window
    PlotWindow pw = new PlotWindow("Cocktail Sort!");
    // add a plot to the window using our results array
    pw.addPlot("CocktailSort", cocktail_sort_results);
  }   
for  (int mid = 0; mid < numbers.length; mid++) {
       if ((inputCocktail[mid].compareTo(inputCocktail[mid+1]))>0)
for (int i = 1; i < N_MAX; i++) {
      String[] test_array = ArrayUtilities.getRandomNamesArray(i);