2011-05-05 30 views
0

我有兩個數組,一個是cityUSA [i],另一個是decimalUSA [i]。每個有超過1500個條目,cityUSA [100]以及decimalUSA [100]等等。我發現這個城市的人們正在使用Android的定位服務,然後將其與我在cityUSA [i]數組中的城市列表進行比較。然後我搜索一個匹配,並使用匹配的i來找到該數組中的decimalUSA [i]的相關值。這裏是代碼:在Java/Android中正確使用for和if語句

loc.getLatitude(); loc.getLongitude(); Geocoder geocoder = new Geocoder(rate.this,Locale.ENGLISH);

 try { 
       List<Address> addresses = geocoder.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1); 

       TextView rateText = (TextView)findViewById(R.id.taxRate); 
       TextView locationText = (TextView)findViewById(R.id.taxLocation); 

       if(addresses != null) { 
       Address returnedAddress = addresses.get(0); 
       String city = returnedAddress.getLocality(); 
       locationText.setText(city); 

       int i; 
       for (i = 0; i <= cityUSA.length; i++){ 
        if (cityUSA[i] == city) { 
        String PrecentString = decimalRate[i]; 
        rateText.setText(PrecentString); 
        break; 
        } 
       } 


       } 
       else{ 
        locationText.setText("No City returned!"); 
        rateText.setText("No Rate returned!"); 
       } 


      } 


       catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
       TextView locationText = (TextView)findViewById(R.id.Rate); 
       locationText.setText("Cannot get Location!"); 
      } 

應用程序的炸彈,當我嘗試運行它。如果我刪除以下表述:

   int i; 
       for (i = 0; i <= cityUSA.length; i++){ 
        if (cityUSA[i] == city) { 
        String PrecentString = decimalRate[i]; 
        rateText.setText(PrecentString); 
        break; 
        } 
       } 

它不會彈出,但它然後又不執行搜索。

有什麼建議嗎?

+0

作爲附加評論,請儘量遵守Java命名約定。我看到你有一個名爲「PrecentString」的字符串(原文如此)。堅持命名約定會產生「percentString」。只是一個快速提示(當其他人閱讀你的代碼時很有用)。 – Vinay 2011-05-05 00:26:16

回答

1

除非你是不是,我看到一個直接的錯誤,您比較兩個字符串用「==」操作符:

if(cityUSA[i]==city) 

而是檢查每個字符串的內容(是否它們相等):

if(cityUSA[i].equals(city)) 

而且,< =在for循環中會導致一個錯誤。把它保持爲「<」。

另外,你是什麼意思的「炸彈出」?如果你給出了一個特定的例外情況以及在哪條線上,這將會很有幫助。

+0

正如Chris Schaffer所說,您可以使用equalsIgnoreCase()來忽略大小寫差異(即紐約與紐約)。 – Vinay 2011-05-05 00:21:09

+0

另外,你必須使用「equals()」而不是「==」的原因是因爲「==」將檢查cityUSA [i]和city是否駐留在同一個內存位置(即它們是同一個對象)。「==」不檢查cityUSA [i]和城市的內容是否相同。 – Vinay 2011-05-05 00:22:27

+0

正如你所指出的,由於使用了<=',所以轟炸無疑是一個'ArrayIndexOutOfBoundsException'。 – 2011-05-05 02:11:13

0

你迭代次數太多(當然,這隻會在城市不存在於數組中);應該是for (i = 0; i < cityUSA.length; i++){

至於爲什麼你可能找不到陣列中的城市,你可能會遇到區分大小寫的問題。也許試試if (cityUSA[i].equalsIgnoreCase(city)){

+0

謝謝克里斯你和Vinay的評論解決了我的問題,現在應用程序運行完美。非常感謝你。 – 63alfred 2011-05-05 06:00:46

0

首先,使用==比較兩個字符串對象,檢查它們是否是相同的對象,而不是它們是否包含相同的字符串。您應該將字符串與.equals()進行比較。其次,如果匹配失敗(這是因爲上面的原因,它可能會),你的數組索引將超出邊界。​​中的有效索引爲1到cityUSA.length-1,而for循環將繼續到cityUSA.length。第三,以這種方式擁有兩個相互依賴的數組並不是很好的設計:應該有可能找到一個適合您需求的面向對象的模式。

+0

謝謝eggyal,我會在我的代碼中看看這個。 – 63alfred 2011-05-05 06:01:54