Java 我的if状况有什么问题?
我已经想了三个小时了。我相信语法是正确的,但方法不起作用。该类采用Point2D类型的arrayList(类I已定义),其中包含点的x和y元素。我试图按递增的点大小(例如(200,200),(200,400),(400,200),(400,300),(400,400)…等)对arrayList排序,所以先对x点排序,然后对y点排序)。indexOfSmallest的for循环中的if条件应该是最小的,if I is correct应该是有效的,但它只会正确地对x值排序。有什么想法吗?提前谢谢你Java 我的if状况有什么问题?,java,sorting,arraylist,Java,Sorting,Arraylist,我已经想了三个小时了。我相信语法是正确的,但方法不起作用。该类采用Point2D类型的arrayList(类I已定义),其中包含点的x和y元素。我试图按递增的点大小(例如(200,200),(200,400),(400,200),(400,300),(400,400)…等)对arrayList排序,所以先对x点排序,然后对y点排序)。indexOfSmallest的for循环中的if条件应该是最小的,if I is correct应该是有效的,但它只会正确地对x值排序。有什么想法吗?提前谢谢你
import java.util.ArrayList;
public class Point2DSelectionSort {
public Point2DSelectionSort() {
}
public static void sort(ArrayList<Point2D> a) {
int index, index2,indexOfNextSmallest;
for (index = 0; index < a.size( ) - 1; index++){
indexOfNextSmallest =
indexOfSmallest(index, a);
interchange(index,indexOfNextSmallest, a);
}
//a.get(0), a.get(1),...,a.get(index) are sorted.
}
/**
* Precondition : i and j are legal indices for the ArrayList a.
* Postcondition: a.get(i) and a.get(j) have been interchanged.
*/
private static void interchange(
int i, int j, ArrayList<Point2D> a) {
Point2D temp;
temp = a.get(i);
a.set(i, a.get(j));
a.set(j, temp);
}
/**
* @return the index of the lexicographically first value among
* a.get(startIndex), a.get(startIndex+1),...,a.get(a.size( ) - 1)
*/
private static int indexOfSmallest(
int startIndex, ArrayList<Point2D> a) {
Point2D min = a.get(startIndex);
int indexOfMin = startIndex;
//Point2D otherPair = (Point2D) min;
for (int index = startIndex + 1; index < a.size( ); index++){
if((a.get(index).getFirst() < min.getFirst()) || (( a.get(index).getFirst() == min.getFirst() ) && ( a.get(index).getSecond() < min.getSecond() ))){
min = a.get(index);
indexOfMin = index;
}
}
return indexOfMin;
}
}
import java.util.ArrayList;
公共类Point2SelectionSort{
公共点2DSelectionSort(){
}
公共静态无效排序(ArrayList a){
int索引,index2,indexofnextmin;
对于(索引=0;索引
整个类是不必要的,因为它可以被调用Collection.sort()
列表列表;//假设
Collections.sort(list,newcomparator(){
公共整数比较(点2D a、点2D b){
返回a.x==b.x?a.y-b.y:a.x-b.x;
}
});
瞧
如果这是一个赋值,并且您必须使用该类,请将此代码合并到您的方法中(放弃除排序方法外的所有代码):
公共静态无效排序(ArrayList a){
Collections.sort(list,newcomparator(){
公共整数比较(点2D a、点2D b){
返回a.x==b.x?a.y-b.y:a.x-b.x;
}
});
}
工作完成了
为了明确回答您的问题“我的if语句有什么问题”,答案是“它存在”您是否尝试过输入一些打印语句?把你的
if
语句分解成嵌套的片段,每层中都有打印语句,怎么样?是的,一定要把if
分解成几个语句(将它们的结果分配给boolean
变量),然后把结果值分解成println
。我觉得你的if
条件还可以。你单独测试过吗?也许问题在别处。(请注意,如果在循环体的顶部声明变量Point2D probe=a.get(index);
,然后在循环体的其余部分使用probe
而不是a.get(index)
,那么循环将更容易理解。)最好的办法是使用调试器检查代码……是的,但是如果是作业的话,整个课程是完全必要的!毕竟,有人需要了解各种排序算法的实际工作原理(而不仅仅是调用股票API)。(顺便说一句,我不是选民。)@TedHopp当然,但是学习jdkapi就是学习语言。答案编辑顺便提一下,提供了一个折衷方案。从评论(包括Dave Newton编辑删除的评论)判断,任务是实现选择排序。为此,OP确实需要一种方法来查找给定索引处或之外的最小元素的索引。@Ted
你能告诉我这种赋值会让我恼火吗?在现实世界中,任何实现这种代码的程序员都会被解雇。要求学生不要使用图书馆正在滋生坏习惯。要求教师设置没有库解决方案的编码问题是不是太过分了
@现实世界中的波希米亚人是这里的关键,但对于学习算法,我认为这些任务是完全有效的。理解特定方法的工作原理有什么错?没有什么不好的东西能把它变成一部分。在现实世界中,他们应该知道不要重新发明轮子(可能是盒子形状的:-),但这取决于个人是否愚蠢。。。
List<Point2D> list; // assuming
Collections.sort(list, new Comparator<Point2D>() {
public int compare(Point2D a, Point2D b) {
return a.x == b.x ? a.y - b.y : a.x - b.x;
}
});
public static void sort(ArrayList<Point2D> a) {
Collections.sort(list, new Comparator<Point2D>() {
public int compare(Point2D a, Point2D b) {
return a.x == b.x ? a.y - b.y : a.x - b.x;
}
});
}