泫溯 2024-10-31 01:26 采纳率: 94.7%
浏览 10
已结题

请问这个java代码为什么会报这个错

public class G{
    public static void main(String[] args){
        Magazine g1=new Magazine(6);
        Magazine g2=new Magazine(6);
        Pistol p=new Pistol();
        p.setMagazine(g1);
        while(p.magazine.volumn!=0){
            System.out.println(p.magazine.popBullet());
        }
        p.setMagazine(g2);
        while(p.magazine.volumn!=0){
            System.out.println(p.magazine.popBullet());
        }

        //Bullet b1=new Bullet(1);
        //int a=g1.pushBullet(b1);
        //System.out.println(a);
        
    
    }




}
class Bullet{
    int id;
    Bullet next;
    Bullet(int x){
    id=x;
    }
}

class Magazine{
    int volumn;   //弹匣子弹数
    int capacity;  //弹匣容量
    Bullet head=new Bullet(-1);  //头结点
    Magazine(){
        volumn=0;
    }
    Magazine(int n){
        volumn=n;
        Bullet t=new Bullet(1);
        t=head;
        int i=2;
        while(n--!=0)
        {
            Bullet bb=new Bullet(i);
            t.next=bb;
            i++;
            t=t.next;
        }

    }
    boolean pushBullet(Bullet b){
        if(volumn==capacity){
            System.out.println("The Magazine is already full");
            return false;
        }
        Bullet p=head;
        while(p.next!=null){
            p=p.next;
        }
        p.next=b;
        b.next=null;
        volumn++;
        return true;
    }

    
    boolean popBullet(){
            Bullet temp = head;
            int j =0;
            int i=volumn;
            while(j<i-1){
                temp = temp.next;
                j++;
            }
            temp.next = temp.next.next;
        return true;
    }
    
    

}

class Pistol{
    Magazine magazine=new Magazine();
    boolean Shoot(){
        if(magazine.volumn==0){
            System.out.println("The Magazine is already empty");
            return false;

        }
        boolean a=magazine.popBullet();
        if(a) return true;
        else return false;
    }
    void setMagazine(Magazine m){
        magazine.volumn=m.volumn;
        magazine.capacity=m.capacity;
        magazine.head=m.head;
    
    }


}

img

请问这个java代码为什么会报这个错,具体错在哪里了呢?

  • 写回答

1条回答 默认 最新

  • 何心而为殇 2024-10-31 09:37
    关注

    你在头结点赋值的时候再最后一发的时候,head是最后一个节点了,第79行 temp.next已经为空了你还方法调用,所以报空指针了

    img


    解决就加个为空判断就行了:

    if(temp.next != null){
          temp.next = temp.next.next;
     }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月5日
  • 已采纳回答 2月25日
  • 创建了问题 10月31日