Я создал несколько классов, и часть того, что я хочу сделать, - это создать солнечную систему и позволить пользователям вводить информацию о планетах и непрерывно добавлять их в список массивов, а когда они завершат добавление планет, отобразит сводку их Солнечная система. Я хотел показать, какой pl anet, в зависимости от введенного ими орбитального радиуса, ближе всего к Солнцу. Поэтому, чтобы сделать это проще, я решил создать метод addPl anet (), который будет сканировать список массивов и добавлять новый pl anet в правильном порядке в зависимости от радиуса орбиты.
public void addPlanet(Planet p) {
if (solarSystem.size() == 0) { //solarSystem is the array list of planets
solarSystem.add(p);
} else {
for (int i = 0; i <= solarSystem.size(); i++) {
if (p.getOrbital() < solarSystem.get(i).getOrbital()) {
solarSystem.add(i, p);
break;
}
}
}
}
Я уже создал три планеты для начала, а затем предложил пользователю ввести информацию о дополнительных планетах. Однако, когда я печатаю сводку о солнечной системе, дополнительные введенные пользователем планеты не отображаются. Сводный код:
System.out.println(solarSystem.toString());
System.out.println("The planet closest to the sun is: " + solarSystem.getClosest());
System.out.println("The total mass of your planets in your solar system is: " + solarSystem.totalMass() + " Earth mass");
Вот мой полный класс Солнечной системы
import java.util.*;
public class SolarSystem {
private static ArrayList<Planet> solarSystem;
private String name;
//Create an array list to add planets
public SolarSystem() {
this.solarSystem = new ArrayList<Planet>();
}
//print out the Solar System
public String toString() {
String system = "The solar system: ";
for (Planet n : solarSystem) {
system += n.getName() + " ";
}
return system;
}
public void addPlanet(Planet p) {
if (solarSystem.size() == 0) {
solarSystem.add(p);
} else {
for (int i = 0; i <= solarSystem.size(); i++) {
if (p.getOrbital() < solarSystem.get(i).getOrbital()) {
solarSystem.add(i, p);
break;
}
}
}
}
public String getClosest() {
return solarSystem.get(0).getName();
}
public double totalMass() {
double mass = 0;
for (Planet p : solarSystem) {
mass += p.getMass();
}
return mass;
}
}
Клиентский класс, где он принимает пользовательский ввод:
import java.util.*;
public class Astronomer {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
SolarSystem solarSystem = new SolarSystem();
Planet earth = new Planet(1, 149.6, 23.5, "Earth", 1);
solarSystem.addPlanet(earth);
System.out.println(earth.toString());
Planet mercury = new Planet(0.055, 41.7, 2.1, "Mercury", 0.24);
solarSystem.addPlanet(mercury);
System.out.println(mercury.toString());
Planet mango = new Planet(0.7, 5.2, "Mango", 0.7);
mango.setOrbital(53.4);
solarSystem.addPlanet(mango);
System.out.println(mango.toString());
System.out.println("The closest planet to the Sun is " + solarSystem.getClosest());
System.out.println("Would you like to add additional planets? ");
String add = scan.next();
while(add.substring(0, 1).equalsIgnoreCase("y")) {
System.out.println("Enter the name of the planet: ");
String name = scan.next();
System.out.println("Enter the mass of the planet in terms of Earth mass: ");
double mass = scan.nextDouble();
System.out.println("Enter the orbital radius in million km: ");
double radius = scan.nextDouble();
System.out.println("Enter the measure of axis tilt in degrees: ");
double axis = scan.nextDouble();
System.out.println("Enter the period of the planet in years: ");
double period = scan.nextDouble();
Planet a = new Planet(mass, radius, axis, name, axis); //how to make it so it creates a new planet and not overwrite planet already created
System.out.println(a.toString());
System.out.println("Would you like to add additional planets? ");
add = scan.next();
}
System.out.println(solarSystem.toString());
System.out.println("The planet closest to the sun is: " + solarSystem.getClosest());
System.out.println("The total mass of your planets in your solar system is: " + solarSystem.totalMass() + " Earth mass");
System.out.println("Goodbye!");
}
}
Как Могу ли я исправить свой код так, чтобы, когда пользователь вводит pl anet, он фактически добавлялся в мой список планет в массиве?
РЕШЕНИЕ: Я забыл добавить
solarSystem.addPlanet(a);
после создания нового pl anet.