为了账号安全,请及时绑定邮箱和手机立即绑定

Java递归代码未返回预期结果

Java递归代码未返回预期结果

隔江千里 2021-11-17 17:02:39
以下是不返回我预期的时间和内容的代码。我已经包含了调试消息的输出。感谢您花时间回顾我所做的一切。package module4;import java.nio.charset.spi.CharsetProvider;import java.util.Scanner;public class LabRecursive{    public static void main(String[] args) {        // Prompt user and call the method        Scanner s = new Scanner(System.in);        System.out.print("Enter a string: ");        String var = s.next();        System.out.println("There is/are " + vowels(var, 0, 0) + " vowel(s) in the string " + var);        s.close();    }    public static int vowels(String input, int currentPos, int amount) {        // Create the arrays of chars to hold vowels and the input        System.out.println("Amount at beginning: " + amount);        char[] vow = {'a', 'e', 'i', 'o', 'u'};                char[] entered = input.toLowerCase().toCharArray();        int stringLength = input.length();        System.out.println("stringlength " + stringLength);        if (currentPos < stringLength) {            for (int i=0; i<5; i++) {                if (entered[currentPos] == vow[i]) {                    amount++;                    System.out.println("vowel: " + entered[currentPos]);                    System.out.println("amount: " + amount);                    continue;                }            }                currentPos++;                System.out.println("Amount before calling the recursive function: " + amount);                System.out.println("currentPos before calling the recursive function: " + currentPos);                vowels(input, currentPos, amount);               }        System.out.println("Amount before returning the final amount: " + amount);        return amount;    }   }输入字符串:ijo开始金额:0字符串长度 3元音:我数量:1调用递归函数前的量:1调用递归函数前的 currentPos: 1开始数量:1字符串长度 3调用递归函数前的量:1调用递归函数前的 currentPos:2开始数量:1字符串长度 3元音:o数量:2调用递归函数前的数量:2调用递归函数前的 currentPos:3开始数量:2字符串长度 3返回最终金额前的金额:2返回最终金额前的金额:2返回最终金额前的金额:1返回最终金额前的金额:1字符串 ijo 中有 1 个元音
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

此更改应该解决此问题。

vowels(input, currentPos, amount);

amount = vowels(input, currentPos, amount);


查看完整回答
反对 回复 2021-11-17
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

提高速度并更好地使用递归方法。

所有输入参数甚至可以是只读的。


public static int vowels(final String input, final int currentPos, final int amount) {

    // Create the arrays of chars to hold vowels and the input

    System.out.println("Amount at beginning: " + amount);

    char[] vow = {'a', 'e', 'i', 'o', 'u'};        

    char[] entered = input.toLowerCase().toCharArray();

    int stringLength = input.length();


    System.out.println("stringlength " + stringLength);


    if (currentPos < stringLength) {

        for (int i=0; i<5; i++) {

            if (entered[currentPos] == vow[i]) {

                System.out.println("vowel: " + entered[currentPos]);

                System.out.println("amount: " + amount);

                return vowels(input, currentPos + 1, amount + 1); 

            }

        }


        System.out.println("Amount before calling the recursive function: " + amount);

        System.out.println("currentPos before calling the recursive function: " + currentPos);

        return vowels(input, currentPos + 1, amount);       

    }


    System.out.println("Amount before returning the final amount: " + amount);

    return amount;

}   


查看完整回答
反对 回复 2021-11-17
  • 2 回答
  • 0 关注
  • 263 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信