1

以下 Java 不起作用,因为它缺少 return 语句。我不知道出了什么问题。有任何想法吗?

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

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

4

4 回答 4

1

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

解决方案1:尝试将 return 也放入 If 块中(根据您的要求)

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

于 2013-03-31T08:52:50.220 回答
1

您的 return 语句位于 else 块中,因此编译器不知道运行时函数是否会返回某些内容。

将其更改为

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

应该可以正常工作

于 2013-03-31T08:53:55.543 回答
0
if (username.length() > usernameLimit) {
    System.out.println("overlimit");
    ////////////return what??? 
 }

问题来了,方法需要return语句的时候username.length() > usernameLimit

于 2013-03-31T08:51:57.927 回答
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

于 2013-03-31T09:27:58.447 回答