老师这个代码怎么做呢?我这么写为什么会空指针呢?还有一般如何找出自己的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
同学你好,一般程序报错后,都会提示报错位置,可根据报错位置追踪到报错代码,如下图,报错提示在第13行,代码是str.replace(a[j], "");因为同学上面定义的str为null,所以使用str调用方法时,会报空指针异常
同学的代码将String str = null;修改为 String str = "";后,输出的结果如下图
本题是要将重复的元素以及去重后的元素输出,那么去重后的元素就可以用一个临时数组去接收
具体思路如下
定义一个临时数组用来接收去重后的元素
外层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 + " "); } } }
祝学习愉快
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星