我必须用java编写一个程序,它搜索从1-6生成20个随机数

我必须用java编写一个程序,它搜索从1-6生成20个随机数,java,arrays,random,Java,Arrays,Random,我必须检查两个或两个以上的数字是否相等。 例如:523(44)62(1111)14563(222)5 下面的代码显示了此错误: java.lang.ArrayIndexOutOfBoundsException:20 守则: import java.util.Random; public class Ushtr3 { public static void main(String [] args){ int[] a = new int[20];

我必须检查两个或两个以上的数字是否相等。
例如:523(44)62(1111)14563(222)5

下面的代码显示了此错误:

java.lang.ArrayIndexOutOfBoundsException:20

守则:

import java.util.Random;

public class Ushtr3 {
        public static void main(String [] args){

            int[] a = new int[20];
            Random nr = new Random();

            System.out.println("Program:");

            for(int i=0; i<a.length; i++){
                a[i]=1+nr.nextInt(6);
            }

            for(int i=0; i<a.length; i++){
                System.out.print(a[i]);
            }

            System.out.print("\n");

            for(int i=0; i<a.length; i++){

                while(i!=19){
                    if((a[i]==a[i+1]) && (a[i]==a[i+2]) && (a[i]==a[i+3]) && (a[i]==a[i+4])){
                        System.out.print("("+a[i]+""+a[i+1]+""+a[i+2]+""+a[i+3]+""+a[i+4]+")");
                        i++;
                        break;
                    }
                    else if((a[i]==a[i+1]) && (a[i]==a[i+2]) && (a[i]==a[i+3])){
                        System.out.print("("+a[i]+""+a[i+1]+""+a[i+2]+""+a[i+3]+")");
                        i++;
                        break;
                    }
                    else if((a[i]==a[i+1])&& (a[i]==a[i+2])){
                        System.out.print("("+a[i]+""+a[i+1]+""+a[i+2]+")");
                        i++;
                        break;
                    }
                    else if(a[i]==a[i+1]){
                        System.out.print("("+a[i]+""+a[i+1]+")");
                        i++;
                        break;
                    }
                    else {
                        System.out.print(a[i]);
                    }
                    i++;
                }

            }
            System.out.print(a[19]);

        }

    }
import java.util.Random;
公共类Ushtr3{
公共静态void main(字符串[]args){
int[]a=新的int[20];
Random nr=新的Random();
System.out.println(“程序:”);

对于(int i=0;i你得到了异常,因为你允许我取最多18个值,然后这样做:
如果((a[i]==a[i+1])&&(a[i]==a[i+2])&&(a[i]==a[i+3])&&(a[i]==a[i+4])
,这会导致20个元素数组上的数组索引大于19

此外,您的代码似乎设计为只查找最多5个数字的运行。有一种更简单的方法:

int length = 1; // the length of the current run
int number = a[0]; // the number currently being repeated
for(int i = 1; i < a.length; i++) {
    if(a[i] == number)
        length++;
    else {
        if(length > 1) {
            System.out.print("(");
            for(int j = 0; j < length; j++)
                System.out.print(number);
            System.out.print(")");
        } else {
            System.out.print(number);
        }
        number = a[i];
        length = 1;
    }
}
if(length > 1) { // last run
   System.out.print("(");
   for(int j = 0; j < length; j++)
       System.out.print(number);
   System.out.println(")");
} else {
    System.out.println(number);
}
int length=1;//当前运行的长度
int number=a[0];//当前正在重复的数字
for(int i=1;i1){
系统输出打印(“”);
对于(int j=0;j1){//上次运行
系统输出打印(“”);
对于(int j=0;j
代码对我来说运行正常。你确定这就是全部吗?你删除了一些部分吗?有时它甚至对我来说运行正常,但有时它会显示错误。不,我没有,谢谢你的编辑如果第20位和第19位相等,初看起来你会出错。你将尝试读取[20]并获取越界错误。它有时只会遇到异常,因为
&&
导致Java在第一个表达式的计算结果为false后停止检查。由于数字是随机的,这有时会阻止访问“坏”数组索引。不是完全重复。当然,异常并不是什么新鲜事,但问题是“有人能告诉我是否还有其他方法吗?”这是一个值得回答的问题。你的答案非常好,没有显示任何错误,但我必须将所有随机数一起输出,如:523(44)62(1111)14563(222)5,顺便说一句,我的英语很抱歉。我已经编辑了我的代码。让我知道它是否对您有效。@Endrait有效,非常感谢@O.O.Balance