在一行中为多个变量分配多个值

时间:2016-05-27 02:31:58

标签: java python insertion-sort

我正在尝试编写以下Python Inversion-Sort算法的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

    print(items)

main(np.array([4, 78, 23, 24, 56, 7, 9]))

这是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方法中)。

如果我给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等价物吗?欢迎解释。感谢。

2 个答案:

答案 0 :(得分:4)

这是因为当您在项目[j]与项目[j-1]之间进行切换时,需要使用var segment: SKSpriteNode! 变量来存储其中一个值。它应该是这样的:

temp

会发生什么情况,你丢失了原始值,所以循环的每次迭代都可以复制到项目[j]中项目[j-1]的值。

这就是你如何得到你的输出。

答案 1 :(得分:2)

所以基本上你想交换两个索引。你可以这样做 int tmp = items[j]; items[j] = items[j-1]; items[j-1] = tmp;