首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将整数数组传递给期望`Array<T>`的方法?

如何将整数数组传递给期望`Array<T>`的方法?
EN

Stack Overflow用户
提问于 2016-10-10 09:01:38
回答 2查看 769关注 0票数 2

我已经把java shellSort改成Kotlin了。问题是我不知道叫这个方法。

Java

代码语言:javascript
复制
package Sorts;
public class ShellSort extends Sorter{

@Override
public <T extends Comparable<? super T>> void sort(T[] a) {
    int h = 1;
    while((h*3+1) < a.length)
        h = 3*h+1;
    while(h > 0){
        for(int i = h-1; i < a.length; i++){
            T s = a[i];
            int j = i;
            for(j = i; (j>=h) && (a[j-h].compareTo(s) > 0); j-=h)
                a[j] = a[j-h];
            a[j] = s;
        }
        h /= 3;
    }
}
}

Kotlin

代码语言:javascript
复制
fun <T : Comparable<T>> shellSort(a: Array<T>) {
    var h = 1
    while (h * 3 + 1 < a.size)
        h = 3 * h + 1
    while (h > 0) {
        for (i in h - 1..a.size - 1) {
            val s = a[i]
            var j = i
            j = i
            while (j >= h && a[j - h].compareTo(s) > 0) {
                a[j] = a[j - h]
                j -= h
            }
            a[j] = s
        }
        h /= 3
    }
}

我试图调用的是将intArray转换为数组。

代码语言:javascript
复制
 val array = intArrayOf(5, 3, 0, 2, 4, 1, 0, 5, 2, 3, 1, 4)
 shellSort(arrayOf(array))

它伴随着错误

代码语言:javascript
复制
Type parameter bound for T in 

 fun <T : Comparable<T>> shellSort(a: Array<T>) : Unit

is not satisfied: inferred type IntArray is not a subtype of Comparable<IntArray>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-10 09:07:28

intArrayOf返回IntArray,而并不像人们想象的那样扩展 Array<Int>。作为在文件中说明,Kotlin为各种原语提供了专门的数组类型,以避免装箱开销。IntArray对应于Java的int[]ShellSort.sort方法( Kotlin和Java)都需要盒装版本。

您可以使用如下所示的IntArray扩展方法将Array<Int>转换为toTypedArray

代码语言:javascript
复制
val array = intArrayOf(5, 3, 0, 2, 4, 1, 0, 5, 2, 3, 1, 4).toTypedArray()
shellSort(array)

或者,正如@KirillRakhman建议的那样,直接创建一个装箱版本:

代码语言:javascript
复制
shellSort(arrayOf(5, 3, 0, 2, 4, 1, 0, 5, 2, 3, 1, 4))
票数 7
EN

Stack Overflow用户

发布于 2016-10-10 09:10:44

这条线

代码语言:javascript
复制
shellSort(arrayOf(array))

不将IntArray array转换为常规Array<Integer>,而是将其封装在类型为Array<IntArray>的单例数组中。使用IntArray.toTypedArray()将其转换为泛型数组,正如@miensol建议的那样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39954726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档