@STVDI

JAVA, можете ли вы объяснить странное для меня for(: );?

Хотелось бы спросить, что в данной части кода из себя представляет Noodle noodle в for (Noodle noodle : allTheNoodles).
Я понимаю, что это что-то вроде "Для всех noodle в массиве allTheNoodles". Но я не могу понять, почему тут два раза noodle. За что отвечает первое слово, а за что второе? Одно с большой буквы, другое с маленькой.
Ранее при обучении я знакомился только с такого типом for: for (int age:ages). А тут для меня что-то непонятное.
P.S. Заблаговременно прошу прощение за легкие вопросы, мне как новичку, они не кажутся очевидными.
К слову, в коде ниже не показано 3 класса, которые extends класс Noodle. Это Spaghetti, Ramen, Pho

class Noodle {
  
  protected double lengthInCentimeters;
  protected double widthInCentimeters;
  protected String shape;
  protected String ingredients;
  protected String texture = "brittle";
  
  Noodle(double lenInCent, double wthInCent, String shp, String ingr) {
    
    this.lengthInCentimeters = lenInCent;
    this.widthInCentimeters = wthInCent;
    this.shape = shp;
    this.ingredients = ingr;
    
  }
  
  public String getCookPrep() {
    
    return "Boil noodle for 7 minutes and add sauce.";
    
  }
  
  
  public static void main(String[] args) {
    
    Noodle spaghetti, ramen, pho;
    
    spaghetti = new Spaghetti();
    ramen = new Ramen();
    pho = new Pho();
    
    // Add your code below:
    Noodle[] allTheNoodles = {spaghetti, ramen, pho};
    
    for (Noodle noodle : allTheNoodles) {
      
      System.out.println(noodle.getCookPrep());
      
    }
    
  }
  
}
  • Вопрос задан
  • 406 просмотров
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Noodle noodle : allTheNoodles
Условно можно прочитать как: переменная noodle в массиве объектов Noodle[].
Это тип цикла for each, где итерируя вы получаете каждый объект содержащийся в массиве Noodle[]
А чтобы обратиться к соответствующему объекту в цикле вы можете использовать переменную noodle. Т.е. в каждой итерации этой переменной будет присвоен следующий объект содержащийся в массиве
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@DenisMakogon
Вышеуказанные ответы не показали одну ключевую особенность, которая доступна на данный момент, а именно использование var в схеме for.
Нет абсолютно никакой необходимости в том, чтобы явно определять тип переменной, можно просто обойтись следующей конструкцией: for (var noodle : allTheNoodles)

Более того, жизнь эффективно упрощается, когда вы переходите от массивов к коллекциям и потокам (streams api), в этом случае появляется прямой доступ к лямбдам и параллелизации:
Noodle[] allTheNoodles = {spaghetti, ramen, pho};
Stream.of(allTheNoodles).parallelStream().forEach(noodle -> { System.out.println(noodle.getCookPrep()) });
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы