gpt4 book ai didi

Java - 通过 toString() 方法以特定格式打印 ArrayList 对象

转载 作者:行者123 更新时间:2023-11-30 05:52:07 25 4
gpt4 key购买 nike

我正在制作一个太阳系模型,该模型通过使用类来使用不同的太阳系和行星组。我选择使用数组列表来存储太阳系内行星的每个物体,尽管现在我正在努力以合适的格式输出数据。

我在 toString() 方法中寻找的格式是“行星 X 的质量为 A 个地球,距其恒星的 BAU 为 C 年,轨道为 C 年:可能适合居住吗?” D'

我尝试使用 for 循环来打印每个行星,但不相信这是正确的方法,因为返回会导致循环停止。非常感谢

SolarSystem.java

import java.util.ArrayList;
public class SolarSystem {

private String systemName;
private double systemLuminosity;


public SolarSystem(String name, double luminosity) {
this.systemName = name;
this.systemLuminosity = luminosity;
}

ArrayList<Planet> list = new ArrayList<>();

public void addPlanet(String name, double mass, double distance) {

list.add(new Planet(name, mass, distance, systemLuminosity));

}

public void planetProperties() {

}

public String toString() {
System.out.println(list.size());
String results = "+";
for (Planet planet : list) {
results += planet.getName(); //if you implement toString() for Dog then it will be added here
}
return results;
}
}

Planet.java

    public class Planet {

private String planetName;
private double planetMass;
private double distanceFromStar;
private double orbitalPeriod;
private String isHabitable;

public Planet(String name, double mass, double distance, double systemLuminosity) {

setName(name);
setMass(mass);
setDistanceFromSun(distance);
setOrbitalPeriod(distance);
setIsHabitable(mass, distance, systemLuminosity);


}

public void setName(String name) {
planetName = name;
}

public String getName() {
return planetName;
}

public void setMass(double mass) {
planetMass = mass;
}

public double getMass() {
return planetMass;
}

public void setDistanceFromSun(double distance) {
distanceFromStar = distance;
}

public double getDistanceFromStar() {
return distanceFromStar;
}

public void setOrbitalPeriod(double distance) {
orbitalPeriod = Math.sqrt(distance*distance*distance);
}

public double getOrbitalPeriod() {
return orbitalPeriod;
}

public void setIsHabitable(double mass, double distance, double luminosity) {
if (mass >= 0.6 && mass <= 7.0) {
if ((distance >= 0.75 * Math.sqrt(luminosity)) && (distance <= 2.0 * Math.sqrt(luminosity))) {
isHabitable = "yes";
} else {
isHabitable = "no";
}
} else {
isHabitable = "no";
}

}

public String getIsHabitable() {
return isHabitable;
}
}

Main.java

public class Main {

public static void main(String[] args) {

//Create our solar system
SolarSystem ourSystem = new SolarSystem("Our System",1.0);

//Add planets in our solar system
ourSystem.addPlanet("Mercury", 0.055, 0.387);
ourSystem.addPlanet("Venus", 0.815, 0.723);
ourSystem.addPlanet("Earth", 1.0, 1.0);
ourSystem.addPlanet("Mars", 0.107, 1.52);
ourSystem.addPlanet("Jupiter", 317.8, 5.20);
ourSystem.addPlanet("Saturn", 95.2, 9.58);
ourSystem.addPlanet("Uranus", 14.5, 19.20);
ourSystem.addPlanet("Neptune", 17.1, 30.05);

System.out.println(ourSystem.toString());



}
}

最佳答案

您需要在 Planet 类中实现 toString() 方法,例如:

class Planet {
private String planetName;
private double planetMass;
private double distanceFromStar;
private double orbitalPeriod;
private String isHabitable;

@Override
public String toString() {
return String.format(
"Planet %s has a mass of %f Earths, is %f from its star, and orbits in %f years: could be habitable? %s%n",
this.planetName, this.planetMass, this.distanceFromStar, this.orbitalPeriod, this.isHabitable);
}

}

然后在您的 SolarSystem 类中,您可以创建一个包含类似内容的列表,您已经拥有该部分几乎正确的部分,但我已将 getName 更改为 toString :

@Override
public String toString() {
StringBuilder buf = new StringBuilder();

for (Planet planet : list) {
buf.append(planet);
}

return buf.toString();
}

关于Java - 通过 toString() 方法以特定格式打印 ArrayList 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53725503/

25 4 0