java - 尝试从最大到最小对数组进行排序,但出现错误
问题描述
错误出现在用户输入 5 个单独的数字之后。我不确定为什么会收到此错误。Eclipse 中没有显示错误,我可以运行代码。
“线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:section8.arraysLists.Main.main(Main.java:33) 中的 5”
这是我的代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
int number = 5;
System.out.println("Enter " + number + " numbers to sort:");
int[] array = new int [number];
for (int i=0; i<array.length; i++) {
array[i] = scanner.nextInt();
}
int[] sortedArray = Arrays.copyOf(array, array.length);
boolean flag = true;
int temp;
while (flag) {
flag = false;
for (int i=0; i<sortedArray.length; i++) {
if (sortedArray[i] < sortedArray[i]+1) {
temp = sortedArray[i];
sortedArray[i] = sortedArray[i]+1;
sortedArray[i+1] = temp;
flag = true;
}
}
}
System.out.println("--Sorted Array--");
System.out.println("Element 0 is " + sortedArray[0]);
System.out.println("Element 1 is " + sortedArray[1]);
System.out.println("Element 2 is " + sortedArray[2]);
System.out.println("Element 3 is " + sortedArray[3]);
System.out.println("Element 4 is " + sortedArray[4]);
System.out.println("Element 5 is " + sortedArray[5]);
}
}
输出
Enter 5 numbers to sort:
1
5
6
7
87
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at section8.arraysLists.Main.main(Main.java:33)
解决方案
您正在尝试打印六个元素,但您的数组只有五个元素:数组的索引是从零开始的,那么由五个元素组成的数组只有以下索引值:0、1、2、3、4。
编辑
您的插入排序存在三个错误:
for (int i=0; i<sortedArray.length; i++) {
if (sortedArray[i] < sortedArray[i]+1) { // here you have
// to compare two consecutives array's values...
// in this manner this condition is always true!
temp = sortedArray[i];
sortedArray[i] = sortedArray[i]+1; // like previous one
sortedArray[i+1] = temp; // here --> ArrayOutOfBound when i = 4
flag = true;
}
}
也许正确的代码应该是:
for (int i=0; i<sortedArray.length - 1; i++) {
if (sortedArray[i] < sortedArray[i+1]) {
temp = sortedArray[i];
sortedArray[i] = sortedArray[i+1];
sortedArray[i+1] = temp;
flag = true;
}
}
推荐阅读
- javascript - Cannot use import statement outside a module(Vanilla Javascript)
- dataweave - For Loop dataweave mulesoft 问题
- node.js - Receive socket.io messages outside of connection
- angular - 将 JSON 查询的字段写入文件 Angular
- python - Extract values from a list using a numpy range of indices between every two numbers
- ada - External configuration of Project_Version in gpr file
- javascript - Issue with Pagination in nodejs with mongoose and query optimization
- amazon-dynamodb - Localstack + Jest: DynamoDB throws ResourceNotFoundException on deleteTable for an existing table
- postman - How to change the variables form environment to collection level in postman
- python - 如何使用 colmun 名称旋转 pandas.dataframe