A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class MinDemon
{
        public static void main(String[] args)
        {
                int [] arr={18,9,3,2,4,5};
                for (int i=0;i<6 ;i++ )
                {
             int min;
                        if (arr[i]<arr[i+1])
                        {
                               
                                min=arr[i];
                                arr[i]=arr[i+1];
                arr[i+1]=min;
                               
                        }
                        else
                        {
                                min=arr[i+1];
                        }
               System.out.println("min="+min);

                }
                 System.out.println();
       
    }

}min=9
min=3
min=2
min=2
min=2
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
        at MinDemon.main(MinDemon.java:9)
这个代码是求最小值,为什么会输出这么多?求帮忙改善。

17 个回复

正序浏览
newu 黑马帝 2017-3-19 10:14:45
18#
java,谢谢楼主,支持分享
回复 使用道具 举报
吃瓜程序猿 发表于 2017-3-18 23:58
java.lang.ArrayIndexOutOfBoundsException: 意思是数组索引越界异常 ,访问了不存在的索引。
第一,你这里 ...

你那个第二个思路比我好,也更加简单。
回复 使用道具 举报
夜影鬼手 发表于 2017-3-18 19:05
那就注意编码,选择ANSI编码

谢谢手哥!
回复 使用道具 举报
吃瓜程序猿 发表于 2017-3-18 23:58
java.lang.ArrayIndexOutOfBoundsException: 意思是数组索引越界异常 ,访问了不存在的索引。
第一,你这里 ...

恩恩,谢谢瓜哥,受教了。
回复 使用道具 举报
java.lang.ArrayIndexOutOfBoundsException: 意思是数组索引越界异常 ,访问了不存在的索引。
第一,你这里有个arr[i+1],当i循环到5时,这个引用就是arr[6],而这个数组最大索引是5,所以越界了,这个问题只需要把for循环里改为i<5就可以了。
第二,出现这么多组输出是因为你把输出语句放在for循环里面了,所以每次循环都会输出,解决方法就是把输出语句放在for循环外面。
第三,min变量要放在for循环外面定义哦,不然没法在for循环外面输出的~
按你的思路改了以下的代码,你参考一下咯,
public class MinDemon {
        public static void main(String[] args) {
                int [] arr={18,9,3,2,4,5};
                int min=arr[0];
                for (int i=0;i<arr.length-1 ;i++ ){
                       
                        if (arr[i]<arr[i+1]){
                         min=arr[i];
                         arr[i]=arr[i+1];
                         arr[i+1]=min;
                        }else{
                                        min=arr[i+1];
                                }
                }
                System.out.println("min="+min);
        }
}
这个是我刚写的:
public class MinDemon {
        public static void main(String[] args) {
                int [] arr={18,9,3,2,4,5};
                int min=arr[0];
                for (int i=0;i<arr.length ;i++ ){
                        if (arr[i]<min){
                         min=arr[i];
                        }
                }
                System.out.println("min="+min);
        }
}
回复 使用道具 举报
这样写代码当然不对了,if语句只是比较的相邻两个数字的大小,所以最后输出时,会输出很多个。
回复 使用道具 举报
小小黑鸟 发表于 2017-3-18 18:44
我用的Editplus。应该是dos命令。

那就注意编码,选择ANSI编码
回复 使用道具 举报
夜影鬼手 发表于 2017-3-18 18:29
你把我的代码里的中文去掉,再试一次,这个转码的问题,你用的dos?

我用的Editplus。应该是dos命令。
回复 使用道具 举报
小小黑鸟 发表于 2017-3-18 18:14
Min.java:1: 错误: 编码GBK的不可映射字符
我完全打的你的代码,结果显示是这样,我看不懂。 ...

把代码中的中文去掉,再试一次
回复 使用道具 举报
你把我的代码里的中文去掉,再试一次,这个转码的问题,你用的dos?
回复 使用道具 举报
726569362 发表于 2017-3-18 17:03
少打了一个回括号,然后输出放在了for循环里面。

我试了你的方法,依旧不行,是不是我理解错了?我把这个System.out.println();语句放到for循环里面了。
回复 使用道具 举报
夜影鬼手 发表于 2017-3-18 17:45
按照你的思路参考哈:
public class Min {
        public static void main(String[] args)  {

Min.java:1: 错误: 编码GBK的不可映射字符
我完全打的你的代码,结果显示是这样,我看不懂。
回复 使用道具 举报
回复 使用道具 举报
本帖最后由 夜影鬼手 于 2017-3-18 17:46 编辑

按照你的思路参考哈:
public class Min {
        public static void main(String[] args)  {
                int [] arr = {18,9,3,2,4,5};
                int min = arr[0];
                for(int i = 0;i < arr.length - 1; i++){                                //或者arr.length-1写成5
                          if (arr<arr[i+1])
                      {
                              min=arr;
                              arr=arr[i+1];
                              arr[i+1]=min;
                      }
                          else
                          {
                                  min=arr[i+1];
                          }
                }   
                System.out.println("最小值 min="+min);          
        }
}
回复 使用道具 举报
数组的长度应该是6,i=5,报错了第一句
回复 使用道具 举报
输出语句在循环里,
回复 使用道具 举报
少打了一个回括号,然后输出放在了for循环里面。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马