簡體   English   中英

多次打印ArrayList的內容時遇到問題

[英]Having problems with the contents of my ArrayList printing multiple times

這是我第一次在這里發布信息,我對編程還是很陌生(不久前才剛開始Java),因此,大家可以給我有關如何解決問題的任何建議,我們將不勝感激! 希望我在第一篇文章中遵循此處的指導原則!

在該項目的宏偉計划中,我正在嘗試對“團隊”進行排序,以確定誰擁有與馬拉松相關的“圈數,車手和捐款”最多的人。 Team類由Rider對象組成。

這是我使用Team類中存在的方法遍歷Team數組的循環。

ArrayList<Team> team = new ArrayList<Team>();

for(int i=0; i<team.size(); i++){
        team.get(i).mostDonations(team);
        team.get(i).mostLaps(team);
        team.get(i).mostRiders(team);
    }

這是我的團隊課。 它充滿了必需的構造函數,setter和getter以及計算總計的方法。 但是,我認為下面應該是相關的代碼行。 (讓我知道我是否遺漏了任何東西!)

public class Team {
private String teamName;
private String teamAbbreviation;
private ArrayList<Riders> riders = new ArrayList<Riders>();
DecimalFormat decimal = new DecimalFormat("#0.00");

public double totalDonations(){
    double totalDonations = 0;
    for(int i=0; i < riders.size(); i++){
        totalDonations += riders.get(i).getAmount();
    }
    return totalDonations;
}

public int totalLaps(){
    int totalLaps = 0;
    for (int i = 0; i < riders.size(); i++){
        totalLaps += riders.get(i).getLaps();
    }
    return totalLaps;
}

public int totalRiders(){
    int totalRiders = 0;
    for (int i =0; i < riders.size(); i++){
        totalRiders += riders.size();
    }
    return totalRiders;
}

public void mostLaps(ArrayList<Team> Teams){
    int max = 0;
    int indexOfMax = 0;
    for(int i=0; i < Teams.size(); i++){
        if(Teams.get(i).totalDonations() > max){
            max = Teams.get(i).totalLaps();
            indexOfMax = i;
        }
    }
    System.out.println("The team with the most laps is: " + Teams.get(indexOfMax).getName() + "!");
}

public void mostRiders(ArrayList<Team> Teams){
    int max = 0;
    int indexOfMax = 0;
    for(int i=0; i < Teams.size(); i++){
        if(Teams.get(i).totalRiders() > max){
            max = Teams.get(i).totalRiders();
            indexOfMax = i;
        }
    }
    System.out.println("The team with the most riders is: " + Teams.get(indexOfMax).getName() + "!");
}

public void mostDonations(ArrayList<Team> Teams){
    double max = 0.0;
    int indexOfMax = 0;
    for(int i=0; i < Teams.size(); i++){
        if(Teams.get(i).totalDonations() > max){
            max = Teams.get(i).totalDonations();
            indexOfMax = i;
        }
    }
    System.out.println("The team with the most donations is: " + Teams.get(indexOfMax).getName() + "!");
}

這是我的騎士課。

public class Riders {

private String name;
private String hometown;
private String id;
private int laps;
private double amountRaised;

public Riders(){
    name = "";
    hometown = "";
    id = "";
    laps = 0;
    amountRaised = 0.0;
}

public Riders(String Name, String Hometown, String ID, int Laps){
    name = Name;
    hometown = Hometown;
    id = ID;
    laps = Laps;
    amountRaised = 0.0;
}

public void setName(String Name){
    name = Name;
}

public void setHometown(String Hometown){
    hometown = Hometown;
}

public void setAbbreviation(String ID){
    id = ID;
}

public void setLaps(int Laps){
    laps = Laps;
}

public void setAmount(double Amount){
    amountRaised = Amount;
}

public String getName(){
    return name;
}

public String getHometown(){
    return hometown;
}

public String getID(){
    return id;
}

public int getLaps(){
    return laps;
}

public double getAmount(){
    return amountRaised;
}
public String toString(){
    String s = "Rider Name: " + name + "\nHometown: " + hometown + "\nID: " + id + "\nLaps: " + laps;
    return s;
}

}

但是,輸出看起來像這樣:

捐款最多的團隊是:斑馬軍團成員!

圈數最大的團隊是:Xtremely Together!

騎手最多的團隊是:斑馬軍人!

捐款最多的團隊是:斑馬軍團成員!

圈數最大的團隊是:Xtremely Together!

騎手最多的團隊是:斑馬軍人!

捐款最多的團隊是:斑馬軍團成員!

圈數最大的團隊是:Xtremely Together!

騎手最多的團隊是:斑馬軍人!

捐款最多的團隊是:斑馬軍團成員!

圈數最大的團隊是:Xtremely Together!

騎手最多的團隊是:斑馬軍人!

捐款最多的團隊是:斑馬軍團成員!

圈數最大的團隊是:Xtremely Together!

騎手最多的團隊是:斑馬軍人!

捐款最多的團隊是:斑馬軍團成員!

圈數最大的團隊是:Xtremely Together!

騎手最多的團隊是:斑馬軍人!

捐款最多的團隊是:斑馬軍團成員!

圈數最大的團隊是:Xtremely Together!

騎手最多的團隊是:斑馬軍人!

捐款最多的團隊是:斑馬軍團成員!

圈數最大的團隊是:Xtremely Together!

騎手最多的團隊是:斑馬軍人!

捐款最多的團隊是:斑馬軍團成員!

圈數最大的團隊是:Xtremely Together!

騎手最多的團隊是:斑馬軍人!

捐款最多的團隊是:斑馬軍團成員!

圈數最大的團隊是:Xtremely Together!

騎手最多的團隊是:斑馬軍人!

我很困惑為什么要一遍又一遍地打印相同的三行。 我希望有人能指出我正確的方向。

下面的循環遍歷您的ArrayList<Team>並為每個Team項目打印三行。

for(int i=0; i<team.size(); i++){
    team.get(i).mostDonations(team);
    team.get(i).mostLaps(team);
    team.get(i).mostRiders(team);
}

現在,您還將使team經歷上述循環。

for(int i=0; i < Teams.size(); i++){
    if(Teams.get(i).totalDonations() > max){
        max = Teams.get(i).totalDonations(); // always goes for the max team object
        indexOfMax = i;
    }
}

更新:一種快速的方法是刪除調用這三個方法的for循環。

if(team != null) {
    team.get(0).mostDonations(team);
    team.get(0).mostLaps(team);
    team.get(0).mostRiders(team);
}

我將驗證這對您的代碼有多有效。

您對編程了解的越多,設計就越重要。 我仍然認為您的課程設計糟糕。 我創建了一個小應用程序來演示稍微更好的設計。

團隊班:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication16;

import java.util.*;

/**
 *
 * @author Sedrick
 */
public class Team {

