数组在java中是越界的,但在C中是有效的

数组在java中是越界的,但在C中是有效的,java,Java,嘿,伙计们,我遇到了这个错误,我在C中也遇到了同样的错误,但在java中遇到了错误“线程中的异常”main“java.lang.ArrayIndexOutOfBoundsException:5”你能看看这个--> import java.util.Scanner; 类排序{ 公共静态void main(字符串参数[]){ 扫描器obj=新扫描器(System.in); int a[]=新int[5]; int i,j; 内部温度; System.out.println(“输入数组的元素:”);

嘿,伙计们,我遇到了这个错误,我在C中也遇到了同样的错误,但在java中遇到了错误“线程中的异常”main“java.lang.ArrayIndexOutOfBoundsException:5”你能看看这个-->

import java.util.Scanner;
类排序{
公共静态void main(字符串参数[]){
扫描器obj=新扫描器(System.in);
int a[]=新int[5];
int i,j;
内部温度;
System.out.println(“输入数组的元素:”);
对于(i=0;i<5;i++){
a[i]=obj.nextInt();
}
对于(i=0;i<5;i++)
对于(j=0;j<5;j++){
if(a[i+1]
在任何语言中,访问有界数组元素都是错误的

例如,在C中:

int a[1];
int tmp = a[5];
错误(即使没有崩溃或执行)

因此,您的java代码是错误的,请不要访问任何语言中的任何外边界元素。

您的问题在于:

    for (i = 0; i < 5; i++)
        for (j = 0; j < 5; j++) {
            // When `i` == `4` this accesses `a[5]` which does not exist.
            if (a[i + 1] < a[i]) {
(i=0;i<5;i++)的

对于(j=0;j<5;j++){
//当'i`=='4'时,它访问不存在的'a[5]'。
if(a[i+1]
伙计,您不能将i设置为等于或大于5(索引为0到4) 因此,当它在第二个循环中达到i==4,并且使用[i+1]时,您将得到一个outofbound异常

for (i = 0; i < 4; i++)
            for (j = 0; j < 5; j++) {
                if (a[i + 1] < a[i]) {
                    temp = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = temp;
                }
            }
(i=0;i<4;i++)的

对于(j=0;j<5;j++){
if(a[i+1]
可能是因为C没有检查数组边界?在这个代码中
如果(a[i+1]我看不出有什么理由对各种语言感到奇怪。在C中,你没有发现这一点,因为C没有显式检查。尽管我认为在某些C/C++版本中,你会遇到错误。底线是听Java错误并停止越界。提示:A)只需在谷歌上搜索异常消息,B)学习阅读该异常消息。Java消息通常非常容易被人阅读。数组超出范围,它会给你行号,并告诉你无效的索引。你还需要什么来理解这个问题?
for (i = 0; i < 4; i++)
            for (j = 0; j < 5; j++) {
                if (a[i + 1] < a[i]) {
                    temp = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = temp;
                }
            }