доступ к объектам в массиве Java

У меня возникли проблемы с пониманием того, как установить и получить объекты в массиве. Пожалуйста, держите его основным / простым; я новичок.
Я не могу использовать список, так как я еще не в своем классе java. Предполагается использование регулярных массивов.

Я создаю программу, которая создает объекты Солнечной системы и помещает объекты планеты в массив объектов Солнечной системы. Я должен быть в состоянии вставить планету по индексу, а также получить ее по индексу.

Получение обычной информации об объекте было простым, но после добавления массивов. Стало тяжело. Я лучше понимаю, когда могу понять, как и почему что-то работает. Вот мой код. Заранее большое спасибо!

Класс Планеты

public class Planet {

    // private fields
    private String planetName;
    private int numMoons;


    // param constructor
    public Planet(String n, int m){
        planetName = n;
        numMoons = m;

    }

    public String toString(){
        return planetName + " " + numMoons;
    }



    public void setPlanetName(String n){
        this.planetName = n;

    }

    public String getPlanetName(){
        return planetName;

    }

    public void setNumMoons(int m){
        this.numMoons = m;

    }

    public int getNumMoons(){
        return numMoons;

    }
}

Вот класс SolarSystem

package project03;

public class SolarSystem {

    private String solarSystemName;
    private Planet[] allPlanets = new Planet[8];
    private int numPlanets;

    public SolarSystem(String ss, int np){
        solarSystemName = ss;
        numPlanets = np;


    }

    public void setSolarSystemName(String ss){
        solarSystemName = ss;

    }

    public String getSolarSystemName(){
        return solarSystemName;
    }

    /*public void setAllPlanets(String ss){
        solarSystemName = ss;

    }

    public String getSolarSystemName(){
        return solarSystemName;
    }
*/

}

Наконец, вот мой класс водителя, который содержит основной метод

package project03;

public class Driver {

    public static void main(String[] args) {


        // creates planet object
        Planet Mercury = new Planet("Mercury", 0);
        Planet Venus = new Planet("Venus", 0);
        Planet Earth = new Planet("Earth", 1);
        Planet Mars = new Planet("Mars", 2);
        Planet Jupiter = new Planet("Jupiter", 67);
        Planet Saturn = new Planet("Saturn", 62);
        Planet Uranus = new Planet("Uranus", 27);
        Planet Neptune = new Planet("Neptune", 14);



        SolarSystem ourSolarSystem = new SolarSystem("Sol-System", 8);

        System.out.println("Planet name is : " + ourSolarSystem.getSolarSystemName());
        //System.out.println("Moon number is :" + Mercury.getNumMoons());
    }



}

3 ответа

  1. Вам не хватает нескольких методов из вашего SolarSystemкласса

    public void setPlanet (Planet planet, int pos) {
       allPlanets [pos] = planet;  // pos is zero based
    }
    
    public Planet getPlanet (int pos) {
       return allPlanets [pos];  // pos is zero based
    }
    

    После этого вы можете использовать его как

    ourSolarSystem.setPlanet (Mercury, 0);
    
  2. Set Planet

    public void setPlanet(int index,String planetName,int numOfMoon) 
    {
       //check array bounday
       allPlanets[index].setPlanetName(planetName);
       allPlanets[index].setNumMoons(numOfMoon);
    }
    

    Получить Планета

    public Planet getPlanet(int index) 
    {
       //Check array bounday
       return allPlanets[index];
    }
    

    Вы можете узнать, используя массив объектов здесь [ http://www.javawithus.com/tutorial/array-of-objects%5D

  3. Чтобы добавить объекты во внутренний массив, необходимо добавить методы в класс Солнечной системы.

    чтобы заполнить массив, вам нужно 2 вещи
    1. Размер
    2. Элементы.

    В вашем классе Солнечной системы нет никаких положений на данный момент. Размер жестко закодирован до 8, что прекрасно для данного примера, в идеале его нужно передать в конструктор при создании Солнечной системы.
    Игнорируя это на мгновение, вы должны добавить метод в класс, чтобы добавить планету.

    Так как это для вашего обучения, я не добавляю точный код, просто алгоритм

    public void addPlanet(Planet p, int pos){
    //check pos is less than array size
    // add planet to the index pos if pos is less than size.
    }
    

    Вы также можете создать массив снаружи и добавить его на солнечную планету

    public void addPlanets(Planet[] planetArray){
    // replace current planet array with the array passed in input
    }
    

    Массив снаружи можно легко создать

    Planet[] planetArray = new Planet[8];
    planetArray[0] = Mercury ;
    
    // and so on.