所以我做了一个随机密码生成器作为我的 Uni 类的作业,但是我确实遇到了一个问题,即代码中断并在第一次迭代时出现“java.lang.IndexOutOfBoundsException:无效数组范围:0 到 0”消息循环输入应该生成我的密码的方法。这是一个更新版本的代码,它实现了扫描仪作为用户从键盘输入他/她想要的密码长度的选项。在以前的版本中,当密码长度被硬编码为一个设定的数字时,它工作得很好。如果问题格式有任何错误,或者代码看起来很丑或其他什么,我会事先道歉,因为我的编码技能在我目前的阶段处于最底层。
package com.company;
import java.util.*;
public class Main {
static final String AllTheCharactersOnMyKeyBoard = "~!@#$%^&*()_+`1234567890-=QWERTYUIOP{}qwertyuiop[]ASDFGHJKL:|asdfghjkl;'|ZXCVBNM<>?zxcvbnm,./'";
static int PasswordLength;
static List<Character> ListOfCharsOnMyKBoard = convertsTheStringToCharacterList(AllTheCharactersOnMyKeyBoard);
static char[] GeneratedCharacters= new char[PasswordLength];
public static void main(String[] args) {
Scanner PassLengthScanner=new Scanner(System.in);
System.out.println("How many Symbols You wish the new password to contain?");
PasswordLength= PassLengthScanner.nextInt();
GeneratedPassword();
System.out.println(ListOfCharsOnMyKBoard);
System.out.println("\n\n\nYour Password is:");
System.out.println(GeneratedCharacters);
}
public static List<Character> convertsTheStringToCharacterList(String AllTheCharactersOnMyKeyBoard){
List<Character> MyKeyBoardCharacterList= new ArrayList<>();
for (char CHARACTER : AllTheCharactersOnMyKeyBoard.toCharArray()){
MyKeyBoardCharacterList.add(CHARACTER);
}
return MyKeyBoardCharacterList;
}
public static void GeneratedPassword(){
Random TheGenerator= new Random();
for (int i=0; i<PasswordLength; i++) {
char RandomOne = ListOfCharsOnMyKBoard.get(TheGenerator.nextInt(ListOfCharsOnMyKBoard.size()));
GeneratedCharacters[i]=(RandomOne);
}
}
}
堆栈跟踪是:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at com.company.Main.GeneratedPassword(Main.java:31)
at com.company.Main.main(Main.java:15)
程序的第 31 行是这一行:
GeneratedCharacters[i]=(RandomOne);