Я генерирую строку в этом коде, а затем применяю к ней подстроку.
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 из строки, но если кто-нибудь может предложить менее тупое решение, я был бы признателен.
Спасибо всем за ваше время и внимание!
Вероятно, потому, что output[] был инициализирован слишком большим, и теперь вы пытаетесь получить данные элемента, которые никогда не применялись к этому конкретному индексу. Используйте отладчик, чтобы увидеть, что происходит.
Ваш код добавляет пробел после печати, а не до того, как говорится в сообщении. И в то же время он печатает null, потому что outputs[i] еще не было присвоено значение.
В такой ситуации... "Используйте отладчик, чтобы посмотреть, что происходит". - .... или просто внимательно прочитайте код, исследуя его с точки зрения того, что код на самом деле будет делать, а не того, что вы хотите, чтобы он делал.
Строка "And it is now: "
заканчивается пробелом. Без пробела было бы "And it is now:"
. Так что пробел между ":"
и "null"
исходит из части "And it is: "
, а не части outputs[i]
.
@meriton Извините, я думал, что вы не ответили, и удалил его до того, как увидел этот комментарий. Позже я понял, что ошибался, когда обдумывал это в своем редакторе. Спасибо за ваше время, сэр!
Печатный вывод поступает из ветки else
.
Над else
, в котором установлено outputs[i]
, нет пути кода, поэтому его значение равно null
.
Вы не получаете NullPointerException
в операторе печати или в outputs[i] += " ";
из-за особенностей того, как оба этих оператора обрабатывают нулевые значения.
println
и конкатенация всегда делают String.valueOf()
для своих аргументов. Значение null String в обоих случаях становится строкой "null"
.
@meriton Вы правы, конечно. Я был неосторожен :-( Я исправлю. (Спасибо)
Кажется, я понимаю, по сути: поскольку я не придал ему значения, по умолчанию он равен нулю? Я думал, что добавление к нему значения, такого как " ", приведет к удалению нулевого значения, потому что оно будет обновляться, чтобы понять, что оно больше не является нулевым. Спасибо!
что такое ввод и строка?