将2d int数组转换为2d double的最短方法

时间:2012-03-14 21:23:57

标签: java casting

我有一个方法只能获得double[][]我希望传递给int[][]的方法,在java中有一个简单的方法吗,就像这样简单:

int [][] iArray = {
          { 1, 2, },
          { 5, 6, }
        };
double [][] dArray = (double[][]) iArray ; ???

6 个答案:

答案 0 :(得分:19)

不幸的是,构建数组的唯一方法是迭代遍历每个元素并逐个转换它们,同时重新插入新的double[][]数组。

没有捷径。

答案 1 :(得分:2)

不,这不是正确的输入。 int []是一个类型,double []是一个类型,它们没有关系,所以不允许这样的赋值。因此,没有办法施展这个。

您必须复制元素(您可以在不转换的情况下将int指定给double)。

答案 2 :(得分:0)

你不能施放它们,双打在内存中的排列不同于整数,这不是简单改变名字的情况。

编辑:只有当double是int的超类或子类时,才可能

答案 3 :(得分:0)

你可以这样做:

    int[][] intarray = {{1, 2}, {5, 6}};

    double[][] doublearray = new double[intarray.length][intarray[0].length];

    for(int i = 0; i < intarray.length; i++)
    {
        for(int j = 0; j < intarray[0].length; j++)
            doublearray[i][j] = (double) intarray[i][j];
    }

编辑:正如Andreas_D所指出的,这只有在所有行都具有相同长度时才有效,如果你想要变量长度,你必须遍历第二个for循环以获得可变数量的列。

答案 4 :(得分:0)

嗯,用Java 8编写的代码值得称为快捷方式吗?

import java.util.Arrays;

// ...

/// Cast!
int[][] int2DArray = {{3, 1}, {3, 3, 7}, {}};
Object[] arrayOfUntypedArraies = Arrays.stream(int2DArray).map(intArray -> Arrays.stream(intArray).asDoubleStream().toArray()).toArray();
double[][] double2DArray = Arrays.copyOf(arrayOfUntypedArraies, arrayOfUntypedArraies.length, double[][].class);

/// Print!
System.out.println(Arrays.deepToString(int2DArray));
// [[1, 2], [5, 6, 7], []]
System.out.println(Arrays.deepToString(double2DArray));
// [[1.0, 2.0], [5.0, 6.0, 7.0], []]

答案 5 :(得分:0)

在Java 8中,您可以将$scope.$apply()的一维数组转换为app.controller('loginctrl',['$rootScope','$scope','$http','$state','$cookies',function($scope,$rootScope,$http,$state,$cookies){ var cookietoken= $cookies.get('Token'); if(cookietoken) { alert('You are already logged in!'); $state.go('home'); } else { $scope.user={ username:"", password:"", rememberme:"" }; $scope.showerror=false; $scope.login = function(){ $http({ method:"POST", url:$rootScope.apiend+'login', data:$scope.user }) .success(function(result){ console.log(result); }).error(function(){ alert('something looks wrong.'); }); }; } s的数组:

int

因此,我通过循环遍历行写了我认为更快的版本:

double

我正准备发布这个答案,但我想发布一些关于每个元素天真循环多快的指标。事实证明它在 10x慢附近!我用10000x1000的零数组测试了它。我想这是造成减速的额外对象创建。

除非别人能证明不是这样,否则我认为最简单的解决方案实际上是最快的:

double[] singleDimensionDoubleArray = 
        Arrays.stream(singleDimensionIntArray).asDoubleStream().toArray()