簡體   English   中英

數組中的重復輸入無效

[英]Duplicates in an array invalid input

我嘗試編寫一個簡單的代碼來檢查數組中是否存在重復的數字/小於數組大小的數字和大於數組的數字。 (例如,對於大小為7的數組,該數組中的數字應在1-7之間且沒有重復,否則,系統將顯示無效錯誤)當我輸入大小為1的數組並輸入數字時2例如,我收到以下錯誤消息:

線程“主”中的異常java.lang.ArrayIndexOutOfBoundsException:sumn.main處為1(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");
            }
        }   
    } 


}

問題在這條線

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

做了

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

j代替i

我猜第24行是if (Duplicates(arr)==false || N<arr[i] || arr[i]<=0) 這里的問題是,在您的第一個循環之后, i將獲得arr.length的值。 每次都會導致ArrayIndexOutOfBoundsException

您可以在該行上用j替換i ,這似乎是您想要的。 或者,您可以通過編寫類似以下的循環來“清理”一下並將范圍i為僅循環:

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

代替

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM