Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不使用ArrayList的情况下声明大小未知的数组_Java_Arrays - Fatal编程技术网

Java 在不使用ArrayList的情况下声明大小未知的数组

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

是否有方法声明长度未知的数组?我的问题是从一系列数字中返回奇数整数的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; 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;i
Java
不允许大小可变的数组

您可以创建
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
语句的情况下运行该程序,您会理解的。