请教java大神,错误提示Exception in thread"main"java.lang.NullPoin...
发布网友
发布时间:2024-10-04 01:18
我来回答
共5个回答
热心网友
时间:2024-10-05 16:06
看图片。
import java.util.*;
import java.text.*;
public class Application {//一个应用程序要有一个public的主类
static Yhzh yhzh = new Yhzh();
private static Boolean isSuccess = false;
public static void main(String[] args) {
csh();
}
public static void cd() {
String xz = "0";
while (!xz.equals("6")) {
System.out.println("********************************");
System.out.println("** 1.存款 *");
System.out.println("** 2.取款 *");
System.out.println("** 3.查询账户信息 *");
System.out.println("** 4.修改密码 *");
System.out.println("** 5.遍历所有帐号信息 *");
System.out.println("** 6.退出 *");
System.out.println("********************************");
Scanner sr = new Scanner(System.in);
System.out.print("\n*请输入相应字符启用功能:");
xz = sr.next();
switch (Integer.parseInt(xz)) {
case 1:
yhzh.ck();
break;
case 2:
yhzh.qk();
break;
case 3:
yhzh.cx();
break;
case 4:
yhzh.xgmm();
break;
case 5:
yhzh.bianli();
break;
}
}
}
public static void csh() {
String xz = "0";
while (!xz.equals("3")) {
System.out.println("********************************");
System.out.println("** 1.登录 2.开户 3.退出 **");
System.out.println("********************************");
Scanner sr = new Scanner(System.in);
System.out.print("\n*请输入相应字符启用功能:");
xz = sr.next();
switch (Integer.parseInt(xz)) {
case 1:
dl();
cd();
break;
case 2:
yhzh.kh();
break;
}
if (Integer.parseInt(xz) == 3)
System.out.println("*已退出!\n");
}
}
public static void dl() {
Scanner sr = new Scanner(System.in);
while(true){
System.out.print("*请输入您的姓名:");
String xm = sr.next();
System.out.print("*请输入您的密码:");
String mm = sr.next();
isSuccess = yhzh.ss(xm, mm);//定义一个成功与否标识位
if (isSuccess) {
break;//成功,跳出死循环
}else {
System.out.print("*姓名和密码不匹配 !");
continue;//失败,继续
}
}
// while (true) {//这里while(true)死循环,永远也跳不出来
// System.out.print("*姓名和密码不匹配 !");
// System.out.print("*请输入您的姓名:");
// xm = sr.next();
// System.out.print("*请输入您的密码:");
// mm = sr.next();
// }
}
}
class Yhzh {
private static int xh = 1;
public static int dqdl = -1;
private static String[] zh = new String[100];
private static String[] mm = new String[100];
private static String[] xm = new String[100];
private static String[] khrq = new String[100];
private static String[] ye = new String[100];
static String yn = "n";
public Yhzh() {
zh[0] = "100001";
ye[0] = "012,580.00";
mm[0] = "123456";
xm[0] = "ql";
khrq[0] = "2015-01-01 00:01";
}
public void kh() {
Scanner sr = new Scanner(System.in);
while (!yn.equals("y")) {
if (xh + 1 < 10)
zh[xh] = "100" + "00" + Integer.toString(xh + 1);
else if (xh > 9 && xh < 100)
zh[xh] = "100" + "0" + Integer.toString(xh);
else
System.out.print("*抱歉,暂时只支持99位储户!");
System.out.print("*请输入开户人姓名:");
xm[xh] = sr.next();
if (xm[xh].length() == 2)
xm[xh] = xm[xh].charAt(0) + " " + xm[xh].charAt(1);
System.out.print("*请设置6位数密码:");
mm[xh] = sr.next();
while (mm[xh].length() != 6) {
System.out.print("*您输入的密码并非6位数,请重新输入:");
mm[xh] = sr.next();
}
System.out.println("*密码设置成功 !");
ye[xh] = "000,000.00";
Date sj = new Date();
SimpleDateFormat sjgs = new SimpleDateFormat("YYYY-MM-dd HH:mm");
khrq[xh] = sjgs.format(sj);
System.out.println("*您本次开户的信息如下所示 !");
System.out
.println("\n*********************************************************************");
System.out
.println("* 帐号 余额 姓名 密码 注册日期 *");
System.out.println("* " + zh[xh] + " " + ye[xh] + " "
+ xm[xh] + " " + mm[xh] + " " + khrq[xh] + " *");
System.out
.println("*********************************************************************\n");
System.out.print("*输入y确认,输入其它任何字符重新开户:");
yn = sr.next();
if (yn.equals("y"))
xh++;
}
yn = "n";
}
public void ck() {
System.out.print("*请输入您的帐号:");
}
public void qk() {
}
public void cx() {
}
public void xgmm() {
}
public boolean ss(String m, String n) {//改成这样
if (xm[0].equals(m) && mm[0].equals(n)){
return true;
}else {
return false;
}
/*这里不需要for循环(你想登陆多少次去??而且你的用户名和密码只是在数组xm[0],mm[0]里面,
你的写法xh + 1 为 2,他要循环两次当。xm[1],mm[1]的时候肯定报控指针错误,
要不你就这样改m.equals(xm[i])&&n.equals(mm[i]),这样的意思是m,n是有东西进来的,
前面的数值不可能为空,equals后面的值为空就是不等于,它不会报空指针异常)*/
// for (int i = 0; i < xh + 1; i++) {
// dqdl = i + 1;
// }
}
public void bianli() {
System.out
.println("\n*********************************************************************");
System.out
.println("* 帐号 余额 姓名 密码 注册日期 *");
for (int i = 0; i < xh + 1; i++) {
System.out.println("* " + zh[i] + " " + ye[i] + " " + xm[i]
+ " " + mm[i] + " " + khrq[i] + " *");
}
System.out
.println("*********************************************************************\n");
}
}
热心网友
时间:2024-10-05 16:03
private static int xh=1;改成0,否则ss()函数里面第二次循环会报空指针(只有一个登陆用户)
ss函数应该要返回一个bool值,确认账号密码是否正确。如果正确就不需要执行下面的while。
while里面没有退出循环的地方,会是一个死循环。
热心网友
时间:2024-10-05 16:03
错误里是Yhzh的ss方法抛出的, 应该是xm[i]和mm[i]其中有数据为null的,
热心网友
时间:2024-10-05 16:04
NullPointerException
你可能使用了没有赋值的变量 比如 public String str;
这时str=null;
你用了就会报错比如 system.out.print(str);
或者使用了没有初始化的对象
public student stu;
system.out.print(stu.getName);
热心网友
时间:2024-10-05 16:05
public void ss(String m, String n) {
//if执行完毕之后i++了!然后在if,数组空指针异常了
for (int i = 0; i < xh + 1; i++) {
if (xm[i].equals(m) && mm[i].equals(n))
dqdl = i + 1;
}
}