Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建随机字符串并充当密码生成器的程序_Java_String_Random - Fatal编程技术网

Java 创建随机字符串并充当密码生成器的程序

Java 创建随机字符串并充当密码生成器的程序,java,string,random,Java,String,Random,我正在编写这个程序,它要求用户输入密码长度,然后使用字符创建一个随机字符串,该字符串的长度为!到~。唯一让我困扰的是,它正在创建多个字符串,而我只需要一个字符串。如有任何意见,将不胜感激 import java.util.*; public class pw { public static void main(String[] arg) { Scanner in = new Scanner(System.in); Random gen = new Rand

我正在编写这个程序,它要求用户输入密码长度,然后使用字符创建一个随机字符串,该字符串的长度为!到~。唯一让我困扰的是,它正在创建多个字符串,而我只需要一个字符串。如有任何意见,将不胜感激

import java.util.*;
public class pw
{
    public static void main(String[] arg) {
        Scanner in = new Scanner(System.in);
        Random gen = new Random();
        System.out.println("Enter password length:  ");
        int length = in.nextInt();

        for (int i = 1; i < length; i++) {
            int slength = length + gen.nextInt(length - 1);
            StringBuilder s = new StringBuilder(slength);

            while (s.length() <= length) {
                s.append((char) (33 + gen.nextInt(126)));
            }
            System.out.println(s.toString());
        }
    }
}
import java.util.*;
公共类
{
公共静态void main(字符串[]arg){
扫描仪输入=新扫描仪(系统输入);
Random gen=新的Random();
System.out.println(“输入密码长度:”);
int length=in.nextInt();
for(int i=1;i虽然(s.length()您不需要外部for循环,但当“s”的长度小于或等于所需的长度时,您正在循环,因此不需要外部循环

public static void main(String[] arg) {
    Scanner in = new Scanner(System.in);
    Random gen = new Random();
    System.out.println("Enter password length:  ");
    int length = in.nextInt();

    int slength = length + gen.nextInt(length - 1);
    StringBuilder s = new StringBuilder(slength);

    while (s.length() <= length) {
        s.append((char) (33 + gen.nextInt(126)));
    }

    System.out.println(s.toString());
}
publicstaticvoidmain(字符串[]arg){
扫描仪输入=新扫描仪(系统输入);
Random gen=新的Random();
System.out.println(“输入密码长度:”);
int length=in.nextInt();
int SLENGHT=长度+gen.nextInt(长度-1);
StringBuilder s=新的StringBuilder(长度);

而(s.length()这应该只生成一个字符串:

import java.util.*;

public class pw {
    public static void main(String[]arg) {
        Scanner in = new Scanner(System.in);
        Random gen = new Random(); 
        System.out.println("Enter password length:  ");
        int length = in.nextInt();

        String s = "";
        while(s.length() <= length) {
            s += (char)(33 + gen.nextInt(126));    
        }
        System.out.println(s);
    }
}
import java.util.*;
公共类{
公共静态void main(字符串[]arg){
扫描仪输入=新扫描仪(系统输入);
Random gen=新的Random();
System.out.println(“输入密码长度:”);
int length=in.nextInt();
字符串s=“”;

而(s.length)我认为你不需要外部for循环。你想练习编程吗?如果不想,一个简单的默认密码生成可能是使用md5哈希,它很短而且随机。如果答案有帮助,请你将其标记为接受答案?我现在明白了。谢谢。使用StringBuilder的版本在性能方面更好一些。
import java.security.SecureRandom;
import java.util.Scanner;

public class PasswordGenerator {

    public static void main(final String[] args) {
        final Scanner scanner = new Scanner(System.in);
        System.out.print("Desired password length: ");
        final int length = scanner.nextInt();

        final PasswordGenerator generator = new PasswordGenerator();
        final String password = generator.generatePassword(length);
        System.out.println("Password: " + password);
    }

    public String generatePassword(final int length) {
        final StringBuilder builder = new StringBuilder();
        final SecureRandom rng = new SecureRandom();
        for (int i = 0; i < length; i++) {
            final char value = (char) (rng.nextInt(94) + 33);
            builder.append(value);
        }
        return builder.toString();
    }
}
public String generatePassword(final int length, final char[] characters) {
    final StringBuilder builder = new StringBuilder();
    final SecureRandom rng = new SecureRandom();
    for (int i = 0; i < length; i++) {
        final char value = characters[rng.nextInt(characters.length)];
        builder.append(value);
    }
    return builder.toString();
}