Java ArrayList没有';不要以插入的方式添加对象

Java ArrayList没有';不要以插入的方式添加对象,java,if-statement,arraylist,Java,If Statement,Arraylist,我试图通过if/else语句向ArrayList添加多个值。变量numberOfShips声明一个字段的数量。但是,当我打印出.size()时,大小仅为1,最新添加的对象就是其中的对象。我不知道我做错了什么。我知道随着元素的添加,ArrayList的大小会隐式增加,所以不可能是这样 public ArrayList<Ship> createFleet(int choice) { ArrayList<Ship> fleet = new ArrayList<Sh

我试图通过
if/else
语句向
ArrayList
添加多个值。变量
numberOfShips
声明一个字段的数量。但是,当我打印出
.size()
时,大小仅为1,最新添加的对象就是其中的对象。我不知道我做错了什么。我知道随着元素的添加,
ArrayList
的大小会隐式增加,所以不可能是这样

public ArrayList<Ship> createFleet(int choice) {
    ArrayList<Ship> fleet = new ArrayList<Ship>();
    if (count < numberOfShips && choice > 0 && choice < 5) {
        if (choice == 1) {
            Ship ac = new Ship("Aircraft carrier", 5, false);
            fleet.add(ac);
            count++;
            System.out.println("Aircraft carrier has been added to fleet.");
        } else if (choice == 2) {
            Ship bs = new Ship("Battleship", 4, false);
            fleet.add(bs);
            count++;
            System.out.println("Battleship has been added to fleet.");
        } else if (choice == 3) {
            Ship sm = new Ship("Submarine", 3, false);
            fleet.add(sm);
            count++;
            System.out.println("Submarine has been added to fleet.");
        } else if (choice == 4) {
            Ship ds = new Ship("Destroyer", 3, false);
            fleet.add(ds);
            count++;
            System.out.println("Destroyer has been added to fleet.");
        } else if (choice == 5) {
            Ship sp = new Ship("Patrol Boat", 2, false);
            fleet.add(sp);
            count++;
            System.out.println("Patrol boat has been added to fleet.");
        }
    } else {
        System.out.println("Not an option.");
    }
    return fleet;
}
public ArrayList createFleet(int选项){
ArrayList fleet=新的ArrayList();
如果(计数0&&choice<5){
如果(选项==1){
船舶ac=新船舶(“航空母舰”,5,假);
车队。添加(ac);
计数++;
System.out.println(“航空母舰已加入舰队”);
}else if(选项==2){
船舶bs=新船舶(“战列舰”,4,假);
车队。添加(bs);
计数++;
System.out.println(“战舰已加入舰队”);
}else if(选项==3){
船舶sm=新船舶(“潜艇”,3,假);
车队。添加(sm);
计数++;
System.out.println(“潜艇已加入舰队。”);
}else if(选项==4){
船舶ds=新船舶(“驱逐舰”,3,假);
车队。添加(ds);
计数++;
System.out.println(“驱逐舰已加入舰队。”);
}else if(选项==5){
船舶sp=新船舶(“巡逻艇”,2,假);
车队。添加(sp);
计数++;
System.out.println(“巡逻艇已加入舰队。”);
}
}否则{
System.out.println(“不是选项”);
}
返回船队;
}

您的
createFleet
方法仅根据输入选择将一艘船舶添加到列表中。如果您想添加多个ship,您需要在某个循环中运行该代码。如果您希望创建多个船舶,那么首先为什么要将选择权传递给该方法还不清楚

如果您的目的是创建多艘相同类型的船舶,您可以执行以下操作:

ArrayList<Ship> fleet = new ArrayList<Ship>();
for (int count=0; count < numberOfShips ; count++) {
    if (choice == 1) ...
}
ArrayList fleet=new ArrayList();
for(int count=0;count

通过替换长
if。。否则如果。。。else if
使用switch语句。

每次调用该方法时,您都在创建一个新的
ArrayList
。您需要维护方法之外的船只的
ArrayList

public ArrayList<Ship> createFleet(int choice) {
    ArrayList<Ship> fleet = new ArrayList<Ship>(); //Here you create a new ArrayList and return it with a single Ship in it.
我的建议是创建一个
Fleet
类,其中包含
ArrayList
的引用:

public class Fleet {
    private List<Ship> internalFleet = new ArrayList<Ship>();
    private static int MAX_SHIPS = 10;

    public void addShip(int choice){
        if (internalFleet.size() < MAX_SHIPS) {
            Ship ship;
            switch(choice){
                case 1: ship = new Ship("Aircraft carrier", 5, false);
                        break;
                case 2: ship = new Ship("Battleship", 4, false);
                        break;
                case 3: ship = new Ship("Submarine", 3, false);
                        break;
                case 4: ship = new Ship("Destroyer", 3, false);
                        break;
                case 5: ship = new Ship("Patrol Boat", 2, false);
                        break;
                default: System.out.println("Not an option.");
            }
            if(ship!=null){
                internalFleet.add(ship);
                System.out.println(ship.getName() + " has been added to fleet.");
            }
        }
    }
    public ArrayList<Ship> getFleet(){
        return internalFleet;
    }
}
公共级机队{
private List internalFleet=new ArrayList();
私人静态int MAX_=10;
公共无效地址(整数选择){
如果(internalFleet.size()
for(int count=0;count
您看到
开关
语句了吗?这可能会对您有所帮助。如果您正在传入选项,并希望该方法将一个ship添加到现有列表中,则需要传入该列表,而不是在方法中创建一个
新的
列表。如果我将代码放入循环并输入选项,它将选择相同的对象编号ships次。我需要能够选择不同的船objects@user2740689环路在哪里?如果有一个循环多次调用
createFleet
,则每次调用都会使用一艘飞船创建一个新列表。它位于不同的类中,调用该方法。循环是:while(battleship.countpublic class Fleet { private List<Ship> internalFleet = new ArrayList<Ship>(); private static int MAX_SHIPS = 10; public void addShip(int choice){ if (internalFleet.size() < MAX_SHIPS) { Ship ship; switch(choice){ case 1: ship = new Ship("Aircraft carrier", 5, false); break; case 2: ship = new Ship("Battleship", 4, false); break; case 3: ship = new Ship("Submarine", 3, false); break; case 4: ship = new Ship("Destroyer", 3, false); break; case 5: ship = new Ship("Patrol Boat", 2, false); break; default: System.out.println("Not an option."); } if(ship!=null){ internalFleet.add(ship); System.out.println(ship.getName() + " has been added to fleet."); } } } public ArrayList<Ship> getFleet(){ return internalFleet; } }
for(int count=0; count < numberOfShips ; count++){
    if (choice == 1) {
        fleet.add(new Ship("Aircraft carrier", 5, false));
        System.out.println("Aircraft carrier has been added to fleet.");
    }
    else if ...
}