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

时间:2010-12-26 18:50:05

标签: java

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

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

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

6 个答案:

答案 0 :(得分:38)

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

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

答案 1 :(得分:3)

请改用LinkedList。比,你可以在必要时创建一个数组。

答案 2 :(得分:3)

使用ArrayList.数组大小在java中修复

答案 3 :(得分:3)

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

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:0)

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

 static int isLeft(ArrayList<String> left, ArrayList<String> 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<String> left = new ArrayList<String>();
        ArrayList<String> right = new ArrayList<String>();


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

    }