0

到目前为止,我对这段代码的主要关注是缺少返回语句。

public class stringstuff{

    //using charAt    
    public static String ReverseF(String n){
        String finalstring = "";
        int len = n.length();
        for (int i = 0; (i < n.length()); i++){
            finalstring += (n.charAt(len - i - 1));
        }
        System.out.println(finalstring);
    }

    public static void main(String[]args){
        ReverseF("Hello");
    }
}

使用此代码我只得到错误:

stringstuff.java:11: missing return statement
}
^
1 error

如果我将 System.out.println 切换为返回,我不会收到任何错误,但我也没有得到 ReverseF("Hello"); 的答案。

4

3 回答 3

5

你有两个选择:要么写

public static void /* not String */ ReverseF(String n){

或写入return finalStringReverseF使用

public static void main(String[]args){
  System.out.println(ReverseF("Hello"));
}
于 2013-10-22T18:30:45.493 回答
0

让我们分解函数标题中的关键字:

公共 - 任何功能都可以访问此功能
静态 - 此函数不对对象实例变量进行操作,并且不需要创建此对象的实例即可使用
字符串 - 此函数将返回一个字符串
..name.. - 函数的名称
(params) - 输入你的函数

现在请注意,Java 认为此函数将返回一个字符串。编译器检查是否有正确类型的 return 语句。

要么使用 void 作为函数类型并在函数内部打印字符串(就像您现在所做的那样),要么添加 return 语句并将打印移动到调用函数的位置(如已经建议的那样)。

高温高压

于 2013-10-22T18:38:59.233 回答
0

您收到编译错误“缺少返回语句”,因为您的返回语句丢失......

public class Stringstuff {

    // using charAt
    public static String reverseF(String n) {
        String finalstring = "";
        int len = n.length();
        for (int i = 0; i < n.length(); i++) {
            finalstring += n.charAt(len - i - 1);
        }

        return finalstring;
    }

    public static void main(String[] args) {
        System.out.println(reverseF("Hello"));
    }
}

您的方法是否有必要返回一个值?如果不是,只需将其从 String 更改为 void,在您的方法中进行打印并将其重命名为“printReverseF”之类的名称,以便您的方法名称表明它在做什么!

其他反馈:

  • 以小写开头的方法名称,因此您可以将它们与类区分开来
  • 对于循环中的字符串连接,您应该使用 StringBuilder/StringBuffer。然后 Java 不必为循环的每次迭代创建新的字符串对象——这可能是一个巨大的性能问题!
于 2013-10-22T18:32:48.337 回答