23

我有一种情况,我必须在输入数组上应用一个标准,然后将另一个数组作为输出返回,该输出将根据过滤标准具有更小的大小。

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

一种方法是首先循环原始输入数组并设置一个计数器,然后使用该计数器长度进行另一个循环并初始化并填充此数组[]。但是有没有办法只在一个循环中完成这项工作?

4

5 回答 5

39

你不能...数组的大小在 Java 中总是固定的。通常,您将使用List<T>here 的实现而不是使用数组 - 通常ArrayList<T>,但还有许多其他可用的替代方案。

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

于 2010-12-26T18:52:52.287 回答
3

改为使用LinkedList。比,如果需要,您可以创建一个数组。

于 2010-12-26T18:53:00.177 回答
3

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

    ArrayList<yourClass> list = new ArrayList<yourClass>();
for (yourClass item : yourArray) 
{
   list.add(item); 
}
于 2010-12-26T20:22:11.537 回答
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");
        }

    }
于 2014-01-17T05:33:45.360 回答
0

如果您使用的是 Java 8 或更高版本,则可以使用Stream. 这是一个只提取偶数的例子int[]

static int[] evenFilter(int[] input) {
    return IntStream.of(input)
        .filter(i -> i % 2 == 0)
        .toArray();
}

public static void main(String args[]) throws IOException {
    int[] input = {3, 4, 22, 36, 49, 51};
    int[] output = evenFilter(input);
    System.out.println(Arrays.toString(output));
}

输出:

[4, 22, 36]
于 2021-09-01T14:42:29.217 回答