java冒泡排序 , 请各位看看为什么会报错

问题遇到的现象和发生背景
        想请大佬们看下我写的这个冒泡排序哪有问题
问题相关代码,请勿粘贴截图
        public class Bubble_Sort {
public static void main(String[] args) {
    int[] arr = {12, 34, 45 ,56 ,14} ;

    for (int i = 0; i < (arr.length -1); i++) {
        for (int i1 = 0; i1 < (arr.length - i); i1++) {
            if(arr[i1] > arr[i1 + 1]){
                int temp = arr[i1];
                arr[i1] = arr[i1 + 1];
                arr[i1 + 1] = temp ;
            }
        }
    }

    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + "\t");
    }
}
运行结果及报错内容

D:\Java\JDK\bin\java.exe "-javaagent:D:\java\IDEA\IntelliJ IDEA 2021.2.1\lib\idea_rt.jar=4325:D:\java\IDEA\IntelliJ IDEA 2021.2.1\bin" -Dfile.encoding=UTF-8 -classpath D:\java\java_code\out\production\arr study.Bubble_Sort
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
at study.Bubble_Sort.main(Bubble_Sort.java:9)

我的解答思路和尝试过的方法

在第一个for循环中 , 改为for(int i = 1 ; i <= (arr.lengthh - 1) ; i++) 就可运行

我想要达到的结果

我感觉这两种形式是一样的,但不知道问什么第一个会报错

img


第二个循环 改成 -1-i 就行了,
数组索引越界异常,数组下标从0开始的

索引越界异常,当i=0时,运行到 if(arr[i1] > arr[i1 + 1]) i1达到最大arr[i1+1] 超出了arr的大小

你看你第二个for循环里,i一开始是等于0,也就是说你i1<5,那么arr[i1+1]在i1等于4的时候就是arr[5],索引越界了,当然报错。

第二层循环多了一次,-1-i就行