Чтобы повторить другие постеры, вам нужно сначала определить собственный метод toString () в классе планеты.Пожалуйста, смотрите мои предложения ниже.Они представлены как псевдокод, набранный на лету, а не как реальный код (поскольку может быть несколько вещей, которые могут не скомпилироваться.)
Но псевдокод должен дать представление о возможномрешение.Напишите мне, если у вас все еще есть вопросы.
Исходя из ваших требований:
Формат, который я ищу в методе toString (): «Планета X имеет массу AЗемли, BAU от ее звезды, и орбиты в C лет: могли бы быть обитаемыми?D '
Ваш метод Planet.toString может выглядеть следующим образом (это псевдокод, который не обязательно должен быть компилируемым, но вы понимаете его суть.)
public class Planet {
/* your class as it is, with the
* addition of a possible toString
* implementation */
public String toString(){
return String.format(
"Planet: %s, " +
"mass: %f, " +
"distance: %f, " +
"orbital period: %f, " +
"habitable: %b"
this.getName(),
this.getMass(),
this.getDistanceFromStar(),
this.getOrbitalPeriod(),
this.getIsHabitable());
}
}
Тогда ваш класс SolarSystem должен иметь соответствующий метод toString, который зацикливается на коллекции планет.Ваш оригинальный метод toString имел правильную идею, я просто расширяю понятие.
public class SolarSystem {
/*
Your solar system class plus some changes
...
*/
public String getName(){
return this.systemName;
}
public String getLuminosity(){
return this.systemLuminosity;
}
public int getPlanetCount(){
return this.list.size();
}
public String toString() {
final StringBuffer buffer = new StringBuffer();
buffer.append(
String.format("System: %s\nLuminosity: %f\nPlanet Count:%d\n",
this.getName(),
this.getLuminosity(),
this.getPlanetCount()
)
);
for (final Planet planet : list) {
buffer.append('\t')
.append(planet.getString())
.append('\n');
}
return buffer.toString();
}
}
Теперь, я немного запутался с этим:
Я пытался использоватьоднако циклы для печати каждой планеты не верят, что это правильный путь, поскольку возврат приведет к остановке цикла.Большое спасибо
Оператор возврата остановит цикл, если возврат будет выполнен внутри цикла.
Оператор возврата будет выполнен в функции, вызываемой внутри цикла , не будет завершение цикла.
То есть возврат завершает только функцию, которая выполняет обратный вызов, а не функции в цепочке вызовов.
Сравните это
for(Foo f : fooList){
if(something){
return; // this will stop the loop
}
}
С этим
for(Foo f : fooList){
if(something){
callThisFu(); // the return within callThisFu *will not* exit the loop
}
}
Надеюсь, это все прояснит.