23

入力配列に基準を適用し、フィルタリング基準に基づいてサイズが小さくなる別の配列を出力として返す必要がある状況があります。

ここでの問題は、フィルタリングされた結果のサイズがわからないため、特定の値で配列を初期化できないことです。また、array.length; を使用しているため、値が null になる大きなサイズにはしたくありません。後で。

1 つの方法は、最初に元の入力配列をループしてカウンターを設定し、次にそのカウンター長で別のループを作成し、この配列を初期化して埋めることです[]。しかし、とにかく1回のループで仕事をすることはありますか?

4

5 に答える 5

39

できません... Java では、配列のサイズは常に固定されています。通常、配列を使用する代わりに、List<T>通常は hereの実装を使用しArrayList<T>ますが、他の多くの代替手段が利用可能です。

もちろん、最後のステップとしてリストから配列を作成することもできます。または、メソッドのシグネチャを変更して、List<T>最初に a を返すこともできます。

于 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

これがあなたのクラスのコードです。しかし、これには多くのリファクタリングも含まれています。for ではなく for each を追加してください。乾杯 :)

 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 に答える