gpt4 book ai didi

java - 为什么我的代码不正确(处理字符串)?

转载 作者:行者123 更新时间:2023-11-30 05:21:24 24 4
gpt4 key购买 nike

我目前正在学习 super 技能在线类(class)。有一个任务:

The password is hard to crack if it contains at least A uppercase letters, at least B lowercase letters, at least C digits and includes exactly N symbols. Also, a password cannot contain two or more same characters coming one after another. For a given numbers A, B, C, N you should output password that matches these requirements.

这是我的代码:

import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int upper = scan.nextInt();
int lower = scan.nextInt();
int digits = scan.nextInt();
int quantity = scan.nextInt();
String symbolsUpper = "QWERTYUIOPASDFGHJKLZXCVBNM";
String symbolsLower = "qwertyuiopasdfghjklzxcvbnm";
String symbolsDigits = "1234567890";
boolean exit = false;
Random random = new Random();
ArrayList<Character> password = new ArrayList<>();
if (upper > 0) {
for (int i = 0; i < upper; i++) {
password.add(symbolsUpper.charAt(random.nextInt(symbolsUpper.length())));
}
}
if (lower > 0) {
for (int k = 0; k < lower; k++) {
password.add(symbolsLower.charAt(random.nextInt(symbolsLower.length())));
}
}
if (digits > 0) {
for (int z = 0; z < digits; z++) {
password.add(symbolsDigits.charAt(random.nextInt(symbolsDigits.length())));
}
}
if (quantity - digits - upper - lower > 0) {
for (int m = 0; m < (quantity - digits - upper - lower); m++) {
password.add(symbolsDigits.charAt(random.nextInt(symbolsDigits.length())));
}
}
Collections.shuffle(password);
while (!exit) {
if (password.size() > 1) {
for (int i = 1; i < password.size(); i++) {
if (password.get(i).equals(password.get(i - 1))) {
char buffer = password.get(i);
password.remove(i);
password.add(buffer);
i--;
} else {
exit = true;
}
}
} else {
exit = true;
}
}
StringBuilder buildPassword = new StringBuilder();
for (Character character : password) {
buildPassword.append(character);
}
System.out.println(buildPassword);
}
}

当我在 IntelliJ IDEA 中运行代码时,程序运行得很好,但是,hyperskill 平台不接受此代码作为正确的代码。主题是“处理字符串”。

这里有人可以告诉我,我做错了什么吗?有更好的方法来编写这段代码吗?

最佳答案

Can anyone here tell me please, what am I doing wrong?

问题是,由于随机数的性质,您可能在选择的字符中非常不走运。这可能会导致两个问题:

  1. 您可以从字符池中选择相同的字符。当您使用输入 0 0 0 2 创建密码时,可能会选择两个相同的数字。例如,密码“55”永远无法满足相邻两个字符不相同的条件,无论您洗牌多少次。

  2. 当密码很长并且您发现两个相邻的字符相同时,您可以将其中一个字符放在最后。对于同一角色,这种情况可能会发生两次。这意味着密码 "........44........44........." 可以生成密码 ".........4.........4.........44",现在你又拥有了两个相同的角色(最后)。

Is there a better way to write this code?

是的。

关于java - 为什么我的代码不正确(处理字符串)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59530715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com