Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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 我的程序落后于>;100字符密钥_Java - Fatal编程技术网

Java 我的程序落后于>;100字符密钥

Java 我的程序落后于>;100字符密钥,java,Java,我的类生成密码滞后于长度>100的密钥,并引发异常。 这是我的密钥生成器类: package dialogs; import java.io.IOException; import java.util.Random; public class AdvKey { byte[] concatenateByteArrays(byte[] a, byte[] b) { byte[] result = new byte[a.length + b.length];

我的类生成密码滞后于长度>100的密钥,并引发异常。 这是我的密钥生成器类:

package dialogs;

import java.io.IOException;
import java.util.Random;

public class AdvKey {
    byte[] concatenateByteArrays(byte[] a, byte[] b) {
        byte[] result = new byte[a.length + b.length]; 
        System.arraycopy(a, 0, result, 0, a.length); 
        System.arraycopy(b, 0, result, a.length, b.length); 
        return result;
    } 
    private byte[] arr=null;
    private byte[][] characters={"!@#$%^&*()_+=".getBytes(), 
                                  "1234567890".getBytes(), 
                                  "qwertyuiopasdfghjklzxcvbnm".getBytes(), 
                                  "QWERTYUIOPASDFGHJKLZXCVBNM".getBytes()};
    public AdvKey(int size, boolean specials, boolean numbers, boolean charactersb, boolean bigCharacters) throws IOException {
        byte[] characters1 = new byte[512];
        characters1="1234567890".getBytes();
        if(specials){
            characters1=concatenateByteArrays(characters1, characters[0]);
        }
        if(numbers){
            characters1=concatenateByteArrays(characters1, characters[1]);
        }
        if(charactersb){
            characters1=concatenateByteArrays(characters1, characters[2]);
        }
        if(bigCharacters){
            characters1=concatenateByteArrays(characters1, characters[3]);
        }
        arr=new byte[size];
        Random r = new Random();
        r.setSeed(System.currentTimeMillis());
        for(int i = 0; i < arr.length; i++){
            arr[i]=characters1[r.nextInt((characters1.length - 0) + 1) + 0];
        }
    }
    @Override
    public String toString(){
        return new String(arr);
    }
}

这是你必须改变的路线

arr[i]=characters1[r.nextInt((characters1.length - 0) + 1) + 0];

Random#nextInt
将生成从
0
输入-1的数字。如果使用的是
characters1.length+1
,则要求程序生成从
0
characters1.length
的数字。由于数组的长度始终为
lastIndex+1
,因此您将获得
ArrayIndexOutOfBoundsException

例子 如果数组的长度是84,那么实际上是要求生成0到84之间的数字(85个元素,因此多了一个)



PS:
-0
+0
是怎么回事?:)

你真的减了零?然后又加了一次?o、 0您的错误可能是您想在此处减去一。。。
String output = new AdvKey(200, true, true, true, true).toString();
arr[i]=characters1[r.nextInt((characters1.length - 0) + 1) + 0];
arr[i]=characters1[r.nextInt(characters1.length)];