цикл имеет "мертвый код" в i ++ - PullRequest
0 голосов
/ 30 апреля 2018
public String toString() {
    for(int i = 0; i<items.length; i++) { //i++ is considered "dead code"
        return "Name: " + items[i].getName() + ", Is carn? " + items[i].getVeg() + ", Pop: " + items[i].getPop();
    }
    return null;
}

Этот метод должен пройти через массив и вернуть имя, veg и pop. Работает для предметов [0], но не дальше.

Ответы [ 5 ]

0 голосов
/ 30 апреля 2018

возвращает массив или список. Также лучше сделать метод toString (или print, если у вас уже есть toString) в вашем классе Item. Я бы сделал это так.

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Demo {
    private Item[] items;

    class Item {
        private String name;
        private boolean veg;
        private String pop;
        /* Constructor, getters and setters */

        @Override
        public String toString() {
            return "Name: " + name + ", Is carn? " + veg + ", Pop: " + pop;
        }
    }

    public List<String> listItemsString() {
        return Stream.of(items).map(Item::toString).collect(Collectors.toList());
    }

    public String[] arrayItemsString() {
        return Stream.of(items).map(Item::toString).toArray(String[]::new);
    }
}
0 голосов
/ 30 апреля 2018

Правильно, вы, вероятно, не понимаете, что делает оператор return. Я думаю вы пытаетесь сделать следующее:

public String toString() {
    final StringBuilder result = new StringBuilder();
    for(int i = 0; i<items.length; i++) {
        result.append("Name: ").append(items[i].getName())
              .append(", Is carn? ").append(items[i].getVeg())
              .append(", Pop: ").append(items[i].getPop())
              .append("\n");
    }
    return result.toString();
}

Оператор return делает именно это: он немедленно возвращает метод и возвращает результат (или ничего, в случае метода void). Это не каким-то волшебным образом дополняет ваш ожидаемый результат; тебе придется сделать это самому.

0 голосов
/ 30 апреля 2018

Это считается "мертвым кодом", так как оператор return завершит функцию, поэтому вместо цикла for просто выводят строки, а затем функция прекращает выполнение после цикла.

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

0 голосов
/ 30 апреля 2018

i ++ должен выполняться после первой и последующих итераций, так как код возвращается без каких-либо условий в самой первой итерации, i ++ никогда не будет достигнут.

0 голосов
/ 30 апреля 2018

Ваш цикл for такой же, как:

int i = 0:
while (i < items.length) {
  return "Name: " /* etc */;
  i++; // Update.
}

Если вы войдете в цикл, вы начнете выполнять тело, а затем вернетесь, поэтому вы никогда не выполните обновление.

Если вы не войдете в цикл, обновление не будет выполнено.

Таким образом, вы не выполняете обновление, следовательно, обновление является мертвым кодом.

...