为了账号安全,请及时绑定邮箱和手机立即绑定

二维数组可以存储一个整数和一个双精度数吗?

二维数组可以存储一个整数和一个双精度数吗?

守着星空守着你 2022-10-20 17:05:26
所以,如果我的价值观是:123, 12.34234, 23.34345, 45.67诸如此类,是否可以使用二维数组来设置这些值?
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

是和不是。

从技术上讲,您不能为每个数组维度定义不同的静态类型。因此,您不能将int列与double列混合。即使对于对象,您也不能将Integer列与Double列混合。

如果您只需要原语,您可以使用double[][]double 可以表示所有 32 位整数(请参阅Representing integers in doubles)。但从技术上讲,该数组是全双精度数:没有什么可以阻止您存储3.14第一列中的值。

对于对象,您可以使用通用的基本类型(如果存在)。对于您的特定用例,所有数字类型都扩展,java.lang.Number因此这有效:

    @Test

    public void testMixedNumbersArray() {

        Number[][] array = new Number[3][2];

        array[0][0] = 123; array[0][1] = 12.34;

        array[1][0] = 234; array[1][1] = 23.34;

        array[2][0] = 345; array[2][1] = 45.67;

        for (Number[] x : array) {

            System.out.println(Arrays.toString(x));

        }

    }


// outputs:

// [123, 12.34]

// [234, 23.34]

// [345, 45.67]

请记住,这实际上还允许您在此数组中混合 Float、Short、...甚至 BigDecimal 值,以及允许null值。


因此,如果您需要对数据类型进行严格控制,一个选项是创建一个自定义类,该类封装两个适当类型的单独数组:


public class MyArray {

    int[] col1;

    double[] col2;


    public MyArray(int size) {

        col1 = new int[size];

        col2 = new double[size];

    }

    // ... add get/set methods as needed, e.g.


    public void setCol1(int pos, int value) {

        col1[pos] = value;

    }


    public void setCol2(int pos, double value) {

        col2[pos] = value;

    }

}

要记住的最后一件事是 Java 多维数组是“数组的数组”(请参阅 Java 中的多维数组)。这就是为什么只有一种类型:最内层数组的类型。所有其他维度只是通往目标数组实例的间接级别(数组的数组)。



查看完整回答
反对 回复 2022-10-20
  • 1 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信