Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.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 如何在以泛型数组为参数的泛型方法中实现compareTo?_Java_Java 8 - Fatal编程技术网

Java 如何在以泛型数组为参数的泛型方法中实现compareTo?

Java 如何在以泛型数组为参数的泛型方法中实现compareTo?,java,java-8,Java,Java 8,我试图实现一个方法,给定一个通用数组和两个索引值,对数组进行切片,并在两个给定的数字之间找到最大的元素 <T extends Comparable<? super T>> T max(T[] array, int firstIndx, int secondIndx) { //requires comparable T maxElement = array[0]; //8 System.out.println(Arrays.toStr

我试图实现一个方法,给定一个通用数组和两个索引值,对数组进行切片,并在两个给定的数字之间找到最大的元素

<T extends Comparable<? super T>> T max(T[] array, int firstIndx, int secondIndx) {        //requires comparable
    T maxElement = array[0];      //8
    System.out.println(Arrays.toString(array));

    for (int i = firstIndx; i < secondIndx - 1; i++) {
        for (int j = firstIndx + 1; j < secondIndx; j++) {
            if (array[i].compareTo(array[j]) > 0) {
                maxElement = array[i];
                array[i] = array[j];
                array[j] = maxElement;
            }
        }
    }

    System.out.println(Arrays.toString(array));
    return maxElement;
}

排序有两个问题。第一个是使用
firstIndx
secondIndx
,但根据代码的结构,它将第二个数字视为第二个索引减去1

第二个问题是,您的内部循环每次都从
firstIndx
开始,这打破了冒泡排序。它需要从
i
开始

尝试对for循环进行以下修改:

for (int i = firstIndx; i <= secondIndx - 1; i++) { // Notice the "<=".
    for (int j = i + 1; j <= secondIndx; j++) { // j starts at i
    // ... existing bubble sort code goes here
    }
}

for(int i=firstIndx;i排序有两个问题。第一个问题是使用
firstIndx
secondIndx
,但根据代码的结构,它将第二个数字视为第二个索引减去1

第二个问题是,您的内部循环每次都从
firstIndx
开始,这打破了冒泡排序。它需要从
i
开始

尝试对for循环进行以下修改:

for (int i = firstIndx; i <= secondIndx - 1; i++) { // Notice the "<=".
    for (int j = i + 1; j <= secondIndx; j++) { // j starts at i
    // ... existing bubble sort code goes here
    }
}

用于(iTi=FieldIdx;i,用什么参数调用函数?也考虑删除<代码>智能版< /COD>和<代码> JavaFX标签,因为它们似乎是无关的。对不起,我只是意识到我输入了错误的标签。BTW我调用传递数组的函数,而不是对它进行切片,所以用FrestDINX=0和第二INDX=4。,因为问题出在冒泡中,所以你试过调试它吗?如果你的目标是找到最大元素,那么你应该只需要在整个数组中使用一个循环。我不知道如何调试代码。是的,我知道,如果我必须只找到最大元素,那么这个方法是有效的,但我想知道为什么冒泡排序会给我这个奇怪的输出。您应该创建具有明确目的的方法,而不是不同任务的混合。没有人会期望返回值的名为
max
的方法也会修改指定的数组。对切片进行排序的方法应命名为
sort
,并且不需要返回值(如)之后,读取该切片的最后一个元素是微不足道的。用什么参数调用函数?也考虑删除<代码>智能> 和<代码> javaFX标签,因为它们似乎是无关的。对不起,我只是意识到我输入了错误的标签。BTW我调用传递数组的函数,而不是把它切片,S。o第一个INDX=0,第二个INDX=4,因为问题出在冒泡中,所以你试过调试它吗?另外,如果你的目标是找到最大元素,你应该只需要在整个数组中使用一个循环。我不知道如何调试代码。是的,我知道,如果我必须只找到最大元素,那么这个方法可以工作,但我想知道为什么UBLE排序给了我一个奇怪的输出。你应该创建有明确目的的方法,而不是不同任务的混合。没有人会期望一个名为
max
的方法返回一个值也会修改指定的数组。一个对切片排序的方法应该命名为
sort
,它不需要返回value(like),因为之后读取切片的最后一个元素很简单。反例:
max(新整数[]{1,2,3,4,5},0,4);
->结果将是
1
很好的捕获。我解决的是排序问题,而不是max查找问题。@webstorer,检查我的编辑。反例:
max(新整数[]{1,2,3,4,5},0,4);
->结果将是
1
很好的捕获。我正在解决排序问题,而不是最大查找问题。@WebStormer,查看我的编辑。