缺少退货声明错误

时间:2013-03-31 08:46:51

标签: java if-statement return runtime-error

以下Java不起作用,因为缺少return语句。我无法弄清楚出了什么问题。任何想法?

public String setusername(String u) {    
    if (username.length() > usernameLimit) {
        System.out.println("overlimit");
    } else {
        return this.username = u;
    }
}

即使我取出字符串u它也会产生相同的错误,如果我添加int usernameLimit它会给出相同的错误。

5 个答案:

答案 0 :(得分:1)

您的代码使用分支(如果循环)。从编译器的角度来看,两个分支,即if和else块都可能被执行。 但回报只是在其他方面。 因此,编译器抱怨缺少回报。

解决方案1:尝试将if返回if(根据您的要求)

解决方案2:将你的回报移出If-Else结构。您可以使用变量来指定返回值,并在if或else中相应地填充它。

答案 1 :(得分:1)

你的return语句在else块中,所以编译器不知道在运行时函数是否会返回一些东西。

将其更改为

public String setusername(String u) {
String result="overlimit";
if (username.length() <= usernameLimit) {
    this.username = u;
    result=u;
}
return result;
}

应该可以正常工作

答案 2 :(得分:0)

if (username.length() > usernameLimit) {
    System.out.println("overlimit");
    ////////////return what??? 
 }

这是问题,该方法需要在username.length() > usernameLimit

时返回语句

答案 3 :(得分:0)

你必须在if子句的两个部分都有一个return语句。现在,只有在username.length()&lt; = usernameLimit时,您的函数才会返回一个String。试试这个:

public String setusername(String u) {    
if (username.length() > usernameLimit) {
    System.out.println("overlimit");
    return(null);
} else {
    return this.username = u;
}
}

答案 4 :(得分:0)

假设这个问题与您之前的问题Java String Limit有关,您可能不需要在setusername()方法中使用return语句。

import java.io.*;

public class UserNameTest {
    private static final int USER_NAME_LIMIT=6; // constants should be all UPPERCASE_WITH_UNDERSCORES

    private String userName; // variable names should be in camelCase

    private String getUserName() {
        // normally you write a getter method to obtain value
        return userName;
    }

    private void setUserName(String u) {
        // setter method would not require a return statement,
        //   if all you trying to do is to validate and set the new value.

        if (u.length() > USER_NAME_LIMIT) { // validate length of new value
            // good practice to be descriptive when giving error messages
            System.out.println("Given user name [" + u + "] is longer than valid limit [" + USER_NAME_LIMIT + "]");
        } else {
            this.userName = u;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String inputString = br.readLine();

        UserNameTest q1 = new UserNameTest();
        q1.setUserName(inputString); // set user name retrieved through input

        System.out.println("New user name: " + q1.getUserName()); // get user name for other operations
        // if setUserName() above rejected the input value due to length exceeding, here you will see 'null'
        //   as we have not set user name to anything beforehand
    }

}

阅读并了解编码标准http://geosoft.no/development/javastyle.html