Java数组总是溢出是怎么回事?求解!!

我在Java定义一个数组,然后通过变量输入数组大小,
再用for循环初始化数组,可总显示数组索引超出界限!!

public static void main(String[] args) {
        int n;
        Scanner s = new Scanner(System.in);
        n = s.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = s.nextInt();
        }
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > arr[i + 1]) {
                x = arr[i];
            }
        }
        System.out.println(BinarySearch(arr, x, n));
    }

这是其中一部分,我寻思for中i怎么就溢出了,i改为i<n 也不行

我的输入是 
7
1 2 3 9 8 6 5 

到底是怎么回事?

图片说明

32行,当i=6时候,i+1就为7,超过了数组的下标。你可以再加个判断条件 : (i+1)<n

32行arr[i+1]现在是arr[6+1],数组索引最大值必须为数组长度-1,即数组是7个元素,最大值的对应的为arr[6],而现在是arr[7],所以越界,要把31行的改成i<arr.length-1