繁体   English   中英

声明一个未知大小的数组而不使用ArrayList

[英]declare an array with unknown size without using ArrayList

有没有办法声明一个长度未知的数组? 我的问题是从一系列数字返回奇数的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)));
   } 
}

我当前的输出是[3,5,7,9,0,0,0,0,0,0],但我希望它是3,5,7,9它必须是一个数组而不是一个ArrayList 。 这可能吗? 还是有完全不同的方法?

那么,在您的用例中,您确切地知道您需要多少个数字。 查找如何根据您的最小值和最大值查找两个数字之间的奇数个数。 然后只分配那么多:

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)));
   } 
}

您应该在ArrayList添加元素并在返回时将其转换为数组,例如:

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();
}

Java不允许可变大小的数组。

您可以创建一个ArrayList ,将值存储为Integer对象,然后返回一个Integer[]数组。 例如,如果ArrayList对象被称为list ,那么返回值将是

list.toArray(new Integer[list.size()]);

如果要返回原始整数int[]的数组,则必须将Integer对象转换为整数值并手动创建数组。 Java 8使用流提供了一个方便的表示法,如另一个答案中所述。

StackOverflow已经广泛讨论了这种类型的转换问题,例如:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM