2016-11-18 9 views
0

私はjavaの配列とwhileループについて宿題を取ります。 質問は、州の人口を返すpublic int getPopulation(String province)というメソッドを作成することです。そのような州がない場合は、NO_SUCH_PROVINCEという定数を返します。これは-1に設定されたintです。しかし、私は私が望むものを得ることができません。都道府県の人口を取得するには

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 {provinces [i]))' –

+0

@ScaryWombatスピードダイヤルで重複しましたか?あなたはそれに私を打ち負かす;) –

答えて

2

検索アルゴリズムに問題があります。解決策を見つけてから正しい値を上書きします。これはここで値が見つかるとすぐに値を返し、メソッドを終了します。値が見つからない場合は、NO_SUCH_PROVINCEを返します。

もう1つの問題は、あなたのコードがStringと正確に一致するものを比較しないということですが、Scary Wombatが指摘する問題です。もちろん

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; 
} 

1は、単に辞書のようにすべてのデータを格納するHashMap<String, Integer>を使用することができれば、これははるかに簡単になります。

関連する問題