java - 二维数组可以存储一个整数和一个双精度数吗?
问题描述
所以,如果我的价值观是:
123, 12.34
234, 23.34
345, 45.67
诸如此类,是否可以使用二维数组来设置这些值?
解决方案
是和不是。
从技术上讲,您不能为每个数组维度定义不同的静态类型。因此,您不能将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 中的多维数组)。这就是为什么只有一种类型:最内层数组的类型。所有其他维度只是通往目标数组实例的间接级别(数组的数组)。
推荐阅读
- python - numpy.diff 产生意想不到的结果
- bash - 更改 USER 后如何以 root 身份运行 docker CMD
- python - 如果交易在烧瓶中成功,则条带不会保存
- azure-cosmosdb - java sdk的cosmos sql api中的upsertItem中是否有ParitionKey输入?
- php - 语法错误,意外 ')',期待 '['
- google-tag-manager - 在 GTM 中向 Google Ads 转化代码添加自定义字段
- javascript - JS中检测手机角度(0、90、-90、180)的方法
- web-scraping - Web Scraper 不返回任何内容
- firefox-addon-webextensions - 带有 PDF 文件的选项卡上的 Firefox 附加主机权限错误
- java - RabbitMq 监听器在两个不同的队列上监听两种不同的消息类型