Подтвердить что ты не робот

Как я могу инициализировать массив, не зная его размера?

У меня есть ситуация, когда я должен применять критерии для входного массива и повторно использовать другой массив в качестве вывода, который будет иметь меньший размер, основанный на критериях фильтрации.

Теперь проблема в том, что я не знаю размер отфильтрованных результатов, поэтому я не могу инициализировать массив с определенным значением. И я не хочу, чтобы он был большим размером, будет null, потому что я использую array.length; позже.

Один из способов состоит в том, чтобы сначала закодировать исходный массив ввода и установить счетчик, а затем сделать еще один цикл с длиной этого счетчика и инициализировать и заполнить этот массив []. Но так или иначе, чтобы выполнить эту работу только в одном цикле?

4b9b3361

Ответ 1

Вы не можете... размер массива всегда фиксируется в Java. Обычно вместо использования массива вы должны использовать реализацию List<T> здесь - обычно ArrayList<T>, но с множеством других доступных альтернатив.

Вы можете создать массив из списка в качестве конечного шага, конечно, или просто изменить подпись метода для возврата List<T> для начала.

Ответ 2

Используйте LinkedList вместо этого. Затем, при необходимости, можно создать массив.

Ответ 3

Использовать ArrayList. размер массива исправлен в java

Ответ 4

Просто верните список. ArrayList будет в порядке, его не статично.

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

Ответ 5

Если вы сделаете это так, вы можете просто объявить массив, а не использовать какие-либо коллекции.

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

Ответ 6

Вот код для вас. но это также содержит много рефакторинга. Пожалуйста, добавьте для каждого, а не для. приветствия:)

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

    }