Java 在不使用ArrayList的情况下声明大小未知的数组
是否有方法声明长度未知的数组?我的问题是从一系列数字中返回奇数整数的int[]。我当前的输出是添加0以填充阵列的剩余空间Java 在不使用ArrayList的情况下声明大小未知的数组,java,arrays,Java,Arrays,是否有方法声明长度未知的数组?我的问题是从一系列数字中返回奇数整数的int[]。我当前的输出是添加0以填充阵列的剩余空间 public class Practice { static int[] oddNumbers(int minimum, int maximum) { int[] arr = new int[10]; int x = 0; int count = 0; for(int i = minimum; i <= maximum
public class Practice {
static int[] oddNumbers(int minimum, int maximum) {
int[] arr = new int[10];
int x = 0;
int count = 0;
for(int i = minimum; i <= maximum; i++){
if(i % 2 != 0){
arr[x] = i;
++x;
}
}
return arr;
}
public static void main(String[] args) {
int min = 3, max = 9;
System.out.println(Arrays.toString(oddNumbers(min, max)));
}
}
公共课堂实践{
静态整数[]奇数(最小整数,最大整数){
int[]arr=新的int[10];
int x=0;
整数计数=0;
for(int i=minimum;iJava
不允许大小可变的数组
您可以创建ArrayList
,将值存储为Integer
对象,然后返回Integer[]
数组。例如,如果ArrayList
对象被称为list
,则返回值将为
list.toArray(new Integer[list.size()]);
如果要返回一个原始整数数组int[]
,则必须将Integer
对象转换为整数值,并手动创建数组。Java8
提供了一个方便的符号,使用流,如另一个答案中所述
这类转换问题已在StackOverflow
中进行了广泛讨论,例如:
您应该在数组列表中添加元素,并在返回时将其转换为数组,例如:
static int[] oddNumbers(int minimum, int maximum) {
List<Integer> arr = new ArrayList<>();
for (int i = minimum; i <= maximum; i++) {
if (i % 2 != 0) {
arr.add(i);
}
}
return arr.stream().mapToInt(Integer::intValue).toArray();
}
静态整数[]奇数(最小整数,最大整数){
List arr=new ArrayList();
对于(int i=minimum;i嗯,在您的用例中,您确切地知道您需要多少个数字。根据您的最小值和最大值,查找如何找到两个数字之间的奇数。然后分配这些奇数:
int closestMin = minimum % 2 == 0 ? minimum + 1 : minimum;
int closestMax = maximum % 2 == 0 ? maximum - 1 : maximum;
int numberOfOdds = ((closestMax - closestMin) / 2) + 1;
int[] arr = new int[numberOfOdds];
....
您可以确定数组中将存储多少个元素,然后将数组构造为该大小:
import java.util.Arrays;
public class Practice {
static int[] oddNumbers(int minimum, int maximum) {
int x = 0;
for(int i = minimum; i <= maximum; i++){ //
if(i % 2 != 0){ ////
++x; ////// Find the element count
} ////
} //
int[] arr = new int[x]; // Construct array with the length of the element count
x = 0; // Reset X (Just to avoid creating a new control variable)
for(int i = minimum; i <= maximum; i++){
if(i % 2 != 0){
arr[x] = i;
++x;
}
}
return arr;
}
public static void main(String[] args) {
int min = 3, max = 9;
System.out.println(Arrays.toString(oddNumbers(min, max)));
}
}
导入java.util.array;
公共课堂实践{
静态整数[]奇数(最小整数,最大整数){
int x=0;
对于(int i=minimum;i)您不能声明没有大小的数组。您需要返回int[],然后使用ArrayList并返回ArrayList.toArray()
您不能使用ArrayList
的具体原因是什么?这就是ArrayList的确切用法。您对ArrayList有什么看法?通过一点数学知识,您可以精确计算数组中的元素数量。它将是(最大-最小)如果最小值和最大值都是奇数或偶数,那么/2和+/-1
都是奇数或偶数。这个问题的主要问题是,从您的用例来看,它不是一个“未知大小”。您不能在不迭代的情况下将列表
转换为int[]
。当然,因此需要参考“手册”我的答案中的转换::-)您也可以使用。非常感谢!介意我问一下,为什么在创建数组后x需要重置为0?@smrak如果x==4
,那么执行int[]arr=new int[x];
将创建一个长度为3的数组,但在此操作之后x仍然等于4,因此当第二个for
尝试执行arr[x]=i;
它会抛出一个java.lang.ArrayIndexOutOfBoundsException
,因为索引从0开始。这有点难以解释,但我想如果您尝试在不使用x=0
语句的情况下运行该程序,您会理解的。