复制数组无效输入

时间:2017-12-07 07:36:49

标签: java arrays duplicates

我尝试制作一个简单的代码,用于检查数组中是否存在小于数组大小的重复数字/数字以及大于数组大小的数字。 (例如,对于大小为7的数组,数组中的数字应该在1-7之间,没有重复,否则系统将打印无效错误) 当我输入一个大小为1的数组并输入数字2时,我得到以下错误信息:

  

线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:1       在sumn.main(sumn.java:24)

这是代码本身,有关如何解决此问题的任何想法?

public class sumn {
    public static boolean Duplicates(int arr[]) {
        int a, b;
        boolean flag = true;
        for (a=0;a<arr.length-1;a++) {
            for (b=a+1;b<arr.length;b++) {
                if (arr[b]==arr[a]) {
                    return false;                       
                }               
            }
        }
        return flag;
    }

    public static void main(String[] args) {
        int N = MyConsole.readInt("Enter the size of the array:");
        int arr[] = new int [N];
        int i, j;
        boolean flag = true;
        for (i=0;i<arr.length;i++) {
            arr[i]= MyConsole.readInt("Enter a number between 1 to ");  
        }
        for (j=0;j<arr.length;j++) {
            if (Duplicates(arr)==false || N<arr[i] || arr[i]<=0) 
                flag = false;
            if (flag == false)  {
                System.out.println("Invalid input");
            }
        }   
    } 


}

2 个答案:

答案 0 :(得分:2)

问题出在这一行

if (Duplicates(arr)==false || N<arr[i] || arr[i]<=0) 

制作

if (Duplicates(arr)==false || N<arr[j] || arr[j]<=0) 

i替换为j

答案 1 :(得分:1)

我猜测第24行是if (Duplicates(arr)==false || N<arr[i] || arr[i]<=0)。这里的问题是,在第一次循环后,i的值为arr.length。这将导致每次ArrayIndexOutOfBoundsException

您可以在该行上将i替换为j,这似乎是您打算做的。或者您可以通过编写循环来“清理”一点并将范围i仅限于循环:

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

而不是

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