从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) + ", ");
}
}
}
答案 0 :(得分:3)
更改
for (int i = 1; i >= data.length; i++)
到
for (int i = 1; i < data.length; i++)
背后的原因是您正在从数组data
中检索i
索引的项目。循环不起作用,因为i
已初始化为1
且条件i >= data.length
返回false
,因为i
实际上小于{data
的长度你的例子中有1}}数组,因此循环没有运行。
从数组中检索元素时,for循环中存在此类检查还有其他问题,因为如果要返回元素的索引是>=
而不是数组的长度,则会得到一个IndexOutOfBoundsException异常。
答案 1 :(得分:2)
我确信这不是你的意思:
for (int i = 1;i >= data.length;i++){
这将是无限(实际上是溢出)或空循环。
答案 2 :(得分:1)
我知道这不是你要求的,但如果你正在学习Java,也许你会觉得有用:
在Java中,您可以使用Arrays.sort()
:
void insertionSort () {
Arrays.sort(data);
}