为什么我的编译器说我的return语句丢失了?

时间:2017-04-11 08:10:04

标签: java if-statement return void

我为两种情况都输入了return语句,if和else

但它仍然说缺少return语句

我的代码出了什么问题?

public static getNext(){
    ArrayList<String> copy = new ArrayList<String>();
    Random dice = new Random();
    int rolls;
    for(int x=0; x<i.length; x++){
        copy.add(i[x]);
    }

    if(copy.size() < 1){
        return "NONE";
    }

    else{
        rolls = dice.nextInt(copy.size());
        return copy.get(rolls);
        copy.remove(rolls);
    }
}

2 个答案:

答案 0 :(得分:1)

else{
        rolls = dice.nextInt(copy.size());
        return copy.get(rolls);
        copy.remove(rolls);   <--- UNREACHABLE
}

由于返回后代码行无法访问,您的编译器可能会错过return语句。

另外,您尚未声明返回的类。应该有:

public static <return type> methodName(<parameters>) {

<body>

}

问:如何在返回后删除copy.get(roll)?有办法吗?
A:基本上问题是关于功能的概念。函数是一段执行某些逻辑的代码,然后根据它返回一些东西。返回语句是函数中发生的最后一件事。

您还可以拥有一个不返回任何内容的代码块,但需要参数。这些被称为程序。无论如何,在Java中我们都称它们为:函数和过程方法

答案 1 :(得分:1)

你的代码中有一些误解:

首先当你返回时,方法应该返回一些东西 第二次您不能在return之后指定任何类型的陈述 第三次您必须存储要删除的返回值并将其返回到单独的变量中

您的代码应如下所示:

public static String getNext() {
//-------------^^------------return type
    ArrayList<String> copy = new ArrayList<String>();
    Random dice = new Random();
    int rolls;
    for (int x = 0; x < i.length; x++) {
        copy.add(i[x]);
    }

    if (copy.size() < 1) {
        return "NONE";
    } else {
        rolls = dice.nextInt(copy.size());
        String s = copy.get(rolls);//<<----------put the val you want in separate variable
        copy.remove(rolls);//<<-----------remove your val
        return s;//<<-----------return your val
    }
}

注意

在注释中提及@BackSlash时,从列表中删除你的val是没用的,因为在你离开你的方法后它不会被使用,所以如果你在另一个地方使用这个List你必须在外面声明它你的方法例如:

private static ArrayList<String> copy = new ArrayList<String>();
public static String getNext() {
    //ArrayList<String> copy = new ArrayList<String>();//<<<-------------useless position
    ....