gpt4 book ai didi

java - 如何处理int和Integer之间的数组元素

转载 作者:行者123 更新时间:2023-12-01 06:48:08 26 4
gpt4 key购买 nike

首先,这是一篇很长的文章,因此如果您需要澄清,请告诉我。

我是 Java 新手,很难决定应该使用 int[] 还是 Integer[]。我编写了一个从 int[] 数组中查找 odd_number 的函数。

public int[] find_odd(int[] arr) {
int[] result = new int[arr.length];
for(int i=0; i<arr.length; i++) {
if(arr[i] % 2 != 0) {
//System.out.println(arr[i]);
result[i] = arr[i];
}
}
return result;
}

然后,当我传递由一些整数组成的 int[] 数组时,如下所示:

int[] myArray = {-1, 0, 1, 2, 3};
int[] result = find_odd(myArray);

数组“结果”包含:

0, -1, 0, 1, 0, 3

因为在Java中你必须先定义数组的大小,而空的int[]数组元素是0而不是null。因此,当我想测试 find_odd() 函数并期望数组仅包含奇数(确实如此)时,它会抛出错误,因为数组还包含代表“空单元格”的 0,如上所示。

我的测试代码:

public void testFindOddPassValidIntArray() {
int[] arr = {-2, -1, 0, 1, 3};
int[] result = findOddObj.find_odd(arr);

//check if return array only contain odd number
for(int i=0; i<result.length; i++) {
if(result[i] != null) {
assert is_odd(result[i]) : result[i];
}

}
}

所以,我的问题是我应该使用 int[] 数组并在测试中添加对 0 元素的检查,例如:

if(result[i] != 0) {
assert is_odd(result[i] : result[i]
}

但在这种情况下,如果 find_odd() 函数被破坏并因计算错误而返回 0,我将无法捕获它,因为我的测试代码只会假设 0 是空单元格。

或者我应该使用默认值为 null 的 Integer[] 数组吗?人们如何应对这种情况?

最佳答案

我的建议是通常你不应该使用数组。您应该使用List来代替。到那时,选择就已经为你做出了。您必须使用 Integer 而不是 int,因为 Java 泛型不支持基本类型(与 C# 不同)。

public List<Integer> findOdd(List<Integer> in) {
List<Integer> ret = new ArrayList<Integer>();
for (Integer i : in) {
if (i % 2 == 1) {
ret.add(i);
}
}
return ret;
}

由于您是 Java 新手,这可能会向您介绍一些新概念。

Java 集合没有与数组相同的限制。例如,您不必在创建 ArrayList 时声明它的大小。数组分配被这个特定的类抽象出来。

现在所有这些都假设您不希望结果数组与输入数组的大小相同。这样做是有充分理由的(例如,在进行 vector/矩阵数学时)。处理这种事情的两种方法是使用 Integer (因此您可以将 null 表示为空值,但这需要您测试 null code>)或使用标记值(例如 Integer.MAX_VALUE)。

关于java - 如何处理int和Integer之间的数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3058715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com