Java 在一行中为多个变量指定多个值
我正在尝试编写以下Python反转排序算法的Java等价物:Java 在一行中为多个变量指定多个值,java,python,insertion-sort,Java,Python,Insertion Sort,我正在尝试编写以下Python反转排序算法的Java等价物: import numpy as np def main(items): for i in range(1, len(items)): j = i while j > 0 and items[j] < items[j-1]: items[j], items[j-1] = items[j-1], items[j] j -= 1
import numpy as np
def main(items):
for i in range(1, len(items)):
j = i
while j > 0 and items[j] < items[j-1]:
items[j], items[j-1] = items[j-1], items[j]
j -= 1
print(items)
main(np.array([4, 78, 23, 24, 56, 7, 9]))
将numpy导入为np
def主要(项目):
对于范围内的i(1,len(项目)):
j=i
当j>0且项目[j]
这是Java版本:
import java.util.Arrays;
public class Sorters {
public static void main(String args[]) {
Sorters sort = new Sorters();
int[] items = {4, 78, 23, 24, 56, 7, 9};
sort.insertionSort(items);
}
public void insertionSort(int[] items) {
for(int i=1 ; i<items.length ; i++) {
int j = i;
while(j>0 && items[j] < items[j-1]) {
items[j] = items[j-1]; // These two lines are
items[j-1] = items[j]; // causing the error
j -=1;
}
}
System.out.println("Sorted array: " + Arrays.toString(items));
}
}
导入java.util.array;
公共类分拣机{
公共静态void main(字符串参数[]){
分拣机分拣=新分拣机();
int[]项={4,78,23,24,56,7,9};
排序.插入排序(项目);
}
公共void insertionSort(int[]项){
对于(int i=1;i0&&items[j]
我已经将问题缩小到上面(在Java方法中)注释的两行
如果我给Python函数这个数组:[4,78,23,24,56,7,9]
(例如),一切都正常。但是,如果我给Java方法提供相同的数组,我会得到以下结果:[4,78,78,78,78,78,78]
有人能告诉我如何编写Python的
items[j],items[j-1]=items[j-1],items[j]
的Java等价物吗?欢迎解释。谢谢。这是因为在项目[j]与项目[j-1]之间交换时,需要使用temp
变量来存储其中一个值。应该是这样的:
int temp = items[j];
items[j] = items[j-1];
items[j-1] = temp;
发生的情况是,您丢失了原始值,因此循环的每次迭代都会将项[j]的值复制到项[j-1]中
这就是您获得输出的方式。这是因为在项目[j]与项目[j-1]之间交换时,需要使用
temp
变量来存储其中一个值。应该是这样的:
int temp = items[j];
items[j] = items[j-1];
items[j-1] = temp;
发生的情况是,您丢失了原始值,因此循环的每次迭代都会将项[j]的值复制到项[j-1]中
这就是您获得输出的方式。因此基本上您希望交换这两个索引。你可以这样做
int tmp=项目[j];
项目[j]=项目[j-1];
项目[j-1]=tmp;
因此基本上您希望交换这两个索引。你可以这样做
int tmp=项目[j];
项目[j]=项目[j-1];
项目[j-1]=tmp;
Python在某些方面很好,不是吗?Python在某些方面很好,不是吗?