For循环在完成程序之前只运行一次 import java.util.Random; 导入java.util.Scanner; 公共类密码{ 公共静态void main(字符串[]args){ 字符串[]字符={“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”}; StringBuilder b=null; 扫描仪扫描=新扫描仪(System.in); System.out.println(“输入密码长度”); int length=scan.nextInt(); 而(长度>20 | |长度

For循环在完成程序之前只运行一次 import java.util.Random; 导入java.util.Scanner; 公共类密码{ 公共静态void main(字符串[]args){ 字符串[]字符={“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”}; StringBuilder b=null; 扫描仪扫描=新扫描仪(System.in); System.out.println(“输入密码长度”); int length=scan.nextInt(); 而(长度>20 | |长度,java,for-loop,Java,For Loop,No),循环正在运行多个迭代-但在每次迭代中,您都在创建一个新的StringBuilder: import java.util.Random; import java.util.Scanner; public class PassGen { public static void main(String[] args) { String[] characters = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O",

No),循环正在运行多个迭代-但在每次迭代中,您都在创建一个新的StringBuilder:

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

public class PassGen {
public static void main(String[] args) {
    String[] characters = {"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"};
    StringBuilder b = null;

    Scanner scan = new Scanner(System.in);
    System.out.println("Enter password length.");
    int length = scan.nextInt();
    while (length > 20 || length < 6) {
        System.out.println("Password must be between 6 and 20 characters long.");
        length = scan.nextInt();
    }

    Random rand = new Random();

    for (int i = 0; i <= length; i++) {
        int x = rand.nextInt(characters.length) + 1;
        b = new StringBuilder(length + 1);
        String s = characters[x];
        b.append(s);
    }

    System.out.println("Your password is: " + b.toString());
}
}
请注意,有时,我希望循环会抛出异常-如果没有,您最终将得到一个比您希望的长度更长的字符串。基本上,您会出现三个一个错误…您应该:

// This is inside the loop, but should be outside.
b = new StringBuilder(length + 1);

需要在for循环之外。按照您的方式,每次运行for循环时都会创建
b

您总是在循环内重新创建
b
对象。它总是只包含一个字符。

该死,我需要键入比Jon Skeet更快的字符。

o.o:p
b = new StringBuilder(length);
for (int i = 0; i < length; i++) {
    int x = rand.nextInt(characters.length);
    b.append(characters[x]);
}
String characters = "ABCDE...9";
...

int x = rand.nextInt(characters.length());
b.append(characters.charAt(x));
    b = new StringBuilder(length + 1);