迷途的启木菌 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 (SQL语句|查询结果翻了4倍)
  • ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
  • ¥50 .net core 并发调用接口问题
  • ¥15 网上各种方法试过了,pip还是无法使用
  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