Как динамически инициализировать массив в Java? - PullRequest
0 голосов
/ 18 мая 2018

Я попытался динамически инициализировать массив и отобразить массив как результат:

import java.util.Scanner;

public class Arrays {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int[] c;
        String cmd="yes";
        while(cmd=="yes") {
            System.out.println("Enter value for c :");
            c=new int[] {in.nextInt()};
            System.out.println("Continue(yes/no)? :");
            cmd=in.next();
        }
        for(int k:c)
            System.out.println(k);
    }
}

Но в цикле for-each (то есть в строке 12 из main ()) он показывает ошибку как «Theлокальная переменная c не может быть инициализирована ".

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Для вашей фактической ошибки компиляции, c может не инициализироваться, если цикл не выполняется.Даже если вы знаете, что это произойдет (поскольку cmd равно "yes", компилятор не идет так далеко).

Вы найдете ответы, которые сначала инициализируют значение, например, ответ Ненг Лю , но, основываясь на вашей логике, вы можете использовать цикл do..while, поскольку ваша логика показывает, что вы хотитепрочитайте хотя бы один раз Scanner.

do{
    System.out.println("Enter value for c :");
    c=new int[] {in.nextInt()};
    System.out.println("Continue(yes/no)? :");
    cmd=in.next();
}while("yes".equals(cmd)); //.equals is needed to compare `String` correctly

Условие в do..while проверяется после выполнения оператора блока (сравните с while, который проверял условие раньше).Таким образом, оператор будет выполнен по крайней мере один раз, так что вы уверены, что c будет инициализирован таким образом.И компилятор это тоже знает.


Поскольку в названии упоминается, что вам нужен массив динамического размера, см. Ответ HamishD , чтобы использовать Collection, который будет расти по мере необходимости.А для более полного сообщения о List см. Размеры динамического массива Java?

0 голосов
/ 18 мая 2018

Остальные ответы верны, вы не инициализировали свой массив.вам нужно было бы вызвать c=null;, чтобы это работало.

Однако, если я правильно понимаю, вы пытаетесь добавить числа в массив неопределенного размера, чего вы не можете сделать в Java.вы должны использовать ArrayList.

вы также использовали == для сравнения значений String, что является большим нет-нет, я изменил его на .equals в своем ответе ниже.

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner in = new Scanner(System.in);
    ArrayList<Integer> c = new ArrayList<>();
    String cmd="yes";
    while(cmd.equals("yes")) {
        System.out.println("Enter value for c :");
        c.add((Integer)in.nextInt());
        System.out.println("Continue(yes/no)? :");
        cmd=in.next();
    }
    for(Integer k:c)
        System.out.println(k);
}
...