如何在不知道数量的情况下初始化数组?

我有一种情况,我必须在输入数组上应用一个标准,并将另一个数组重新作为输出,根据过滤标准,它将具有更小的尺寸。

现在问题是我不知道过滤结果的大小,所以我不能用特定值初始化数组。 并且我不希望它是大尺寸将为null值因为我使用array.length; 稍后的。

一种方法是首先循环原始输入数组并设置计数器,然后使用该计数器长度创建另一个循环并初始化并填充此数组[]。 但是,无论如何只需要在一个循环中完成这项工作吗?

你不能……数组的大小总是在Java中修复。 通常不使用数组,而是在这里使用List的实现 – 通常是ArrayList ,但是有很多其他选择可用。

当然,您可以从列表中创建一个数组作为最后一步 – 或者只是更改方法的签名以返回List开始。

请改用LinkedList 。 比,你可以根据需要创建一个数组。

使用ArrayList。 数组大小在java中是固定的

只需返回任何类型的列表。 ArrayList会好的,它不是静态的。

  ArrayList list = new ArrayList(); for (yourClass item : yourArray) { list.add(item); } 

如果你这样做,你实际上只能声明一个数组,而不是使用任何集合。

 ClassName[] arrayname; ... arrayname = new ClassName[10*15*100*variable+CONSTANT+Math.ciel(Math.Random())]; 

这是你的课程代码。 但这也包含了很多重构。 请为每个添加一个而不是。 欢呼:)

  static int isLeft(ArrayList left, ArrayList right) { int f = 0; for (int i = 0; i < left.size(); i++) { for (int j = 0; j < right.size(); j++) { if (left.get(i).charAt(0) == right.get(j).charAt(0)) { System.out.println("Grammar is left recursive"); f = 1; } } } return f; } public static void main(String[] args) { // TODO code application logic here ArrayList left = new ArrayList(); ArrayList right = new ArrayList(); Scanner sc = new Scanner(System.in); System.out.println("enter no of prod"); int n = sc.nextInt(); for (int i = 0; i < n; i++) { System.out.println("enter left prod"); String leftText = sc.next(); left.add(leftText); System.out.println("enter right prod"); String rightText = sc.next(); right.add(rightText); } System.out.println("the productions are"); for (int i = 0; i < n; i++) { System.out.println(left.get(i) + "->" + right.get(i)); } int flag; flag = isLeft(left, right); if (flag == 1) { System.out.println("Removing left recursion"); } else { System.out.println("No left recursion"); } }