【问题标题】:(Java)Conditional statements(Java)条件语句
【发布时间】:2012-10-14 00:14:53
【问题描述】:

首先,抱歉代码有点乱。它的格式不太好。我的任务是随机生成一个由大小写字母组成的密码,长度由用户指定。到目前为止,我的代码还没有完成,但那是因为我遇到了问题。

我的密码会显示大小写字母,但不够长。

例如,如果某人想要一个长度为 14 的密码,我只会得到一个小于该长度的密码。它永远不是它应该的长度。

import java.util.Scanner;
import java.util.Random;

public class Password{
    public static void main(String [] args){
        Scanner in = new Scanner(System.in);
        int passwordLength = 0;
        Random randNum = new Random();
        int randNumAscii = 0;
        String generatedPassword = "";

        System.out.print("Password Length (1-14): ");
        passwordLength = in.nextInt();
        for(int count = 0; count < passwordLength; count++){ 
            randNumAscii = randNum.nextInt(123);
            if(randNumAscii >= 65 && randNumAscii <= 90 || randNumAscii >= 97 && randNumAscii <= 122)
                generatedPassword += (char)randNumAscii;
            else
                randNumAscii = randNum.nextInt(123); 
        }
        System.out.println(generatedPassword);
    }
}

【问题讨论】:

  • 乍一看,我不确定你的问题是什么。
  • 所以当用户选择数字 2 并假设长度为 14 时,生成的密码应该由大小写字母组成,长度为 14 个字符。我的问题是它最终少于 14 个字符。

标签: java loops while-loop if-statement


【解决方案1】:

这是因为您只在生成的密码中添加一个字符,如果它在您选择的范围内。如果一个字符在randNumAscii &gt;= 65 &amp;&amp; randNumAscii &lt;= 90 || randNumAscii &gt;= 97 &amp;&amp; randNumAscii &lt;= 122 之外随机化,则永远不会将其附加到字符串中。

您可以做的是要么在 for 循环内有一个 while 循环,一直持续到满足该条件,要么继续 for 循环但将 count 变量减一,以便“使用该索引”生成一个新字符,以便说话。

【讨论】:

  • 我什至没有考虑减少计数变量。感谢您帮助我以一种全新的方式思考问题,从而解决了我的问题。
【解决方案2】:

正如您所说,您的问题出在此处:

randNumAscii = randNum.nextInt(123);
if(randNumAscii >= 65 && randNumAscii <= 90 || randNumAscii >= 97 && randNumAscii <= 122)
    generatedPassword += (char)randNumAscii;
else
    randNumAscii = randNum.nextInt(123); 

让我解释一下原因:

基本上,当userSelection == 2 时,您的代码会说:“对于给定长度的每个空格,选择一些随机字符。如果它是大写或小写,则添加它。否则,更改它。”但是,您忘记做的是附加“更改”的随机字符。

你需要在这里做的是这样的(伪代码):

randNumAscii = [random from 0 to 123]
while randNumAscii is not uppercase and not lowercase:
    randNumAscii = [random from 0 to 123]
append (char)randNumAscii to generatedPassword

由于这是一项任务,因此我将实施留给您。因为我不确定您的技能水平,您可能需要阅读the documentation on while

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-16
    • 2011-03-21
    • 2012-03-09
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多