一个简单的程序,输出最小数。但是结果错了

图片说明

角标越界异常,当i=5时,i+1角标越界。

不用这样的,sort.arrays可以排序

 public class MinNum {
    public static void main(String[] args) {
        int[] a = { 8, 6, 3, 8, 6, 1 };
        int mini = a[0];
        for (int i = 0; i < a.length; i++) {
            if (a[i] < mini) {
                mini = a[i];
            }
        }
        System.out.println("最小值为:" + mini);
    }
}

结果为1

a[i] [8,6,3,8,6,1]
按你的思路:
if(a[i]) intt = a[i]
}
当i=0时 intt = 0 (初始值)
i=1时 intt=0 8>6
i=2时 intt=3 3 i=3时 intt=3 8>6
i=4时 intt=3 6>1
i=5时 i+1越界
即使没有越界,最小值也是错的!!!!!!!!

    你的思路就不对,你两个相邻的比较,你怎么就知道相邻最小的就是所有值中最小的?你写出的几个数字,3会和1比较?

其实写个双层循环就好了
第一项除自己之外与所有数字比较,第二项除自己外与所有项比较,以此类推。我没有验证,暂时代码如下:
for(int i=0;i<a.length;i++){
for(int j=0;j<a.length;j++){
if(a[i]<=a[j] && i != j)
intt = a[i];
break;
}
}

ArrayIndexOutOfBounds 是数组越界,应该检查一下在循环中有没有用到比定义的数组范围还大的数组下标。

你错了两个地方,第一个是在i<a.length的i最大是5那么a[i+1]是a[6]下标多了1个就越界了一定会报错的.所以要让i最大时=4
第二个错在最后一个是6<1吗,否!以你的代码是什么事都没干就走了.所以要加else否则,否则就等于a[i+1]这样就是对的了

 int intt = 0;
 int[] a = { 8, 6, 3, 8, 6, 1 };
   for (int i = 0; i < a.GetUpperBound(0); i++)
   {
            if (a[i] < a[i + 1])
            {
            intt = a[i];
            }
            else
            { 
            intt = a[i + 1];
            }
   }
     this.CreateGraphics().DrawString("最小号码是:" + intt.ToString(), new Font("宋体", 20), new SolidBrush(Color.Red), new Point(0, 0));

这C#什么这么难用~还不如我用的vb.net

异常信息:数组越界。
出现原因:当指针指向最后一个元素时,找不到a[[i+1]。

编程错误原因,if条件错误,思路不正确,比较条件应该为当前指针指向的元素是否小于当前的最小数。而你的条件是:选出两个相邻元素的较小的数。

自己动手模拟一下程序运行,或者单步调试。 = =