我有两个数组,一个是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;
}
}
它没有爆炸,但是它再次也没有执行搜索。
有什么建议吗?
答案 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
。
第三,以这种方式拥有两个相关的数组并不是很好的设计:应该可以找到一个适合您需求的面向对象的模式。