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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2019-1-10 11:03 编辑

就业阶段_异常汇总Java编程就业(第1周)异常一
  
创建人
  
我上的呐喊
问题标题
空指针异常
问题分类
编译remove代码发生错误
一级话题
[Java] 纯文本查看 复制代码
Exception  in thread "main" java.lang.IndexOutOfBoundsException: Index 7  out-of-bounds for length 7
  
         at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
  
         at  java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
  
         at  java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
  
         at java.base/java.util.Objects.checkIndex(Objects.java:372)
  
         at java.base/java.util.ArrayList.remove(ArrayList.java:516)
  
         at  Practice01.Test06.main(Test06.java:47)
[align=right]
  
1 个错误
问题补充
附件
[Java] 纯文本查看 复制代码
public class Test06 {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        ArrayList<Double> list = new ArrayList<>();

        int maxIndex = 0, minIndex = 0;
        for (int i = 0; i < 8; i++) {
            System.out.println("请录入第" + (i + 1) + "个评委成绩");
            list.add((double) (s.nextInt()));
        }
        double max = list.get(0), min = list.get(0);
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) > max) {
                max = list.get(i);
                maxIndex = i;
            }

if (list.get(i) < min) {
                min = list.get(i);
                minIndex = i;
            }
        }
        

        for (int i = 0; i < list.size(); i++) {
                       
        }
        list.remove(maxIndex);

list.remove(minIndex);

        double sum = 0;
        for (Double sums : list)
            sum += sums;

        System.out.println("平均分" + sum / list.size());
    }
}
问题答案
问题分析:
  
第47行报错,
  
移除maxIndex后,minIndex会产生空指针异常。
问题解决方法:
  
分别将两个if语句添加到两个for循环当中,在每个for循环后分别移除maxIndex,minIndex。
   


异常二
  
创建人
  
我上的呐喊
问题标题
运行问题
问题分类
运行后未全部删除重复元素
一级话题
问题补充
附件
[HTML] 纯文本查看 复制代码
public class Test08 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        ArrayList<String> listn = new ArrayList<>();

        String[] hobs = {"音乐", "旅游", "音乐", "音乐","看书", "跑步", "音乐", "音乐", "音乐", "音乐", "音乐", "旅游", "游泳"};

        for (int i = 0; i < hobs.length; i++) {
            list.add(hobs[i]);
        }


        for (int i = 0; i < list.size(); i++) {
            String remove = list.remove(i);
            if (list.contains(remove)) {

                continue;
            } else {
                list.add(remove);
            }
        }
        System.out.println(list);
    }
}
问题答案
问题分析:
  
由于集合指针在移除元素后仍然往后,就有可能遗漏重复的元素。
问题解决方法:
  
修改代码为:
  
[Java] 纯文本查看 复制代码
int size = list.size();
        for (int i = 0; i < size; i++) {
            String remove = list.remove(0);
            if (list.contains(remove)) {
                continue;
            } else {
                list.add(remove);
            }
        }

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马