我已经调用它时无法访问的代码

时间:2014-09-29 15:00:17

标签: java unreachable-code

我必须在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'变量上有一个无法访问的错误,我不知道为什么。

4 个答案:

答案 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() + "\"");