public void open() //.用户开户
{
System.out.println("输入账户类型 , 0 表示储蓄账户, 1 表示信用账户 ");
leixing = sc.nextInt();
if ((leixing <= 0) & (leixing >= 2)) {
System.out.println("输入错误");
} else {
if (leixing == 0) {
a = new SavingAccount();
for (int i = 0; i < 5; i++) {
System.out.println("请输入密码");
int mima = sc.nextInt();
System.out.println("请在输入密码");
int mima1 = sc.nextInt();
if (mima == mima1) {
a.setPassword(mima1);
break;
} else if (i >= 3) {
System.out.println("你已经达到输入上限..系统自动退出!");
sc.close();
break;
} else {
System.out.println("两次密码不一样  .. 请重新输入");
}
}
System.out.println("请输入姓名"); //为什么到里这里的时候 这句输出后就不让你输入而是直接执行下面 输入身份证呢啊??????
String xingming = sc.nextLine();
a.setName(xingming);
System.out.println("请输入身份证号码");
String shenfen = sc.nextLine();
a.setPersonId(shenfen);
System.out.println("请输入邮箱");
String youxiang = sc.nextLine();
a.setEmail(youxiang);
System.out.println(this);
huanying();

解决方案 »

  1.   

    System.out.println("请输入姓名"); 
    可能这句最后有个换行符,nextLine捕捉到的是换行符,你把这句改为
    System.out.print("请输入姓名"); 
    试一下
      

  2.   


    //             试下
            try {
                System.out.println("请输入姓名");
                if (sc.available() > 0) {//清除缓存
                    sc.skipBytes(sc.available());
                  //或者 sc.skip(sc.available());
                }
            } catch (IOException ex) {
                Logger.getLogger(Base.class.getName()).log(Level.SEVERE, null, ex);
            }
      

  3.   

    请都用用sc.next(),不要用nextline()
    以下是nextline的说明。
    此扫描器执行当前行,并返回跳过的输入信息。 此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。 
    因为此方法会继续在输入信息中查找行分隔符,所以如果没有行分隔符,它可能会缓冲所有输入信息,并查找要跳过的行。
      

  4.   

    你在nextLIne前执行一次nextDouble试试,看能不能让nextDouble来获取分隔符,好让nextLine读取下一行
      

  5.   

    sc.next(),
    nextline()
    这两个有什么区别呢??
    用法有什么不同呢??
      

  6.   

    你查一下api文档嘛 
    里面有详细介绍