Как использовать объявление массива вне цикла while, но инициализировать его в цикле while? - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь использовать массив в своем коде, но он инициализируется по-разному в зависимости от некоторых других факторов.

char[] d;
char[] c;
if (cIP.length>6&&cIP.length<16)
{
    IP=true;
    if (cIP[cIP.length-2]=='.')
    {
        d= new char[1];
        d={cIP[cIP.length-1]};
        c=new char[cIP.length-2];
        for (int i=0;i!=cIP.length-2;i++)
        {
            c[i]=cIP[i];
        }


    }
}

Это дает мне ошибку «Синтаксическая ошибка на токенах, удаляйте эти токены», когдаЯ говорю, как долго я хочу, чтобы массивы были .. Это также говорит, что константы массива могут использоваться только в инициализаторах ..

1 Ответ

0 голосов
/ 10 октября 2019

Я немного упростил ваш код и дал ему контекст "тестирования" (простой основной).

Я разместил соответствующие комментарии, чтобы вы могли легче отслеживать код.

public static void main(String[] args) {
    System.out.println("if statement not triggered");
    invokeMethod(new char[]{'a', 'b', 'c', 'd', 'e'});

    System.out.println("if statement triggered");
    invokeMethod(new char[]{'a', 'b', 'c', 'd', 'e', '.', 'g'});
}

private static void invokeMethod(char[] cIP) {
    // a suggestion is to initialize your arrays to default values 
    // (i.e. if statement is not triggered). In this case, I've 
    // initialized them to a empty arrays.
    char[] d = new char[]{};
    char[] c = new char[]{};

    // since you are using cIP.length several times, 
    // assign it to a variable for easier understanding/usage
    int size = cIP.length;
    if (size > 6 && size < 16) {
        if (cIP[size - 2] == '.') {
            // You can use this one-liner to set d to one character.
            // Essentially, your code, just merged into one-liner
            d = new char[]{cIP[size - 1]};
            // instead of char-by-char copying in a loop
            // you can use Arrays.copyOf()
            c = Arrays.copyOf(cIP, size - 2);
        }
    }

    System.out.println(c);
    System.out.println(d);
}

Также c, d и cIP являются бессмысленными именами. Попробуйте дать вашим переменным более значимые имена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...