老师这个代码怎么做呢?我这么写为什么会空指针呢?还有一般如何找出自己的bug啊.没什么头绪

老师这个代码怎么做呢?我这么写为什么会空指针呢?还有一般如何找出自己的bug啊.没什么头绪

package experience;

public class xxx {
 public static void main(String[] args) {
  //去除数组中的重复的数据后输出数组并把重复的数输出。(提示:运用临时数组) 测试输入数据:88 88 88 89 89 65 100 99 99 100
  //  预期输出:去重后的数组:88 89 65 100 重复的数依次为:88 89 99
          String a[]= {"88","88","88","89","89","65","100","99","99","100"};
          String str = null;
          for(int i=0;i<a.length;i++) {
           for(int j=i+1;j<a.length;j++) {
            if(a[i].equals(a[j])) {
             str.replace(a[j], "");
             str+=a[i];
            }
           }
          }
          for(String b:a) {
           System.out.println(str);
          }
 }

}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕阿园 2020-07-05 16:24:10

同学你好,同学是对下面这部分代码有疑问吗

http://img1.sycdn.imooc.com//climg/5f018e2109ea854005540225.jpg

如果没有解决同学的疑问,请同学具体描述

祝学习愉快

好帮手慕阿园 2020-07-05 12:03:54

同学你好,一般程序报错后,都会提示报错位置,可根据报错位置追踪到报错代码,如下图,报错提示在第13行,代码是str.replace(a[j], "");因为同学上面定义的str为null,所以使用str调用方法时,会报空指针异常

http://img1.sycdn.imooc.com//climg/5f01508a086c766305540074.jpg

http://img1.sycdn.imooc.com//climg/5f01508d0863db8c03280045.jpg

同学的代码将String str = null;修改为 String str = "";后,输出的结果如下图

http://img1.sycdn.imooc.com//climg/5f01509f09cbe51e02470254.jpg

本题是要将重复的元素以及去重后的元素输出,那么去重后的元素就可以用一个临时数组去接收
具体思路如下
定义一个临时数组用来接收去重后的元素
外层for循环遍历原数组,内层for循环遍历临时数组,并判断临时数组中的数据是否存在
定义一个标记位,如果存在把标记位置位false,标记位没有改变,则没有改数据,就将数据存到临时数组中
但是由于临时数组的长度会跟原数组的长度一样,所以需要检测临时数组中还剩余了多少null,并赋值为新的数组
整体代码如下

public class xxx {
    public static void main(String[] args) {
        String[] a ={"88","88","88","89","89","65","100","99","99","100"};
        //定义临时数组
        String[] tmp = new String[arr.length];
        int m = 0;
        System.out.println("重复的数据有");
        for (int i = 0; i < a.length; i++) {
            //判断tmp数组是否存在
            boolean flag = true;
            for (int n = 0; n < tmp.length; n++) {
                if (tmp[n] == a[i]) {
                    //如果有相等的,设置为flase
                    flag = false;
                    System.out.println(tmp[n] + " ");
                }
            }
            if (flag) {
                tmp[m++] = a[i];
            }
        }
        String[] newArr = new String[m];
        //检测数组有多少为null,并且赋值为新的数组
        for (int k = 0; k < m; k++) {
            newArr[k] = tmp[k];
        }
        tmp = newArr;
        System.out.println("去重后的数组");
        for (String s : tmp) {
            System.out.print(s + " ");
        }
    }
}

祝学习愉快

  • 提问者 眼睛眯起来 #1
    老师tmp也没有进行赋值操作啊,
    2020-07-05 15:27:40
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师