Java 为什么插入排序不起作用?

Java 为什么插入排序不起作用?,java,Java,从Python切换到Java,并决定编写一个insertionsort方法。我用Python编写了这篇文章,并尝试一对一地切换代码,这一切看起来都很好,但它不能正常工作。我删除了所有其他类方法/数据字段以转换空间,并试图将此代码仅限于与此问题相关的代码: public class test1 { static final int NOT_FOUND = -1; // A constant // Attributes (just one) private double d

从Python切换到Java,并决定编写一个insertionsort方法。我用Python编写了这篇文章,并尝试一对一地切换代码,这一切看起来都很好,但它不能正常工作。我删除了所有其他类方法/数据字段以转换空间,并试图将此代码仅限于与此问题相关的代码:

public class test1 {
    static final int NOT_FOUND = -1; // A constant

    // Attributes (just one)
    private double data[];

    // Constructor
        test1 (double data[]) {
            this.data = data.clone(); 
            }

        double getItem (int key) {
            return data[key];
        }

        void insertionSort () {
            for (int i = 1;i >= data.length;i++){
                double currentElement = data[i];
                int k = i - 1;
                while(k>=0 & data[k] > currentElement){
                    data[k+1] = data[k];
                    k -= 1;
                    data[k + 1] = currentElement;
                }
            }
        }

public static void main(String[] arg){
    double testData[] = {1,4,32,5,673,145,68,14,757};
    test1 b = new test1 (testData);

    b.insertionSort();
    //See how array has changed
    for (int i = 0; i < 9; i++) {
           System.out.print(b.getItem(i) + ", ");
        }
    }
}
公共类test1{
静态final int NOT_FOUND=-1;//一个常量
//属性(仅一个)
私人双重数据[];
//建造师
test1(双数据[]){
this.data=data.clone();
}
双getItem(int键){
返回数据[键];
}
void insertionSort(){
对于(int i=1;i>=data.length;i++){
双电流元件=数据[i];
int k=i-1;
while(k>=0&data[k]>currentElement){
数据[k+1]=数据[k];
k-=1;
数据[k+1]=当前元素;
}
}
}
公共静态void main(字符串[]arg){
双重测试数据[]={1,4,32,5673145,68,14757};
test1b=新的test1(testData);
b、 insertionSort();
//查看数组是如何更改的
对于(int i=0;i<9;i++){
系统输出打印(b.getItem(i)+“,”;
}
}
}

我相信这不是你的意思:

for (int i = 1;i >= data.length;i++){

这将是一个无限循环(实际上是溢出循环)或一个空循环。

我相信这不是你的意思:

for (int i = 1;i >= data.length;i++){
这将是一个无限循环(实际上是溢出循环)或一个空循环。

更改

for (int i = 1; i >= data.length; i++)

for(int i=1;i
其背后的原因是您正在从
i
索引的数组
data
中检索一个项。循环没有工作,因为
i
被初始化为
1
,条件
i>=data。length
返回
false
,因为
i
实际上小于示例中
data
数组的长度,因此循环没有运行

从数组中检索元素时,这种for循环中的检查还有其他问题,因为如果返回元素的索引小于数组长度,则会出现IndexOutOfBoundsException。

更改

for (int i = 1; i >= data.length; i++)

for(int i=1;i
其背后的原因是您正在从
i
索引的数组
data
中检索一个项。循环没有工作,因为
i
被初始化为
1
,条件
i>=data。length
返回
false
,因为
i
实际上小于示例中
data
数组的长度,因此循环没有运行


从数组中检索元素时,这种for循环中的检查还有其他问题,因为如果返回元素的索引小于数组长度,则会出现IndexOutOfBoundsException。

我知道这不完全是您要问的问题,但如果您正在学习Java,也许你可以找到有用的:

在Java中,您可以使用数组.sort()


我知道这并不是你想要的,但如果你正在学习Java,也许你会发现有用的:

在Java中,您可以使用数组.sort()


你的问题似乎不符合SO的格式。它需要调试特定的代码。你可以自己做。如果你对一段代码有问题,至少描述观察到的问题和预期结果!你的问题似乎不符合SO的格式。它需要调试特定的代码。你可以自己做。如果你对一段代码有问题,至少描述观察到的问题和预期结果!