迷途的启木菌 2019-10-02 11:33 采纳率: 50%
浏览 962
已采纳

请问Exception in thread "main" java.lang.NullPointerException怎么解决,网上说的很模糊,小白不懂,谢谢大佬


public class BankCard {
    String number;
    long key;
    double money;
    public BankCard(String num, int ke, int mon) {
        number=num;
        key=ke;
        money=mon;
    }

}

import java.util.Scanner;

public class ATM {
private static BankCard card1;
private static BankCard card2;

public static void main(String args[]){
    BankCard card1=new BankCard("201811",123456,5000);
    BankCard card2=new BankCard("201911",654321,8000);
    操作ATM();




    Scanner r=new Scanner(System.in);
    int i=r.nextInt();
    switch(i){
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    default:
    }
}

/*****************************************************************************************/
private static void 输入密码(BankCard card)
{
    System.out.println("请输入密码:");
    Scanner r=new Scanner(System.in);
    long mm=r.nextLong();
    while(mm!=card.key){
    System.out.println("密码不正确,是否请重新输入:"
                        +"1:是                                  其他数字:否");
    int sf=r.nextInt();
    if(sf!=1)
        break;
    long xmm=r.nextLong();
    mm=xmm;
    }
    if(mm==card.key)
    操作界面();
}

/*****************************************************************************************/
private static void 操作界面(){
    System.out.println("**************\n"
                      +"**1:查询余额**\n"
                      +"**2:存钱******\n"
                      +"**3:取钱******\n"
                      +"**4:转账******\n"
                      +"**5:退出******\n"
                      +"请输入想要进行的操作(输入数字)");
}

/*****************************************************************************************/
private static void 操作ATM(){
    System.out.println("请选择需要插入的银行卡(输入数字):\n"
              +"1:card1              2:card2");
Scanner r=new Scanner(System.in);
int j=r.nextInt();
switch(j){
case 1:输入密码(card1);
case 2:输入密码(card2);
default:
    System.out.println("抱歉!此卡不存在!");
    操作ATM();
}
}

/*****************************************************************************************/
private static void 查询余额(BankCard card){
    System.out.println("当前余额为:"+card.money);
}

/*****************************************************************************************/
private static void 存钱(BankCard card){
    Scanner r=new Scanner(System.in);
    double x=r.nextDouble();
    card.money=card.money+x;
    查询余额(card);
}

/*****************************************************************************************/
private static void 取钱(BankCard card){
    Scanner r=new Scanner(System.in);
    double x=r.nextDouble();
    if(x>card.money){
        System.out.println("您的余额已不足!");
    }
    else
        card.money=card.money-x;
}

/*****************************************************************************************/
private static void 转账(BankCard card){
    Scanner r=new Scanner(System.in);
    double x=r.nextDouble();
    if(x>card.money){
        System.out.println("您的余额已不足!");
    }
    else{
        card.money=card.money-x;
        System.out.println("转账成功!");
    }   
}

/*****************************************************************************************/
}


在运行输入密码后,程序就无法运行了,显示如下:

请选择需要插入的银行卡(输入数字):
1:card1 2:card2
1
请输入密码:
123456
Exception in thread "main" java.lang.NullPointerException
at ATM.输入密码(ATM.java:34)
at ATM.操作ATM(ATM.java:65)
at ATM.main(ATM.java:10)

  • 写回答

1条回答 默认 最新

  • hurtCat 2019-10-02 13:12
    关注
    public class ATM {
    private static BankCard card1;//声明静态变量
    private static BankCard card2;//声明静态变量
    
    public static void main(String args[]){
        BankCard card1=new BankCard("201811",123456,5000);//声明局部变量
        BankCard card2=new BankCard("201911",654321,8000);//声明局部变量
    
    

    局部变量与静态变量重名,导致静态变量没有被显示初始化,然后在 输入密码(BankCard card)中实际传的是静态变量,而静态变量为null
    解决办法,把main方法中的代码改为

    card1=new BankCard("201811",123456,5000);
    card2=new BankCard("201911",654321,8000);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题