2016-11-18 57 views
0

我正在做關於數組和while循環在java中的作業。 問題是創建一個名爲public int getPopulation(String province)的方法,該方法返回該省的人口。如果沒有這樣的省份,則返回一個稱爲NO_SUCH_PROVINCE的常量,該常數設置爲-1。但我無法得到我想要的。如何獲得省的人口

public class Country { 
public static final int ON = 0; 
public static final int QC = 1; 
public static final int BC = 2; 
public static final int AB = 3; 
public static final int MB = 4; 

public static final int NO_SUCH_PROVINCE = -1; 

private String[] provinces; 
private int[] population; 

public Country() { 
    provinces = new String[5]; 
    provinces[0] = "Ontario"; 
    provinces[1] = "Quebec"; 
    provinces[2] = "British Columbia"; 
    provinces[3] = "Alberta"; 
    provinces[4] = "Manitoba"; 

    population = new int[5]; 
    population[ON] = 12851821; 
    population[QC] = 7903001; 
    population[BC] = 4400057; 
    population[AB] = 3645257; 
    population[MB] = 1208268; 
} 
public int getPopulation(String province) { 
    int i = 0; 
    int temp = 0; 
    while(i < provinces.length) { 
     if(province == provinces[i]) { 
      temp = population[i]; 
     }else { 
      temp = NO_SUCH_PROVINCE; 
     } 
     i++; 
    } 
    return temp; 
} 
+0

當你說你沒有得到你想要的結果時,你是什麼意思?有錯誤嗎?你期待什麼輸出? – PakkuDon

+0

'if(province.equals(provinces [i]))' –

+0

@ScaryWombat快速撥號時是否有重複的內容?你擊敗了我;) –

回答

2

您的搜索算法存在問題。它在找到解決方案後繼續前進,然後覆蓋正確的值。在這裏,當它發現該值時,立即返回該值並離開該方法。如果找不到任何值,則返回NO_SUCH_PROVINCE

另一個問題是由Scary Wombat指出的問題,即您的代碼無法正確比較String以找到匹配項。

public int getPopulation(String province) { 
    for (int i = 0; i < provinces.length; i++) { // For objects, always use .equals() 
     if (province.equals(provinces[i])) { return population[i]; } 
    } 
    return NO_SUCH_PROVINCE; 
} 

當然,這將是更簡單,如果能簡單地用一個HashMap<String, Integer>存儲像一本字典中的所有數據。