我必须在Java上使用某种谷歌地图程序,我有以下代码:
public double CGlon(double graus, double min, double sec)
{
double min2;
graus =(int) longitud;
min = (longitud - graus)*60;
min2 = (int) min;
sec = (min-min2)*60;
return(graus);
return(min); //Unreachable point
return(sec); //Error
}
例如,我必须将坐标41,234234º转换为41º23'122“。我正在调用主程序:
public class GPS {
private static final int graus = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
TempClass lloc1 = new TempClass();
TempClass lloc2 = new TempClass();
TempClass lloc3 = new TempClass();
TempClass lloc4 = new TempClass();
//Inicialitzacio de les dades
//ETSE
lloc1.nomSet("ETSE");
lloc1.latitudSet(41.1258048);
lloc1.longitudSet(1.2385834);
System.out.println(lloc1.CGlat(graus, 0, 0)+" graus"+lloc1.CGlat(0, 0, 0)+" minuts y "+lloc1.CGlat(0, 0, 0)+" segons de latitud.");
问题是我在'min'变量上有一个无法访问的错误,我不知道为什么。
答案 0 :(得分:2)
第一个return
语句停止执行该方法,因此无法访问第二个和第三个return
语句。如果您尝试返回三个值,请返回一个数组:
public double[] CGlon(double graus, double min, double sec)
{
double min2;
graus =(int) longitud;
min = (longitud - graus)*60;
min2 = (int) min;
sec = (min-min2)*60;
return new double[] { graus, min, sec };
}
答案 1 :(得分:1)
一个函数(或方法)只能返回一次。你觉得这个怎么样?:
return(graus);
return(min); //Unreachable point
return(sec); //Error
一旦执行第一个return
,该功能就会结束。它产生了一个价值并完成了执行。因此之后 return
语句将永远不会被执行。
如果要返回三个单独的值,请创建某种类型的数据结构,将这三个值保存在一起并返回该结构的实例。它可能看起来像:
public class SomeDataStructure {
private final double graus;
private final double min;
private final double sec;
public SomeDataStructure(double graus, double min, double sec) {
this.graus = graus;
this.min = min;
this.sec = sec;
}
// also create getters for the values
}
然后在你的代码中:
SomeDataStructure result = new SomeDataStructure(graus, min, sec);
return result;
答案 2 :(得分:0)
您希望该代码做什么?为什么你有3个退货声明?
返回值后,该方法不会继续执行。在返回值之后还有其他语句,根据定义,它是无效的,因此是错误。
您似乎正在尝试返回多个值,这是不可能的。而是将3个返回值包装到Object中,然后返回它。
答案 3 :(得分:0)
看看你的代码:
return(graus);
return(min);
return(sec);
执行该方法时,它会在遇到第一个return
语句时向调用者返回一个值。该方法无法返回任何其他值。考虑调用代码
double result = lloc1.CGlat(graus, 0, 0);
在您的案件中result
分配的价值是多少?第一,第二或第三回报值?因此,您的代码无法编译。
现在,如果要从方法返回三个值,您真正想要做的是返回一个复合对象。为此,请创建一个合适的类来保存您的值:
return new Location(graus, min, sec);
Location
类将这些字段分配给您可以从调用代码查询的字段,例如像这样:
Location result = lloc1.CGlat(graus, 0, 0);
System.out.println(result.getGraus() + "°" + result.getMinutes() + "'" + result.getSeconds() + "\"");