【问题标题】:Return statement is not working properly in JavaReturn 语句在 Java 中无法正常工作
【发布时间】:2017-07-01 14:11:12
【问题描述】:

我有以下代码

static String super_reduced_string(StringBuilder s){
   for(int i=0;i<s.length()-1;i++){
       if(s.charAt(i)==s.charAt(i+1)){
           StringBuilder s1= s.delete(i,i+2);
           //System.out.println("Reduced String is "+s1 +s1.length());
           if(s1.length()==0){
               System.out.println("Reduced String is"+s1 +s1.length());
               return "Empty String";

               }
           super_reduced_string(s1);
       }
   }
    return s.toString();
}

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    String s = in.next();
    String result = super_reduced_string(new StringBuilder(s));
    System.out.println(result);
}

当我将输入作为 "aa" 传递时,它返回 "Empty String" 作为输出,但是当我传递 "baab" 时,它返回 null 作为输出。我不明白为什么会这样。

谁能解释一下?

【问题讨论】:

    标签: java null return


    【解决方案1】:

    您已设置删除重复的字母:

    if(s.charAt(i)==s.charAt(i+1)){
               StringBuilder s1= s.delete(i,i+2);
    

    因此,当您将aa 传递给该方法时,它将删除两个字母,因为它们是相同的。如果您通过baab,它将删除aa,留下bb,然后它将删除bb,因为它们也是重复的。

    编辑:

    您需要添加一个return 语句,如果您的if 不执行该语句:

    static String super_reduced_string(StringBuilder s){
           for(int i=0;i<s.length()-1;i++){
               if(s.charAt(i)==s.charAt(i+1)){
                   StringBuilder s1= s.delete(i,i+2);
                   //System.out.println("Reduced String is "+s1 +s1.length());
                   if(s1.length()==0){
                       System.out.println("Reduced String is"+s1 +s1.length());
                       return "Empty String";
    
                       }
    
                   /*
                    * Needs a return statement, otherwise it will return the
                    * empty value below
                    */
                   return super_reduced_string(s1);
               }
           }
            return s.toString(); 
            /*
             * If the if statement does not execute,
             * and the statement above is missing a
             * return declaration, then this will return
             * an empty string: ""
             */
        }
    

    【讨论】:

    • 是的,在这种情况下它也应该返回“空字符串”对吗?,但它没有返回“空字符串”
    • 当我调试代码时,它进入了 if(s1.length()==0) 循环,打印了 syso 语句,但它没有返回“空字符串”。
    • @Ravi 索引从零开始,所以你应该检查if(s1.length() == -1){}
    • 把代码改成 if(s1.length() == -1){}
    • 您可能想重新考虑您在这里写的内容:if(s1.length() == 0 || s1 == null)。这真的有意义吗?
    猜你喜欢
    • 1970-01-01
    • 2020-09-20
    • 2016-03-05
    • 2020-07-09
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    相关资源
    最近更新 更多