    private String teamName;
    private List<String> playerName;
    private List<Integer> age;
    private int numOfMembers;
    private double membersAverageAge;

    public Team(String teamName, List<String> playerName, List<Integer> age)
    {
        this.teamName = teamName;
        this.playerName = playerName;
        this.age = age;
        this.numOfMembers = playerName.size();
        this.membersAverageAge = caculateAvgAge(this.age);
    }

    private static double caculateAvgAge(List<Integer> age)
    {
        int sum = 0;

        if (age.size() > 0) {
            for (int i = 0; i < age.size(); i++) {
                sum += age.get(i);
            }
        }
        else {
            return Double.NaN;
        }

        return (double) sum / (double) age.size();
    }

    /**
     * @return the teamName
     */
    public String getTeamName()
    {
        return teamName;
    }

    /**
     * @param teamName the teamName to set
     */
    public void setTeamName(String teamName)
    {
        this.teamName = teamName;
    }

    /**
     * @return the playerName
     */
    public List<String> getPlayerName()
    {
        return playerName;
    }

    /**
     * @param playerName the playerName to set
     */
    public void setPlayerName(List<String> playerName)
    {
        this.playerName = playerName;
    }

    /**
     * @return the age
     */
    public List<Integer> getAge()
    {
        return age;
    }

    /**
     * @param age the age to set
     */
    public void setAge(List<Integer> age)
    {
        this.age = age;
    }

