在Java / Android中正确使用for和if语句

时间:2011-05-05 00:12:55

标签: java android

我有两个数组,一个是cityUSA [i],另一个是decimalUSA [i]。每个都有超过1500个条目,cityUSA [100]与decimalUSA [100]一起使用,依此类推。我发现城市人在Android中的via位置服务,然后我将它与cityUSA [i]数组中的城市列表进行比较。然后我搜索匹配并使用匹配的i来查找该数组中decimalUSA [i]的相关值。这是代码:

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!");
             }

当我尝试运行它时,应用程序会爆炸。如果我删除了for statment:

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

它没有爆炸,但是它再次也没有执行搜索。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

除非你不是,否则我会看到一个错误,因为你将两个字符串与“==”运算符进行比较:

if(cityUSA[i]==city)

相反,检查每个字符串的内容(以及它们是否相等):

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

此外,for循环中的&lt; =将导致一个错误。保持它只是一个“&lt;”。

另外,“炸弹”是什么意思?如果你抛出一个特定的异常并在哪一行上,那将会很有帮助。

答案 1 :(得分:0)

你要迭代一次太多次(当然,只有当数组中不存在城市时才会发生这种情况);应该是for (i = 0; i < cityUSA.length; i++){

至于为什么您可能无法在阵列中找到该城市,您可能会遇到区分大小写的问题。也许试试if (cityUSA[i].equalsIgnoreCase(city)){

答案 2 :(得分:0)

首先,使用==比较两个字符串对象,检查它们是否是同一个对象,而不是它们是否包含相同的字符串。您应该将字符串与.equals()进行比较。

其次,如果匹配失败,你的数组索引将超出范围(由于上述原因,它可能会出现)。 cityUSA中的有效索引为1到cityUSA.length-1,而for循环将继续cityUSA.length

第三,以这种方式拥有两个相关的数组并不是很好的设计:应该可以找到一个适合您需求的面向对象的模式。