即。使用变量" location"和下面的经度,当然它们是在while循环中初始化的吗?
String calledAddress = intent.getStringExtra("address");
Pattern p = Pattern.compile("latitude=(.*?),hasLongitude");
Matcher m = p.matcher(calledAddress);
Double latitude;
Double longitude;
while (m.find()){
latitude = Double.parseDouble(m.group(1));
}
Pattern p1 = Pattern.compile("longitude=(.*?),phone");
Matcher m1 = p1.matcher(calledAddress);
while (m1.find()){
longitude = Double.parseDouble(m1.group(1));
}
LatLng clickedLocation = new LatLng(latitude,longitude); // ERROR HERE "latitude/longtitude may not have been initialised"
答案 0 :(得分:2)
这里的问题不是可访问性。问题在于局部变量在使用之前可能无法初始化的可能性。
所有局部变量在使用之前必须初始化,在你的情况下,while循环可能不会进入。因此它应该有一个默认值。
在您的情况下,您可以使用null或零初始化它们。
Double latitude =0;
Double longitude =0;
答案 1 :(得分:2)
因为它们可能未初始化。两个发现都可能返回false。
答案 2 :(得分:1)
不,他们不是。如果m.find()
和m1.find()
中的任何一个返回false,则相应的变量不会为initialised
。并且Java不允许您访问变量value
,除非它已初始化,因此错误。
如果您不希望代码继续进行initialised
,那么您可以分配null
值,如果它们仍然是IllegalArgumentException
则null
Double latitude;
Double longitude;
while (m.find()){
latitude = Double.parseDouble(m.group(1));
}
Pattern p1 = Pattern.compile("longitude=(.*?),phone");
Matcher m1 = p1.matcher(calledAddress);
while (m1.find()){
longitude = Double.parseDouble(m1.group(1));
}
if(null == latitude || null == longitude){
throw new IllegalArgumentException("Invalid Pattern. Both longitude and latitude must be present.");
}
例如:
$this->db->select('*');
$this->db->group_by('column_name');
$this->db->from('tbl_name');
$query = $this->db->get();
return $query->result();
答案 3 :(得分:1)
latitude
和longitude
局部变量不能被编译器初始化,因为它们依赖于循环中的条件语句:while (m.find()){
和while (m1.find()){
。
如何确保这些条件成立?
事实上,在声明中将它们分配给0
或null
并不一定能解决您的问题:
Double latitude;
Double longitude;
因为您可能会向new LatLng(latitude,longitude)
提供可能不正确的值。
LatLng clickedLocation = new LatLng(latitude,longitude);
和latitude
时才应执行{p> longitude
。
LatLng
实例。例如:
Double latitude = null;
Double longitude = null;
while (m.find()){
latitude = Double.parseDouble(m.group(1));
}
Pattern p1 = Pattern.compile("longitude=(.*?),phone");
Matcher m1 = p1.matcher(calledAddress);
while (m1.find()){
longitude = Double.parseDouble(m1.group(1));
}
// successful case
if (latitude != null && longitude != null){
LatLng clickedLocation = new LatLng(latitude,longitude);
...
}
// unsuccessful case
else{
...
}