    /**
     * @return the numOfMembers
     */
    public int getNumOfMembers()
    {
        return numOfMembers;
    }

    /**
     * @param numOfMembers the numOfMembers to set
     */
    public void setNumOfMembers(int numOfMembers)
    {
        this.numOfMembers = numOfMembers;
    }

    /**
     * @return the membersAverageAge
     */
    public double getMembersAverageAge()
    {
        return membersAverageAge;
    }

    /**
     * @param membersAverageAge the membersAverageAge to set
     */
    public void setMembersAverageAge(double membersAverageAge)
    {
        this.membersAverageAge = membersAverageAge;
    }

}

主類:

import java.util.*;

/**
 *
 * @author Sedrick
 */
public class JavaApplication16 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        // TODO code application logic here
        List<String> cowPlayer = new ArrayList();
        List<Integer> cowPlayerAge = new ArrayList();
        cowPlayer.add("Tim");
        cowPlayerAge.add(20);
        cowPlayer.add("Jane");
        cowPlayerAge.add(23);
        cowPlayer.add("Kim");
        cowPlayerAge.add(25);
        cowPlayer.add("Chris");
        cowPlayerAge.add(10);

        Team cow = new Team("Cows", cowPlayer, cowPlayerAge);

        List<String> frogPlayer = new ArrayList();
        List<Integer> frogPlayerAge = new ArrayList();
        frogPlayer.add("Dana");
        frogPlayerAge.add(21);
        frogPlayer.add("Jack");
        frogPlayerAge.add(19);
        frogPlayer.add("Jill");
        frogPlayerAge.add(30);

        Team frog = new Team("Frogs", frogPlayer, frogPlayerAge);

        System.out.println(cow.getTeamName() + " info");
        System.out.println("\tNumber of members: " + cow.getNumOfMembers());
        System.out.println("\tNumber of members: " + cow.getMembersAverageAge());
        System.out.println("\tPlayers Name and Age");
        for (int i = 0; i < cow.getPlayerName().size(); i++) {
            System.out.println("\t\t" + cow.getPlayerName().get(i) + " - " + cow.getAge().get(i));
        }

        System.out.println(frog.getTeamName() + " info");
        System.out.println("\tNumber of members: " + frog.getNumOfMembers());
        System.out.println("\tNumber of members: " + frog.getMembersAverageAge());
        System.out.println("\tPlayers Name and Age");
        for (int i = 0; i < frog.getPlayerName().size(); i++) {
            System.out.println("\t\t" + frog.getPlayerName().get(i) + " - " + frog.getAge().get(i));
        }

        List<Team> teams = new ArrayList();
        teams.add(cow);
        teams.add(frog);

        System.out.println("Team with the most players: " + whichTeamHasTheMostPlayers(teams));
        System.out.println("Team whose players average age is higher: " + whichTeamHasTheHighestAverageAge(teams));

    }

    //If there are more than one team with the same number of players this will not work correctly.
    static private String whichTeamHasTheMostPlayers(List<Team> teams)
    {

        int mostPlayersIndex = 0;//assume the first team has the most players;
        int amountOfPlayers = teams.get(0).getNumOfMembers();
        for (int i = 1; i < teams.size(); i++) {
            if (teams.get(i).getNumOfMembers() > amountOfPlayers) {
                mostPlayersIndex = i;
                amountOfPlayers = teams.get(i).getNumOfMembers();
            }
        }

        return teams.get(mostPlayersIndex).getTeamName();
    }

    //If there are more than one team with the same average this will not work correctly.
    static private String whichTeamHasTheHighestAverageAge(List<Team> teams)
    {
        int highestAvgIndex = 0;//assume the first team has the most players;
        double teamAvg = teams.get(0).getMembersAverageAge();
        for (int i = 1; i < teams.size(); i++) {
            if (teams.get(i).getMembersAverageAge() > highestAvgIndex) {
                highestAvgIndex = i;
                teamAvg = teams.get(i).getMembersAverageAge();
            }
        }

        return teams.get(highestAvgIndex).getTeamName();
    }

}

暫無
暫無

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

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