Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的if状况有什么问题?_Java_Sorting_Arraylist - Fatal编程技术网

Java 我的if状况有什么问题?

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值排序。有什么想法吗?提前谢谢你

我已经想了三个小时了。我相信语法是正确的,但方法不起作用。该类采用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;
        }
    });
}