2 luke003 luke003 于 2016.01.27 17:12 提问

java小白求大神帮看一下为什么会发生数组越界。代码如下:

package arraytest;

public class ArrayTestSort {

public static void main(String[] args) {
    int i,j=0;
    int[] arr = new int[]{100,40,60,87,34,11,56,0};
    int temp = 0;
    for(i = 0;i<arr.length;i++){
        for(j = 0;j<arr.length-i-1;j++){//这里的j<arr.length-i-1 变成j<arr.length-i。时为什么会发生数组越界?
            if(arr[j]<arr[j+1]){
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
        System.out.print(arr[i]+"\t");
    }

}

}

9个回答

caozhy
caozhy   Ds   Rxr 2016.01.27 17:44
 for(i = 0;i<arr.length;i++){
for(j = 0;j<arr.length-i-1;j++)

->
for(i = 0;i<arr.length - 1;i++){
for(j = 0;j<i;j++)
a1104258464
a1104258464   2016.01.27 17:25

数组的下标是从0开始取得 arr[0]=100

prokechery
prokechery   2016.01.27 17:36

当i等于零时,j<arr.length-i-1 即j的最大取值是 arr.length-1。然后 j +1 的下标去访问 arr 就越界了。

enpterexpress
enpterexpress   Rxr 2016.01.27 18:30

当i等于arr.length-1时,j有一种小于0的情况,这是不行的

cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2016.01.27 20:20

j的最大取值是 arr.length-1

Chely_Yi
Chely_Yi   2016.01.27 23:47

i = 0的时候 j可以取到 length-1 但是你下面还要算arr[j+1] 数组最大下标是length-1 所以会越界啦

xionglangs
xionglangs   Rxr 2016.01.28 10:55

当i=0时,for(j=0;j<8-0;j++){}当j=7时,可以进入里面的循环,if(arr[7]<arr[8]){}这里arr[8]数组越界了。

Royal_lr
Royal_lr   Ds   Rxr 2016.01.28 11:24

当i=0时,,arr.length-0=8,,,当j=7时,,j+1=8,,arr[8]有没越界,,大声告诉我

91program
91program   Ds   Rxr 2016.01.27 17:20
当i等于零时,j<arr.length-i-1 即j的最大取值是 arr.length-1。然后 j +1 的下标去访问 arr 就越界了。
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
新手入门,学习java从小白到大神应该从何做起?
编程入门先学什么?关于编程,关于编程的基础语言,想要学习的朋友,一定会多多少少了解一些。像 C、C++、Python和Java四种都是通用的编程语言,而JavaScript和PHP算是Web环境的专用编程语言。但其实,编程的语言有很多种,想要入门编程,要学习的编程语言也很多。在这里我就简单总结下编程入门的一系列学习方法。        上面我们提到,学习编程的语言有很多种,像C、C++、Pyth
两道“诡异”的数组越界问题的分析
1、数组越界引起的死循环问题:#include "stdafx.h"int main(int argc, char* argv[]) { int i = 0; int arr[3] = {0}; for(i = 0; i<=3; i++){ arr[i] = 0; printf("hello world\n"); } return
Java数组越界问题
测试了 好久 总有错误,后来才发现是数组越界了 分享一下,希望能对大家有帮助 //时间:2013.10.30 //程序功能: 对学生成绩排序并且对应输出  //通过两个数组分别存储名字 和 成绩  然后降序排列输出 import java.util.Scanner; public class StudentSort { public static void main(S
从程序员小白到大神的正确打开方式!
原文地址 一个程序员大神是如何炼成的?突然想到了个问题。于是乎思考了下这个问题感觉很有意思,在上网找了些答案发现了成为一名优秀的程序员必备5个技能。 NO.1 问题分解 编程讲的是如何解决问题。但在你开始写代码之前,你需要清楚如何解决问题。一个好的程序员应该拥有这样的技能,他能将问题分解成子问题,直到每个子问题都可以很轻松地进行解决。不过要找到一个解决问题的方式可
为什么只会Vue的都是前端小白?
昨天发了一篇文章《Angular有哪些地方比Vue更优秀?》,碰到了小白们的痛处。从评论可以看出来,在国内这种以抄袭和跟风为荣的风气之下讲道理是很难的。 今天,我想再来撩一撩小白们脆弱的自尊。 请注意仔细看好标题,是“只会”,不是“会”,能理解区别吧? 比如某个人去你公司面试前端,你一定要问清楚他会哪些东西,除了Vue之外,还会不会jQuery?YUI?ExtJS?Dojo?Fl
代码干货|小白一夜变身前端大神,究竟经历了什么
作为刚刚接触前端的童鞋,对学习的方向可能会感到迷茫,通过阅读者篇文章相信会对你的学习方向有所帮助!
入门程序员——从小白到大神
新人自传
java中两大异常:空指针异常和数组越界异常
一、空指针异常   空指针异常是运行期的异常,编译的时候是不会检查的,只有运行的时候才会抛出,一般情况下如果出现了空指针异常,事先你不知道会有这个异常,就说明你的程序有bug,当然就要找出这个bug,然后在变量调用之前先给它赋值,另外有一种情况,你事先知道某个操作会抛出空指针异常,常见一些非法的操作,但是又无法避免用户执行这个操作,就可以通过try,catch块捕获这个异常,然后给用户一个反馈信
在for循环中remove list报错越界的问题
最近在搞一个购物车的功能,里面有一个批量删除的操作,采用的是ExpandableListView以及BaseExpandableListAdapter。视乎跟本篇无关紧要,主要是为了记录一个java基础。迭代器iterator的使用一、错误代码(主要就是购物车的批量删除)
牛客网“程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)”错误的可能原因
牛客网编程提示“程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)“的可能原因