Строка продолжает указывать null при печати, даже если в ней есть данные

Я генерирую строку в этом коде, а затем применяю к ней подстроку.

String input = "AnyString"

for(int i = 0; i < input.length(); i++)
//i tracks which line we are on when printing the triangle
{
    int tracker = 0;
    for(int j = 0; j < line.length(); j++)
    //j tracks which "column of the line" we are currently on
    {
        if (i + 1 == input.length()
        //If we are on the the last line of the triangle
        || Math.abs(j - line.length()/2) == i)
        //or if the column we are on is i letters away from the center
        {
            outputs[i] += line.charAt(j);
            out.println("Outputs has been updated with:\n"+line.charAt(i));
            out.println("\nAnd it is now:\n"+outputs[i]);
            tracker = j;
            //tracker will keep track of what the position of the last letter was
        }else{
            out.println("Outputs has been updated with: a space");
            out.println("\nAnd it is now: "+outputs[i]);
            outputs[i] += " ";
        }
    }
    //Where the substring is applied
}

Когда он работает для первого цикла, вывод:

Выходы были обновлены: пробел

И это сейчас: ноль

Любые идеи, почему строка говорит, что она равна нулю, хотя я добавил пробел перед печатью? Я только что заметил, что на выходе есть пробел перед нулевым значением. На данный момент я сделаю заявление об удалении слова null из строки, но если кто-нибудь может предложить менее тупое решение, я был бы признателен.

Спасибо всем за ваше время и внимание!

что такое ввод и строка?

lostbard 21.12.2020 02:22

Вероятно, потому, что output[] был инициализирован слишком большим, и теперь вы пытаетесь получить данные элемента, которые никогда не применялись к этому конкретному индексу. Используйте отладчик, чтобы увидеть, что происходит.

DevilsHnd 21.12.2020 02:31

Ваш код добавляет пробел после печати, а не до того, как говорится в сообщении. И в то же время он печатает null, потому что outputs[i] еще не было присвоено значение.

meriton 21.12.2020 02:35

В такой ситуации... "Используйте отладчик, чтобы посмотреть, что происходит". - .... или просто внимательно прочитайте код, исследуя его с точки зрения того, что код на самом деле будет делать, а не того, что вы хотите, чтобы он делал.

Stephen C 21.12.2020 03:42

Строка "And it is now: " заканчивается пробелом. Без пробела было бы "And it is now:". Так что пробел между ":" и "null" исходит из части "And it is: ", а не части outputs[i].

meriton 21.12.2020 18:14

@meriton Извините, я думал, что вы не ответили, и удалил его до того, как увидел этот комментарий. Позже я понял, что ошибался, когда обдумывал это в своем редакторе. Спасибо за ваше время, сэр!

Marlon Arancibia 22.12.2020 02:32
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Управление транзакциями JDBC - это мощная функция, которая позволяет рассматривать группу операций с базой данных как единую единицу работы. Оно...
Выполнение HTTP-запроса с помощью Spring WebClient: GET
Выполнение HTTP-запроса с помощью Spring WebClient: GET
WebClient - это реактивный веб-клиент, представленный в Spring 5. Это реактивное, неблокирующее решение, работающее по протоколу HTTP/1.1.
Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
0
6
289
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Печатный вывод поступает из ветки else.

Над else, в котором установлено outputs[i], нет пути кода, поэтому его значение равно null.

Вы не получаете NullPointerException в операторе печати или в outputs[i] += " "; из-за особенностей того, как оба этих оператора обрабатывают нулевые значения.

println и конкатенация всегда делают String.valueOf() для своих аргументов. Значение null String в обоих случаях становится строкой "null".

@meriton Вы правы, конечно. Я был неосторожен :-( Я исправлю. (Спасибо)

Jim Garrison 21.12.2020 02:42

Кажется, я понимаю, по сути: поскольку я не придал ему значения, по умолчанию он равен нулю? Я думал, что добавление к нему значения, такого как " ", приведет к удалению нулевого значения, потому что оно будет обновляться, чтобы понять, что оно больше не является нулевым. Спасибо!

Marlon Arancibia 21.12.2020 09:44

Другие вопросы по теме