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

Java/Android中for和if语句的正确使用,java,android,Java,Android,我有两个数组,一个是cityUSA[I],一个是decimalUSA[I]。每一个都有超过1500个条目,cityUSA[100]和decimalUSA[100]等等。我通过Android中的定位服务找到城市居民,然后将其与我在cityUSA[I]数组中的城市列表进行比较。然后,我搜索一个匹配项,并使用匹配项的I来查找该数组中小数USA[I]的相关值。代码如下: loc.getLatitude(); loc.getLongitude(); Geocoder Geocoder=新的地理编码器(ra

我有两个数组,一个是cityUSA[I],一个是decimalUSA[I]。每一个都有超过1500个条目,cityUSA[100]和decimalUSA[100]等等。我通过Android中的定位服务找到城市居民,然后将其与我在cityUSA[I]数组中的城市列表进行比较。然后,我搜索一个匹配项,并使用匹配项的I来查找该数组中小数USA[I]的相关值。代码如下:

loc.getLatitude(); loc.getLongitude(); Geocoder Geocoder=新的地理编码器(rate.this,Locale.ENGLISH)

试试看{
列表地址=geocoder.getFromLocation(loc.getLatitude(),loc.getLatitude(),1);
TextView rateText=(TextView)findViewById(R.id.taxRate);
TextView位置text=(TextView)findViewById(R.id.taxLocation);
如果(地址!=null){
返回的地址地址=地址。获取(0);
字符串city=returnedAddress.getLocation();
locationText.setText(城市);
int i;

对于(i=0;i,除非您不是,否则我会看到一个直接错误,即您正在使用“==”运算符比较两个字符串:

if(cityUSA[i]==city)
相反,要检查每个字符串的内容(以及它们是否相等):


另外,您迭代了太多次(当然,这只会发生在数组中不存在城市的情况下);应该是
for(i=0;i


至于为什么在数组中找不到城市,可能存在区分大小写的问题。请尝试
if(cityUSA[i].equalsIgnoreCase(city)){

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

其次,如果匹配失败,您的数组索引将越界(由于上述原因,它可能会越界)。
cityUSA
中的有效索引是1到
cityUSA.length-1
,而
for
循环将继续到
cityUSA.length


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

正如Chris Schaffer所说,您可以使用equalsIgnoreCase()忽略大小写差异(即纽约与纽约)。此外,您必须使用“equals()”而不是“==”的原因是“==”将检查cityUSA[i]和city是否位于同一内存位置(即,它们是同一对象)。“==”不检查cityUSA[i]的内容和city是一样的。轰炸毫无疑问是一个
ArrayIndexOutOfBoundsException
,因为使用了
我的意思是轰炸,应用程序在设备上意外关闭。无论如何,你的建议解决了问题,现在运行良好。我猜javaScript中的编程太多,比较了实数。非常感谢太多了。哈哈,这一切都很好。然后只要检查绿色箭头,如果问题已经解决,就可以关闭该问题。:-(实际上,你可以检查任何人的答案,他们都说同样的事情,真的哈哈。)作为补充说明,请尽量遵守Java命名约定。我看到你有一个名为“PrecentString”(原文如此)的字符串。坚持命名约定将产生“percentString”。只是一个快速提示(当其他人阅读您的代码时很有用)。谢谢Chris yours和Vinay的评论解决了我的问题,现在应用程序运行得非常好。非常感谢。
                int i;
                for (i = 0; i  <= cityUSA.length; i++){
                    if (cityUSA[i] == city) {
                    String PrecentString = decimalRate[i];
                    rateText.setText(PrecentString);
                    break;
                    }
                }
if(cityUSA[i]==city)
if(cityUSA[i].equals(city))