我正在学习Java并编写QuickSort
类编码。在某些时候,我需要交换数组中的元素,因此我尝试使用Collections.swap
来做,建议使用javac QuickSort.java
,例如in this question。但是,error: swap(Object[],int,int) has private access in Collections
会向我抛出错误:
QuickSort.java
我在这里做错了什么?完整代码package src.sort;
import java.util.Collections;
public class QuickSort {
public static void sort(Comparable[] xs) {
sort(xs, 0, xs.length);
}
private static boolean less(Comparable x, Comparable y) {
return x.compareTo(y) < 0;
}
private static void sort(Comparable[] xs, int fst, int lst) {
if (fst >= lst) return;
int i = fst, j = lst;
Comparable pivot = xs[(i + j) / 2];
while (i <= j) {
while (less(xs[i++], pivot));
while (less(pivot, xs[j--]));
if (i <= j) Collections.swap(xs, i++, j--);
}
sort(xs, fst, j);
sort(xs, i, lst);
}
}
:
{{1}}
答案 0 :(得分:3)
错误很明确。您无法调用该方法,因为它是一种私有方法,只能访问 <Window.Resources>
<Style TargetType="{x:Type Button}" x:Key="First" >
<Setter Property="Background" Value="Red"/>
</Style>
<Style TargetType="{x:Type Button}" x:Key="Second" >
<Setter Property="Background" Value="Green"/>
</Style>
</Window.Resources>
<StackPanel>
<Button x:Name="A">
<Button.Resources>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource First}" />
</Button.Resources>
content A</Button>
<Button x:Name="B">
<Button.Resources>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource Second}" />
</Button.Resources>
content B</Button>
</StackPanel>
类中的代码。编写自己的方法非常容易,该方法具有与此简单方法相同的功能。
链接问题中建议的交换方法是一种公共方法,它交换列表的两个元素 - Collections
。您尝试调用的方法是一种不同的方法,它交换数组的两个元素,并且它是私有的 - public static void swap(List<?> list, int i, int j)
。