下面这个程序是设计一个银行帐户类(account),包含以下信息,帐号,储户姓名,开户时间,身份证号码,帐户余额,并要求该类能够完成开户,存款,取款,注销帐户的功能.
并要求在主程序中为储户张三(基本信息:张三,身份证:123456)开一个帐号,要求帐号为系统当前日期加储户身份证号的最后两位组成,开完帐号后,要实现以下功能:
1.为张三的帐号中存如100元
2.张三的帐号中取出80元
3.注销张三的帐号.以下是我写的程序。编译是通过了,但执行是出错了,请问错在哪里?谢谢!
import java.io.*;
import java.lang.*;
import java.util.*;
import java.text.*;
class account
{
String zh; //用户账号
String name; //用户姓名
String time; //开户时间
String ID; //身份证号码
double ye; //账户余额       
public account(String b,String d) //构造函数,开设新帐户
{
Calendar cal = Calendar.getInstance();        
    java.text.SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String cdate = sdf.format(cal.getTime());
time =cdate; 
zh=time+ID.substring(17,18);
name=b;
ID=d;
ye=0;
System.out.println("开启成攻!");
}
void add(double m) //存款
{
ye=ye+m;
}
void minu(double n) //取款
{
if(ye>=n)
ye=ye-n;
else
{
System.out.println("余额不足!");
}
}
void print() //打印
{
System.out.println("账号:"+zh);
System.out.println("姓名:"+name);
System.out.println("身份证号:"+ID);
System.out.println("余额:"+ye);
System.out.println("开户日期:"+time);
}}
public class Acc
{
public static void main(String args[])
{
account aa=new account("张三","35032219891002621x");
aa.print();
aa.add(100.0);
aa.print();
aa.minu(80.0);
aa.print();
}
}

解决方案 »

  1.   


    zh=time+ID.substring(17,18);    //此时ID为"",怎么会有17,18这样的长度呢
    name=b; 
    ID=d;   //这时才有ID
    ID=d; 
    zh=time+ID.substring(17,18); 
    name=b; 
      

  2.   

    大家前面说的对,不过不是要身份证的后两位吗
    应该是ID.substring(17,19)才对啊!
      

  3.   

    身份证号的位数现在还在使用的不光有18位的,老的身份证还有一些。
    去身份证号最后两位最好用
    zh=time+ID.substring(ID.length()-2,ID.length()-1);//此时ID为"",怎么会有17,18这样的长度呢name=b; 
    而且就算写死,也应该是zh=time+ID.substring(16,17)他是从0开始的。