0

我正在为我的编程课介绍做作业,这是一个冒泡排序。代码可能有缺陷,但我不是在找人来解决这个问题。我的问题是,我正在尝试打印它。我得到的条件是,该方法必须由“public static void sort(int[] array)”行中的 void 方法定义。所以,如果我尝试导入数组,并使用System.out.println(Arrays.toString(sort(array)));在我的主要方法中,它不起作用,因为我收到一个编译器错误,说 void 不适用。如果我试图将它放入 main 方法的循环中,它会告诉我存在不兼容的类型。找到的是void,需要的是int[],但是赋值的原始条件是使用void方法。因此,话虽如此,我应该将方法从 void 更改为 int[] 以进行测试并将分配作为 void 提交,还是有办法用 void 打印此代码的输出而我只是想念它?

public static void sort(int[] array)
      { 
        int[] y = new int[array.length];
        for(int i = 0; i<=array.length-1; i++)
        {
          for(int j = i+1; i<=array.length-1; j++)
          {
            if(array[i] < array[j]){
              y[i] = array[j];
            }
            if(array[i] >= array[j]){
              y[i] = array[i]; 
          }  
        }
          for(int k = 0; k<y.length; k++){
          System.out.println(y[k]);
          }
      } 
    } //end of sort method
4

4 回答 4

2

问题是您在排序方法中创建了一个新的本地数组,由于分配的限制,您显然无法返回该数组。

int[] y = new int[array.length];

您的方法将无效,因为传递的数组将保持不变。您需要就地进行排序,即不创建新数组。因此,如果您从 main 方法传递它,它会被排序并且您可以在那里打印它。

冒泡排序应该使用交换方法,因此您只需要一个临时变量。

于 2013-11-09T21:31:50.653 回答
1

为了打印数组,在您的main方法中,您需要

//code that initializes the array or whatever
sort(myArray);
System.out.println(Arrays.toString(myArray)); //print the array modified by the previous method call

另请注意@A4L 对您的本地阵列的评价。使用作为参数传递给方法的数组,不要创建新数组。

于 2013-11-09T21:36:21.537 回答
0

由于您有一个 void sort 方法,因此您希望它对数组进行排序作为副作用。也就是说,修改int[] array您作为方法参数传递的引用中的值。然后你可以从 main 打印它。

于 2013-11-09T21:32:34.040 回答
0

Arrays.sort()修改您传入的数组。因此,如果您遍历array对象并在调用之后打印元素Arrays.sort(),它将为您打印。

于 2013-11-09T21:27:48.210 回答