#java
#java
Вопрос:
В моем классе есть StringBuffer, который удаляет определенные символы, если выполняются условия в инструкции IF, и печатает инструкцию. Однако это может повторяться много раз. Если выполнено второе условие, первая инструкция будет распечатана БЕЗ удаления символов.
Есть ли способ обойти это? Ниже приведен мой код.
if (status == 1 amp;amp; item == item1[1]){
item1[1] = "*";
w = sb1.append(item1[1] "[" item2[1] "] ");
sb1.delete(1,4);
}else if (status == 1 amp;amp; item == item1[2]){
item1[2] = "*";
x = sb1.append(item1[2] "[" item2[2] "] ");
sb1.delete(1,4);
}else if(status == 1 amp;amp; item == item1[3]){
item1[3] = "*";
y = sb1.append(item1[3] "[" item2[3] "] ");
sb1.delete(1,4);
}
return w.toString() x.toString() y.toString() z.toString();
Чего я пытаюсь достичь, так это следующего:
У меня есть toString, который состоит из:
элемент1[1] «[«элемент2[1]»] » элемент1[2] » [» tem2[2] «]»
Я хочу сделать это:
если элемент1 помечен как принятый, он будет изменен на «*» и удалит элемент2[1] и [ ] вокруг него, а затем вернет его как:
eg: item1[2] = x
item2[2] = 1
* x[1]
( * used to be item1[1] )
но если циклы повторяются, мой текущий класс выполняет это:
*[] *[1]
я хочу, чтобы это было:
* *
Когда цикл завершен
Комментарии:
1. В чем проблема вашего кода?
2. Я нахожу ваш вопрос очень сложным для понимания. Вы не указываете, в чем заключается ваша проблема, и вы говорите о печати, когда в вашем коде нет инструкций print.
3. Вопрос не ясен. Непонятен код. Пожалуйста, приведите пример ввода и ожидаемых результатов.
4. Мне кажется, вам не нужны w, x, y (, z), поскольку все они содержат только ссылку на sb1. На самом деле вы возвращаете sb1 четыре раза (если z также содержит ссылку на sb1)
5. Насколько я могу видеть, вы присваиваете sb1 значениям w, x, y . Вы пробовали запускать свой proram в отладчике, чтобы посмотреть, что он делает?
Ответ №1:
Общая проблема: item
выглядит как String
, item[]
как String[]
. Не используйте ==
со строками, иногда это приведет к неожиданному результату. Используйте equals()
вместо:
if (status == 1 amp;amp; item.equals(item1[1])) {
Используйте этот шаблон и для других условных проверок.
(и добавьте тест / обработчик, для item == null
которого сейчас было бы необходимо)
Другое улучшение: замените StringBuffer
на StringBuilder
и не объединяйте строки при передаче их в append. Не для исправления ошибки, а для повышения производительности:
w = sb1.append(item1[1]).append("[").append(item2[1]).append("] ");
Ответ №2:
Ваш код выглядит подозрительно. Давайте проведем трехкратную проверку, является ли ‘status == 1’ (есть ли скрытое логическое значение в переменной, которое пытается выйти?). И добавьте немного свежего воздуха между токенами, чтобы упростить задачу по их разделению для глаз:
if (status == 1)
{
if (item.equals (item1[1]))
{
item1[1] = "*";
w = sb1.append (item1[1] "[" item2[1] "] ");
sb1.delete (1, 4);
}
else if (item.equals (item1[2]))
{
item1[2] = "*";
x = sb1.append (item1[2] "[" item2[2] "] ");
sb1.delete (1, 4);
}
else if (item.equals (item1[3]))
{
item1[3] = "*";
y = sb1.append (item1[3] "[" item2[3] "] ");
sb1.delete (1, 4);
}
}
return (w.append (x). append (y). append (z)).toString ();
//
Похоже, что 3 раза одно и то же утверждение, просто повторяется через 1,2,3 и w, x, y. Я также использовал append
в последней строке и просто поместил ‘toString ()’ в конечный результат.
Давайте создадим цикл из 3 инструкций:
if (status == 1)
{
for (int i = 1; i < 4; i)
{
if (item.equals (item1[i]))
{
item1[i] = "*";
w = sb1.append (item1[i] "[" item2[i] "] ");
sb1.delete (1, 4);
}
}
}
return (w.append (w). append (w). append (w)).toString ();
В зависимости от вашего кода, побочных эффектов, потоков и так далее, это может привести к чему-то другому, но я так не думаю. Особенно я не знаю, что такое w, x, y по умолчанию, если они не назначены в этой части кода. И код выглядит так, как будто элемент либо равен item1[1], либо item1[2], либо исключительно item1[3]. Но это может быть равно всем 3, и тогда цикл будет выполняться 3 раза вместо 1 раза.
Однако item1 / item2 — это запах кода. Это пахнет как 2-тусклый массив или плохо продуманная ориентация объекта (item.color, item.name или что-то в этом роде).