【问题标题】:Creating an ArrayList that combines fields from two objects? [closed]创建一个组合来自两个对象的字段的 ArrayList? [关闭]
【发布时间】:2018-04-12 21:22:33
【问题描述】:

我是 Java 新手,正在使用 BlueJ。

程序上下文概述。

我正在尝试创建一个俱乐部数据库(数组列表,而不是实际数据库),用户可以在其中将新登山者(姓名、年龄、性别)以及他们攀登的山峰(姓名、高度)添加到数组列表中。

我创建了 Climber 类和 Mountain 类。我还为登山者创建了一个 ArrayList,并且可以添加到这个数组中。我的问题是.. 我怎样才能将登山者添加到登山者 ArrayList 中,并能够同时添加他们攀登过的山峰及其高度?

添加登山者的方法需要同时访问Climber和Mountain类?我是否需要将 Mountain 类的字段传递给 Climber?

虽然感谢您使用解决问题的代码,但如果我显示在正确的方向上会很有帮助,以便我可以更深入地理解它!

谢谢。

 import java.util.ArrayList;
import java.util.Scanner;
/**
 * Write a description of class ClubStats here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class ClubStats
{
    // An ArrayList for storing climber details.
    private ArrayList<Climber> climbers;

    /**
    * Constructor for objects of class ClubStats
    */
    public ClubStats()
   {
       // Initialise instance variables.
       climbers = new ArrayList<Climber>();
    }

    public void addClimber(Climber newName)
    {
        climbers.add(newName);
    }

   public Climber getClimber(String name)
   {
       Climber foundClimber = null;
       int index = 0;
       boolean searching = true;

       while(searching && index < climbers.size()) {
           Climber climber = climbers.get(index);
           if(climber.getName().equals(name)) {
                   searching = false;
                   foundClimber = climber;
                }
                else {
                    System.out.println(name + " not found");
                    index++;
                }
            }
            return foundClimber;
        }

    public void displayList()
    {
        for (int item = 0; item<climbers.size();
        item++) {
            Climber climber = climbers.get(item);
            System.out.println(climber.getName() + (" ") + climber.getAge() + (" ") 
            + climber.getGender());
        }
    }
}


public class Climber
{
    // Instance variables.
    // The climber name.
    private String name;
    // The climber age
    private int age;
    // The climber gender.
    private String gender;


    /**
     * Constructor for objects of class Climber
     */
    public Climber (String newName, int newAge, String newGender)
    {
        // Initialise instance variables.
        name = newName;
        age = newAge;
        gender = newGender;

    }

    /**
     * Accessor method for climber's name.
     */
    public String getName()
    {
        return name;
    }

    /**
     * Set the climber's name.
     */
    public void setName(String newName)
    {
        name = newName;
    }

    /**
     * Accessor method for climber's age.
     */
    public int getAge()
    {
        return age;

    }

    /**
     * Set the climber's age.
     */
    public void setAge(int newAge)
    {
        age = newAge;

    }

     /**
     * Set the climer's gender.
     */
   public String getGender()
   {
       return gender;
   } 

   /**
     * Accessor method for climber's gender.
     */
    public void getGender(String newGender)
    {
        gender = newGender;

    }


}

public class Mountain
{
    // Instance variables.
    private double height;
    private String name;

    /**
     * Constructor for objects of class Mountain
     */
    public Mountain(String mName, double mHeight)
    {
        // Initialise instance variables
        name = mName;
        height = mHeight;
    }

    /**
     * Accessor method for mountain name.
     */
    public String getName()
    {
        return name;
    }

    /**
     * Set the mountain name.
     */
    public void setName(String newName)
    {
        name = newName;
    }

    /**
     * Accessor method for mountain height.
     */
    public double getHeight()
    {
        // put your code here
        return height;
    }

    /**
     * Set the mountain height.
     */
    public void setHeight(double newHeight)
    {
        height = newHeight;
    }
}

【问题讨论】:

  • 您是否正在创建一个存储 Climbers 和 Mountains 的多维数组?也许我误解了你的意图,但我不明白你为什么要使用数组列表来做这样的事情。为什么不在登山者班里有一个“山”场,可以跟踪爬过的山?它甚至可以是一个 arrayList 字段,在这种情况下,您可以将他们爬过的所有山峰添加到此列表中,并将其绑定到每个 Climber。

标签: java arraylist bluej


【解决方案1】:

Climber 可以包含此Climber 爬升的Mountaina 中的List&lt;Mountain&gt;

您可以将addMountain(Mountain mountain) 方法添加到Climber 类,这将向该List 添加Mountain

您可以添加一个 getter 方法 List&lt;Mountain&gt; getMountainList(),它会返回 List

这样,对于每个Climber,您都可以访问Mountains,这个Climber已经爬升了。

请注意,如果多个Climbers 攀登了相同的Mountain,它们都可以在其List&lt;Mountain&gt; 中包含对相同Mountain 实例的引用(即无需创建该Mountain 的副本每个Climber 的实例)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-14
    • 2021-05-17
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 2014-06-19
    相关资源
    最近更新 更多