[英]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.