方法不允许返回字符串。

4
我有一个递归生成随机密码的方法,要求至少有一个大写字母。我已经设置好了这个方法,但出现了错误提示,说这个方法必须返回一个字符串类型,尽管我已经在if语句中定义了返回类型。

问题:我该如何消除这个错误或修复我的方法以使其返回密码?
public static char[]chars = {'a','b','c','d','e','f','g','h','i','j','k','l','m',
                'n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5',
                '6','7','8','9','!','@','$','%','^','&'};

            public static String generatePassword(Random rand, String password, int position, int size) //this method must return a result of type String
            {
                boolean isLowerCase = rand.nextBoolean();
                int randomChar = rand.nextInt(chars.length);
                char c = chars[randomChar];
                if(position == size) //base case
                {
                    return password; //string is returned here? 
                }
                if(isLowerCase)
                {
                    generatePassword(rand, password + c, position + 1, size);
                }
                else //its either upper or lower case
                {
                    generatePassword(rand, password + Character.toUpperCase(c), position + 1, size);
                }

return generatePassword(rand, password + c, position + 1, size);(以及其他的 else 条件)是什么意思? - MadProgrammer
2个回答

2

在您所有执行组合的方法中,应该返回一个字符串。以下是您的方法应该的样子。

    public static String generatePassword(Random rand, String password, int position, int size) //this method must return a result of type String
    {
        boolean isLowerCase = rand.nextBoolean();
        int randomChar = rand.nextInt(chars.length);
        char c = chars[randomChar];
        if(position == size) //base case
        {
            return password; //string is returned here? 
        }
        if(isLowerCase)
        {
            return generatePassword(rand, password + c, position + 1, size);
        }
        else //its either upper or lower case
        {
            return generatePassword(rand, password + Character.toUpperCase(c), position + 1, size);
        }
     }

我明白了,我之前只是假设有一个返回类型就可以满足条件。没有意识到每次都必须返回一些东西,但是当你想一想的时候,这似乎是有道理的。非常感谢您,@Eranda!这似乎解决了我的问题。 - jordanomac

0

这对我来说似乎不是一个递归解决方案的好地方,我建议您使用一个 StringBuilder 和一个单一的 static Random。再加上一个单一的 size 参数传递给您的方法。就像这样:

private static Random rand = new Random();
public static String generatePassword(int size) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < size; i++) {
        int randomChar = rand.nextInt(chars.length);
        char ch = chars[randomChar];
        if (Character.isLetter(ch)) {
            if (rand.nextBoolean()) {
                ch = Character.toUpperCase(ch);
            }
        }
        sb.append(ch);
    }
    return sb.toString();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,