当前位置:编程学习 > JAVA >>

出现空指针问题,怎么解决

向数组中查找一个数若该数存在则删除否则将该数插入该数组。。
import java.util.*;
public class onea {
public static void main(String[] args) {
    int[]a={12,34,53,52,62,16,83,25,74,93};int[]b= null;
    Arrays.sort(a);
    System.out.println(Arrays.toString(a));
    System.out.println("请输入一个整数");
    Scanner reader = new Scanner(System.in);
    int key= reader.nextInt();
    int index=Arrays.binarySearch(a, key);//判断key是否在数组a中
    if(index>=0)//key和数组a中的某个元素相同
    {
     for(int i=0;i<a.length;i++)
      for(int j=0;j<i;j++)
    if(a[i]!=key)
     {
     a[j]=a[i];
}
System.out.println(b);}//删除数组中的与key值相同的元素
    else
    {b=Arrays.copyOf(a,a.length+1);}//将key值添加到数组中
b[a.length]=key;
   System.out.println(b);}
}  --------------------编程问答-------------------- 首先你把代码格式化一下,要不看上去太费劲了

package com.csdn.test;

import java.util.*;

public class onea {
public static void main(String[] args) {
int[] a = { 12, 34, 53, 52, 62, 16, 83, 25, 74, 93 };
int[] b = null;
Arrays.sort(a);
System.out.println(Arrays.toString(a));
System.out.println("请输入一个整数");
Scanner reader = new Scanner(System.in);
int key = reader.nextInt();
int index = Arrays.binarySearch(a, key);// 判断key是否在数组a中
if (index >= 0)// key和数组a中的某个元素相同
{
for (int i = 0; i < a.length; i++)
for (int j = 0; j < i; j++)
if (a[i] != key) {
a[j] = a[i];
}
System.out.println(b);
}// 删除数组中的与key值相同的元素
else {
b = Arrays.copyOf(a, a.length - 1);
}// 将key值添加到数组中
b[a.length] = key; //注意这一行!
System.out.println(b);
}
}

然后你注意到第27行
b[a.length] = key;
该行是放在if...else...之外的,也就是说,无论index是否>0,第27行都会执行。
根据你写的这段程序的逻辑,数组b的初值为null,只有index<0的时候才会被赋值,所以当index>0(也就是能在a中找到你输入的数字时), b数组一直为null, 而且又要在第27行对为null的b进行b[a.length] = key; 赋值操作,这样造成了空指针 --------------------编程问答-------------------- 顺带说一下,对于数组的输出,也不是用System.out.println就可以搞定的,这种primitive的数组需要用循环输出 --------------------编程问答-------------------- b[a.length]=key; 这也可以??数组时从0开始的。以后注意点!! --------------------编程问答-------------------- index返回搜索键的索引;否则返回 (-(插入点) - 1)  。
补充:Java ,  J2ME
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,