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