[java]I';我创建了一个adding类,它进行了编译,但没有任何get';已将添加到数组列表中

[java]I';我创建了一个adding类,它进行了编译,但没有任何get';已将添加到数组列表中,java,class,arraylist,user-input,Java,Class,Arraylist,User Input,我创建了多个类,我想做的部分工作是创建一个太阳系,允许用户输入有关行星的信息,并不断将它们添加到阵列列表中,当他们添加完行星后,会显示其太阳系的摘要。 我想根据他们输入的轨道半径显示哪个行星离太阳最近。因此,为了简化这个过程,我决定创建一个addPlanet()方法,该方法将扫描数组列表,并根据轨道半径以正确的顺序添加新行星 public void addPlanet(Planet p) { if (solarSystem.size() == 0) { //solarSystem is th

我创建了多个类,我想做的部分工作是创建一个太阳系,允许用户输入有关行星的信息,并不断将它们添加到阵列列表中,当他们添加完行星后,会显示其太阳系的摘要。 我想根据他们输入的轨道半径显示哪个行星离太阳最近。因此,为了简化这个过程,我决定创建一个addPlanet()方法,该方法将扫描数组列表,并根据轨道半径以正确的顺序添加新行星

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;
        }  
     }
  }
这是我的整个太阳系课程

   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;   
   }
}
我如何修复我的代码,以便当用户输入一个行星时,它实际上被添加到我的行星数组列表中

解决方案:我忘了添加

solarSystem.addPlanet(a);

在创造了新的星球之后

查看添加行星中的逻辑


前面提到的第一件事是,for循环容易出现
indexootfboundsexception
,因此首先更改代码的哪一部分控制用户输入?如果用户添加的行星没有添加到列表中,那么您可能会将它们添加到差异
SolarSystem
实例中。如果看不到这部分代码,我们无法确定。您的
addPlanet()
方法有缺陷。如果新的
行星
不是第一颗行星,并且它的轨道比所有现有行星都大,那么当
i=solarSystem.size()
时,您的代码将导致
indexootfboundsException
。如果您更改
@PM77-1,我只包含了用户输入客户端class@Andreas在我的客户端代码中,我只创建了一个solarSystem实例,因此我不确定新行星将添加到哪里。@Minseo没问题,我很高兴它为您排序。
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!"); 
      }         
 }
solarSystem.addPlanet(a);
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);
           return; // adding planet is complete so we will exit the method here
        }  
     }
     // if we're here, the planet must be larger than all others
     // so we will add the planet at the end of the array
     solarSystem.add(p);
  }
}