簡體   English   中英

需要幫助使用ArrayList

[英]Need help using an ArrayList

看來有20個團正在不斷形成。 第一個有1000人,第二個有950人,第三個有900人,依此類推,直到第20團,駐軍只有50人。在每個星期中,每個團增加了100人,到了最后,最大的團是被送往前線,總共持續了20周。

對於這個程序,我已經設法打印出每個團的原始人數。 但是我很難為每個團增添100名士兵。增兵必須是軍隊中的一種方法。 我正在使用.txt文件獲取團對象。 所有這些文件包含的是團的名稱,編號為1-20。

我目前沒有錯誤,我唯一的問題是我不知道該如何增加人員。 我必須在Army類中使用addMen方法,目前我的方法為空白。

    public class Regiment {

    private String name;       //name of regiment 
    private int regNumber;     //regiment number
    private int men;           // regiment men 

    public Regiment(int regNumber, String name, int men) {
        this.name = name;
        this.regNumber = regNumber;
        this.men = men;
    }

    public String getName() {
        return name;
    }

    public int getregNumber() {
        return regNumber;
    }

    public int getMen() {
        return men;
    }

    public int addMen2(int RegNumber) {
        int men = 1050 - (regNumber * 50);
        return men;
    }

    }

ArmyDataList:

    class ArmyDataList {

        public ArrayList<Regiment> list;

    public ArmyDataList() {
        list = new ArrayList<Regiment>();
    }

    public void AddToList(Regiment current) {
        list.add(current);
    }

    public void RemoveFromList(Regiment current) {
        list.remove(current);
    }

    public Regiment getLargest() {
        if (list.isEmpty()) {
            return null;
        }
        Regiment Reg1 = list.get(0);

        for (int i = 1; i < list.size(); i++) {
            Regiment current = list.get(i);      // get next regiment
            // is current regiment > largest
            if (current.getMen() > Reg1.getMen()) {
                Reg1 = current;
            }
        }
        return Reg1;

    }

    public void addMen() {

    }

    public String toString() {

        String out
                = String.format("%28s%12s%n", "Regiments", " Men")
                + String.format("%12s%n", "Number")
                + String.format("%12s%16s%14s%n", "=======", "===============",
                        "=========");

        for (int i = 0; i < list.size(); i++) {

            Regiment regim = list.get(i);
            int regNumber = regim.getregNumber();
            String name = regim.getName();
            int men = regim.addMen2(regNumber);

            out = out + String.format("%12s", regNumber)
                    + String.format("%16s", name)
                    + String.format("%10s", men)
                    + "\n";
        }
        return out + "\n";

    }
}

團測試:

 public class RegimentTest {

   public static void main(String[] args) throws IOException
   {


  ArmyDataList army = new ArmyDataList();

      Scanner fileScan = new Scanner(new File("regiments.txt"));

      System.out.println("Report Summary:\n");

      while (fileScan.hasNext()) {
         String line = fileScan.nextLine();

         System.out.println(line);

         Scanner in = new Scanner(line) ;

        int regNumber = in.nextInt();
        String name = in.next();
        int men = 0 ; //men is set to 0 only because I havent add the men yet

        Regiment adder = new Regiment(regNumber, name, men );

         army.AddToList(adder) ;
      }

         System.out.println(army.toString());

      }

setMen(int numberOfMen)方法添加到Regiment類。 然后,在您的addMen()方法中,您可以執行以下操作:

public void addMen(){
    for(Regiment r : list){ //iterate through the list of regiments
        r.setMen(r.getMen() + 100); //add 100 men to each regiment
    }
}

setMen方法如下所示:

public void setMen(int numberOfMen){
    men = numberOfMen;
}

toString方法還有另一個問題,即該團的addMen2方法被調用-現在,您只是打印數字,而不是初始化人數。 Regiment類的構造函數中,替換該行

this.men = men;

this.men = addMen2(regNumber);

然后在您的toString方法中,替換

int men = regim.addMen2(regNumber);

int men = regim.getMen();

這是您的main應為:

public static void main(String[] args) throws IOException{

    ArmyDataList army = new ArmyDataList();
    Scanner fileScan = new Scanner(new File("regiments.txt"));
    System.out.println("Report Summary:\n");
    while (fileScan.hasNext()) {
        String line = fileScan.nextLine();
        System.out.println(line);
        Scanner in = new Scanner(line);
        int regNumber = in.nextInt();
        String name = in.next();
        int men = 0 ; //men is set to 0 only because I havent add the men yet
        Regiment adder = new Regiment(regNumber, name, men );
        army.AddToList(adder);
    }
    System.out.println(army.toString()); //print out the initial # of men
    for(int i = 0; i < 20; i++)
        army.addMen();
    System.out.println(army.toString()); //print the final # of men
}

Regiment擺脫方法addMen2 ,並將其替換為

public void addMen(int men) {
this.men +=men;
}

然后在你的軍隊中你可以有辦法

 public void addMen(int men) {
      for(Regiment regiment : list){
         regiment.addMen(men);
      }
   }

這是最簡單的解決方案,每個團要增加100名士兵,

另一件事是,您的toString有點令人討厭,軍團應該知道它有多強壯的士兵,您不應該需要其他方法來計算它(為什么我建議您廢棄addMen2方法)

要啟動您的Regiment ,請使用構造函數。 您想擁有大小為1000、1950、1900等的軍團,在創建軍團時進行

while (fileScan.hasNext()) {
         String line = fileScan.nextLine();
         System.out.println(line);
         Scanner in = new Scanner(line) ;
        int regNumber = in.nextInt();
        String name = in.next();
        int men = 1050 - (regNumber * 50);

        Regiment adder = new Regiment(regNumber, name, men );

         army.AddToList(adder) ;
      }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM