gpt4 book ai didi

java - 我的鸡尾酒排序代码有什么问题?

转载 作者:行者123 更新时间:2023-12-02 04:52:05 26 4
gpt4 key购买 nike

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

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 compare(String a, String b)
{
int compared = 0;
a = a.toLowerCase();
b = b.toLowerCase();
//program assumes strings are equal

for (int i = 0; i<a.length() && i<a.length(); i++){
//for() loop goes on until the largest string
int c = a.charAt(i);
int d = b.charAt(i);
//convert char into int for comparison just in case
if(c < d){
compared = -1;
break;
//breaks at the first occurence of non equal characters
}
else if(c > d){
compared = 1;
break;
//same as above
}
}

return compared;
}

编辑#2:

  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)

与之前一样,您只需使用 numbers.length - 2 以内的元素填充 inputCocktail

基于您新发布的代码

for (int i = 1; i < N_MAX; i++) {
String[] test_array = ArrayUtilities.getRandomNamesArray(i);

我不知道ArrayUtilities是什么,但也许getRandomNamesArray(1)会返回一个大小为1的数组

在后面的代码中,您尝试根据 size - 2size + 1 访问数组,这显然会失败。

关于java - 我的鸡尾酒排序代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29135723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com