黑马程序员技术交流社区

标题: int q = x[i-1];可以这么输入么 [打印本页]

作者: 24岁???    时间: 2014-4-27 17:21
标题: int q = x[i-1];可以这么输入么
class class2
{
        public static void main(String[] args)
        {
                int d=0;
                int[] x={5,6,9,6,45,12,32,58,98,7,95};
                        for(int i=1;i<=x.length;i++){
                                int q = x[i-1];
                                int w = x[i];
                                d = max(q,w);
                                }
                        System.out.println("最大的是 "+d);
}
        public static int max(int z,int y){
        if(z>y)
                return z;
        else
                return y;
        }
}

读取不报错,但是不能输出
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11


作者: a3330682    时间: 2014-4-27 17:31
class class2
{
        public static void main(String[] args)
        {
                int d=0;
                int[] x={5,6,9,6,45,12,32,58,98,7,95};
                        for(int i=1;i<=x.length;i++){
                                int q = x[i-1];
                                int w = x[i];//这里角标越界了
                                d = max(q,w);
                                }
                        System.out.println("最大的是 "+d);
}
        public static int max(int z,int y){
        if(z>y)
                return z;
        else
                return y;
        }
}
角标是从0开始的;你x[i]当i=length时候就越界了!
作者: 曲佳奇    时间: 2014-4-27 17:32
本帖最后由 曲佳奇 于 2014-4-27 17:35 编辑
  1. class class2
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int d=0;
  6.                 int[] x={5,6,9,6,45,12,32,58,98,7,95};
  7.                         for(int i=1;i<x.length;i++){    // 循环会运行到i=11 但是因为数组里面没有X[11] 会报错 改成小于就好了
  8.                                 int q = x[i-1];
  9.                                 int w = x[i];
  10.                                 d = max(q,w);
  11.                                 }
  12.                         System.out.println("最大的是 "+d);
  13. }
  14.         public static int max(int z,int y){
  15.         if(z>y)
  16.                 return z;
  17.         else
  18.                 return y;
  19.         }
  20. }
复制代码



作者: 左拉    时间: 2014-4-27 17:33
本帖最后由 左拉 于 2014-4-27 17:39 编辑

数组角标越界啊
在这里你的数组长度是11,数组的下标只能是0-10,你从x[1]开始遍历数组
当你的循环到最后一个时

  1. for(int i=1;i<=x.length;i++){
  2.                                 int q = x[i-1];
  3.                                 //最后一次循环时x.length=11;
  4.                                 //x[11]报错,因为数组的角标为0-10
  5.                                 int w = x[i];
  6.                                 d = max(q,w);
  7.                                 }
复制代码
其实取数组的最大值有一种简便方法,不必单独写一个方法,参考代码如下:

  1. int max=0;
  2. //也可以将max设置为x[0];这样可以少循环一次
  3. for(int i=0;i<x.length;i++)
  4. {
  5.      if(max<x[i])
  6.      {
  7.           max=x[i];
  8.      }
  9. }
  10. System.out.println("最大值为:"+max);
复制代码



作者: 24岁???    时间: 2014-4-27 17:41
左拉 发表于 2014-4-27 17:33
数组角标越界啊
在这里你的数组长度是11,数组的下标只能是0-10,你从x[1]开始遍历数组
当你的循环到最后一 ...

感谢解惑 :handshake
作者: 24岁???    时间: 2014-4-27 17:42
24岁??? 发表于 2014-4-27 17:41
感谢解惑

这个是不是叫做数组溢出啊,11是不是表示第11步溢出
作者: 24岁???    时间: 2014-4-27 17:54
曲佳奇 发表于 2014-4-27 17:32

:handshake
作者: 24岁???    时间: 2014-4-27 17:55
a3330682 发表于 2014-4-27 17:31
class class2
{
        public static void main(String[] args)

:handshake
作者: 362688114    时间: 2014-4-27 18:32
24岁??? 发表于 2014-4-27 17:42
这个是不是叫做数组溢出啊,11是不是表示第11步溢出

11是代码第十一行出错了。
作者: wyqs92    时间: 2014-4-28 22:14
你地循环条件中取了等号,造成了数组越界异常。你要记住数组的角标是从0开始的,最后一位是长度-1.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2