-2

我想将第一种方法更改为 while 和 for 循环。我在下面添加了代码。它是否正确?

public String extractWordFour(String text){
        if(text.length()==0 || text.charAt(0) == ''){
            return "";
        } else {
            return text.charAt(0) + extractWordFour(text.substring(1));
        }
    }

public String extractWordFour(String text){
    int i=0;
    while (i<=text.length){
        return text.charAt(0) + extractWordFour(text.substring(i));
        i++;
    }
}

public String extractWordFour(String text){
    for(int i=0;i<=text.length();i++){
        return text.charAt(0) + text.substring(1);
    }
}
4

2 回答 2

2

我不打算回答这个问题,因为我认为它是一个硬件任务,但我将它放在一个答案中,因为我无法将它放在评论中,但我假设你想将递归解决方案转换为while 或 for 循环解决方案。

您的 while 解决方案首先是错误的,因为您将递归和 while 混合在一起。您不应该在 while 循环中调用该函数!

public String extractWordFour(String text){
    int i=0;
    while (i<=text.length){
        return text.charAt(0) + extractWordFour(text.substring(i));
        i++;
    }
}

这个无法完成,因为您在它甚至不止一次循环之前返回它。

public String extractWordFour(String text){
    for(int i=0;i<=text.length();i++){
        return text.charAt(0) + text.substring(1);
    }
}

无论如何希望这会有所帮助。最好的办法是完全理解第一个函数的作用,把它写下来,然后考虑如何用 while 或 for 循环让它做同样的事情。

于 2012-08-22T15:16:46.910 回答
1

首先,您不能拥有String.charAt(0) == '',因为''它不是有效字符,""这与有效的空字符串不同。

您的第二种方法不起作用,因为当您在数组上调用它时,它应该text.length()代替which 方法,并且由于递归而无法访问。如果做不到这一点,方法签名声称它返回一个字符串,但没有返回语句。text.lengthi++

您的第三种方法确实有一个 return 语句,但它仍然不起作用,因为它只会在第一次迭代时返回,因此只给您前 2 个字符(实际上您的编译器甚至不会允许它,因为它会没有意识到这一点)。

除了所有这些问题,如果方法名称extractWordFour是他们应该做什么的准确表示,它们都不会,因为逻辑没有意义。我建议您首先考虑一下:如何通过检查字符串来判断一个单词何时结束,以及您的程序需要知道什么才能删除第四个单词之前的所有内容,以及它之后的所有内容?

于 2012-08-22T15:25:13.783 回答