java - 在 ArrayIndexOutOfBoundsException 中对程序执行结果进行排序
问题描述
请考虑以下代码:
import java.io.*; //Sorts by dividing the array in 2 groups then joining them
public class Esercizio29 {static void join(char[] a, int l, int m, int u) {
char[] b = new char[u - 1 + 1];
int i = l, j = m + 1, k = 0;
while (i <= m && j <= u)
if (a[i] <= a[j])
b[k++] = a[i++];
else
b[k++] = a[j++];
while (i <= m)
b[k++] = a[i++];
while (j <= u)
b[k++] = a[j++];
for (k = 0; k <= u - l; k++)
a[k + l] = b[k];
}
//Sorts the array from l to u
static void sort(char[] a, int l, int u) {
int m;
if (l != u) {
m = (l + u) / 2;
sort(a,l,m);
sort(a,m + 1,u);
join(a,l,m,u);
}
}
public static void main(String[] args) throws IOException{
final int N = 16;
char temp, v[] = new char[N];
for (int i = 0; i < N; i++)
v[i] = (char) System.in.read();
sort(v, 0, N - 1);
System.out.println("Vettore ordinato: ");
for(int i = 0; i < N; i++)
System.out.print(v[i]);
System.out.println();
}}
运行此代码后,它给了我这个结果:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Esercizio29.fondi(Esercizio29.java:14)
at Esercizio29.ordina(Esercizio29.java:27)
at Esercizio29.ordina(Esercizio29.java:25)
at Esercizio29.ordina(Esercizio29.java:25)
at Esercizio29.ordina(Esercizio29.java:25)
at Esercizio29.main(Esercizio29.java:39)
这个错误是什么意思,我该如何解决?谢谢你。
解决方案
实际上 java.lang.ArrayIndexOutOfBoundsException 意味着您正在访问大于数组大小的数组元素。
例子:
int[] array = {1,2,3,4};
for(int i=0;i<5;i++){
System.out.println(array[i]);//when i =4 it will show exception.
}
因为我只为数组分配了 4 个元素意味着数组大小为 4。现在,如果我想访问第 5 个元素,它将显示运行时异常,因为数组索引以 0 开头并且数组只有 4 个元素。在第 14 行的情况下,你是访问大于数组大小的数组元素。所以它会导致运行时异常“java.lang.ArrayIndexOutOfBoundsException”
推荐阅读
- postgresql - query gets very slow when :jsonb ?& operator is used
- python - 用于解析的协程与生成器
- python - 比较列表中的项目并选择最大的
- sql - 通过@parameter 将文件传递给OPENROWSET BULK json 查询,SQL 2016
- html - 嵌套 CSS 网格是不好的做法吗?
- python - 从 Python 中的 3d 数组的每个 2d 元素中减去 2d 数组-将 Matlab 代码转换为 Python
- sql - 在 SQL 中转换格式为 YYYY-MM-DD HH:MM:SS 的日期、日期和时间戳字符串
- sql - Postgres - 使用 \COPY 强制数字列中的 NULL 值
- r - Rcpp - 从自定义分布生成多个随机观察
- c# - 自动化引擎无法播放测试,因为它无法与桌面交互...但桌面未锁定