Java冒泡出现了逻辑错误,求前辈指教

问题描述:

package Demo01;

import java.util.Scanner;

public class Demo11 {

public static void main(String[] args){
Scanner sc = new Scanner(System.in); 
int [] arr = new int [5];
for(int i = 0;i < 5;i++){
    System.out.println("请输入第:"+(i+1)+"个数");
     arr[i] = sc.nextInt();
}
int a = 0;
for(int j = 0;j < arr.length - 1;j++){
    for (int k = 0; k < arr.length - j; k++) {
        a = arr[k];
        arr[k] = arr[k+1];
        arr[k+1] = a;
    }
}
for(int l = 0;l < arr.length - 1 ;l++){
    System.out.println(arr[l]);
}

}
}
打印的时候少了一个数,是什么鬼?

 Scanner sc = new Scanner(System.in); 
        int [] arr = new int [5];
        for(int i = 0;i < 5;i++){
            System.out.println("请输入第:"+(i+1)+"个数");
             arr[i] = sc.nextInt();
        }
        int a = 0;
        for(int j = 0;j < arr.length - 1;j++){
            for (int k = 0; k < arr.length - j-1; k++) {
                if(arr[k] > arr[k+1]){
                    a = arr[k];
                    arr[k] = arr[k+1];
                    arr[k+1] = a;
                }
            }
        }
        for(int l = 0;l < arr.length  ;l++){
            System.out.println(arr[l]);
        }

最后输出数组错了

for(int l = 0;l < arr.length ;l++){
System.out.println(arr[l]);
}

package Demo01;

import java.util.Scanner;

public class Demo11 {

public static void main(String[] args){
Scanner sc = new Scanner(System.in); 
int [] arr = new int [5];
for(int i = 0;i < 5;i++){
    System.out.println("请输入第:"+(i+1)+"个数");
     arr[i] = sc.nextInt();
}
int a = 0;
for(int j = 0;j < arr.length - 1;j++){
    for (int k = 0; k < arr.length - j; k++) {
        if(arr[k] > arr[k+1]){
        a = arr[k];
        arr[k] = arr[k+1];
        arr[k+1] = a;
    }
    }
}
for(int l = 0;l < arr.length ;l++){
    System.out.println(arr[l]);
}

}
}
改了改 还是不行,开始报错了

数组越界了, k<arr.length -j -1 就对了

for (int k = 0; k < arr.length - j-1; k++) {
}