Java 为什么插入排序不起作用?
从Python切换到Java,并决定编写一个insertionsort方法。我用Python编写了这篇文章,并尝试一对一地切换代码,这一切看起来都很好,但它不能正常工作。我删除了所有其他类方法/数据字段以转换空间,并试图将此代码仅限于与此问题相关的代码:Java 为什么插入排序不起作用?,java,Java,从Python切换到Java,并决定编写一个insertionsort方法。我用Python编写了这篇文章,并尝试一对一地切换代码,这一切看起来都很好,但它不能正常工作。我删除了所有其他类方法/数据字段以转换空间,并试图将此代码仅限于与此问题相关的代码: public class test1 { static final int NOT_FOUND = -1; // A constant // Attributes (just one) private double d
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的格式。它需要调试特定的代码。你可以自己做。如果你对一段代码有问题,至少描述观察到的问题和预期结果!