2013-04-05 125 views
0

我正试图编写一个程序,从池中随机选取3个国家,然后将它们输出为字符串。这些国家将依次获得金,银和铜牌。 olympicResults方法会将每个字符串添加到数组中。最后,所有国家将按照获得的金牌,银牌和铜牌数量进行排序。无法访问ArrayList对象方法

我遇到了eventResult方法的问题 - 我似乎无法从我的国家类访问方法,比如getName() - 只是给我找不到符号错误。当我在eventResult方法中初始化ArrayList时,它似乎工作,但是这不起作用,因为每次调用该方法时都会初始化新的ArrayList。

另一个问题是防止重复出现在eventResult字符串中的国家 - 我做错了什么想法?

代码:

public class OlympicMedals 
{ 
public static void main (String[] args) 
{ 
    String[] countries = {"CAN", "BRB", "BLR", "HKG", "CHN", "SWE"} 
    ArrayList<Country> list = new ArrayList<Country>(); 
    for (int j=0; j<9; j++) //initialize countries 
    { 
     list.add(new Country()); 
     list.get(j).setName(countries[j]); 
    } 

    Scanner scan = new Scanner(System.in); 
    int n = scan.nextInt(); 

    Print(n, list); 

} 


public static String eventResult (ArrayList list) //generates result of discipline 
{ 
    String res = ""; 
    Random rand = new Random(); 
    ArrayList<Country> listCopy = new ArrayList<Country>(list); 

    for (int i=0; i<3; i++) //generate list, prevent repeats 
    { 
     int n = listCopy.size(); 
     int random = rand.nextInt(n); 
     res += list.get(random).getName() + " "; 

     if (i==0) 
      list.get(random).setGold(1); 
     if (i==1) 
      list.get(random).setSilver(1); 
     if (i==2) 
      list.get(random).setBronze(1); 

     listCopy.remove(random); 
    } 
    return res;   
} 

public static String[] olympicResults(int n, ArrayList list) //array of strings from eventResult 
{ 
    String[] result; 
    result = new String[n]; 

    for (int i=0; i<n; i++) 
    { 
     result[i] = eventResult(list); 
    } 
    return result; 
} 

public static void Print(int n, ArrayList list) 
{ 
    for (int i=0; i<n; i++) //print results 
    { 
     System.out.println(olympicResults(n, list)[i]); 
    } 
} 

国家类:

public class Country 
{ 
private int gold; 
private int silver; 
private int bronze; 
private String name; 

public Country() //default constructor 
{ 
    setName(""); 
    setGold(0); 
    setSilver(0); 
    setBronze(0); 
} 

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

public String getName() 
{ 
    return name; 
} 

public void setGold(int g) 
{ 
    gold += g; 
} 

public int getGold() 
{ 
    return gold; 
} 

public void setSilver(int s) 
{ 
    silver += s; 
} 

public int getSilver() 
{ 
    return silver; 
} 

public void setBronze(int b) 
{ 
    bronze += b; 
} 

public int getBronze() 
{ 
    return bronze; 
} 

}

+0

你应该在任何地方使用泛型,像'eventResult(ArrayList的列表)'应该是'eventResult(ArrayList的列表)' – Apurv 2013-04-05 03:54:45

+0

清理你的代码第一。它有很多的错误。 '语法'和'逻辑'。 – SudoRahul 2013-04-05 03:55:21

+0

@Apurv哦,哇。修复它,谢谢!任何建议重复预防? – Hanyuu 2013-04-05 03:58:03

回答

0

你可以尝试用下面的代码的变化?

public static String eventResult (ArrayList<Country> list) //generates result of discipline 
{ 
    String res = ""; 
    Random rand = new Random(); 
    ArrayList<Country> listCopy = new ArrayList<Country>(list); 

    for (int i=0; i<3; i++) { 
     int random = rand.nextInt(listCopy.size()); 
     res += listCopy.get(random).getName() + " "; 
     if (i==0) 
      listCopy .get(random).setGold(1); 
     if (i==1) 
      listCopy .get(random).setSilver(1); 
     if (i==2) 
      listCopy .get(random).setBronze(1); 

     listCopy.remove(random); // remove the country which received a medal from the list 
    }  
    return res;   
} 
+0

不起作用。不知道这个for循环应该如何解决。不过谢谢,我会继续尝试。 – Hanyuu 2013-04-05 04:21:50

+0

没关系。现在就开始工作吧! – Hanyuu 2013-04-05 04:25:05