你还想继续注册么?Y/N  y 
请输入注册的用户名(长度不能超过六位):请输入注册的密码(长度不能超过六位): userRegisteName自动赋了空,为什么会出现这种情况,请高手帮忙,谢谢! Java codeflag_Registe:while(true)
        {
            System.out.print("请输入注册的用户名(长度不能超过六位):");
            String userRegisteName = sc.nextLine();
            if(userRegisteName.length()>6)
            {
                System.out.println("*****你输入的注册用户名长度超过六位,请重新注册*****");
                continue;
            }            System.out.print("请输入注册的密码(长度不能超过六位):");
            String userRegistePassword = sc.nextLine();
            if(userRegistePassword.length()>6)
            {
                System.out.println("*****你输入的注册密码长度超过六位,请重新注册*****");
                continue;
            }
            
            System.out.print("请输入对此帐户的存款:");
            double userRegisteBalance = sc.nextDouble();
            if(Double.isNaN(userRegisteBalance))
            {
                System.out.println("*****你输入的存款不是数字类型,请重新注册*****");
                continue;
            }
            System.out.println();
            
            acc[i] = new Account(userRegisteName,userRegistePassword,userRegisteBalance);
    
            System.out.println("-----恭喜你注册成功!-----");
            acc[i].info();
            
            
            System.out.println();
            
            while(true)
            {
                System.out.print("你还想继续注册么?Y/N   ");
        
                Scanner scStr = new Scanner(System.in);
                String str = scStr.next();
        
                if(str.equals("y")||str.equals("Y"))
                {
                    break;
                }else if(str.equals("n")||str.equals("N"))
                {
                    System.out.println("谢谢你的参与!");
                    System.out.println();
                    break flag_Registe;
                }else{
                    System.out.println("你的输入有误!请重新输入:");
                }
            }

解决方案 »

  1.   

    else if(str.equals("n")||str.equals("N"))
                    {
                        System.out.println("谢谢你的参与!");
                        System.out.println();
                        break flag_Registe;
                    }这个是退出,没有问题的
    但就是选“Y”的时候,会这样
    你还想继续注册么?Y/N  y 
    请输入注册的用户名(长度不能超过六位):请输入注册的密码(长度不能超过六位):
    注册的用户名不让赋值
      

  2.   

    死循环没事,Scanner是阻塞式读取
      

  3.   

    可是没有停止下来啊,我在Eclipse中做断点的,当经过“是否继续注册”循环后,
    String userRegisteName = sc.nextLine();就自动赋了“”String userRegistePassword = sc.nextLine(); 这个阻塞成功。。
      

  4.   

     System.out.print("请输入注册的用户名(长度不能超过六位):");
                String userRegisteName = sc.nextLine();
    System.out.println("请输入注册的用户名(长度不能超过六位):");
    要换行吧  不然读的时候直接读了:
                           请输入注册的用户名(长度不能超过六位
    如果你在   请输入注册的用户名(长度不能超过六位   后按下了Enter键再输入  就会读到 请输入注册的用户名(长度不能超过六位  
    我初学者  说了错了  不要怪
      

  5.   

    我比较关心,选Y的时候,执行完BREAK
    下面接着执行的是第一个WHILE还是第二个还有就是,你默认给一个正确的用户名和密码,测试下,程序的运行顺序试试
      

  6.   

    while(true)
                {
                    System.out.print("你还想继续注册么?Y/N   ");
            
                    Scanner scStr = new Scanner(System.in);
                    String str = scStr.next();
            
    这里应该有个触发器或者睡一段时间你能输入参数
      

  7.   

    我(删了ACCOUNT)试了下没问题啊
      

  8.   

    str.equals("y")
    建议写成: "y".equals(str) 这种形式的
      

  9.   

    你是把
            acc[i] = new Account(userRegisteName,userRegistePassword,userRegisteBalance);
           acc[i].info();
    这两句屏避了么?
    但我试了还是不行
      

  10.   

    哦,对了
    在接收输入前,FLUSH一下
    清空下内存
    这再不行就没招了
      

  11.   

    不会是你的ENTER键点了2下吧?
    那你看看你的存款是否正常
      

  12.   

    sc是什么玩意,一群人在不知道sc是什么情况下,乱讨论,明显跟sc有关系,都在解释什么if语句里面的东西。
      

  13.   

    这是我改的代码,你看看应该是可以的
    while(true)
            {
     Scanner sc=new Scanner(System.in);
            
                System.out.print("请输入注册的用户名(长度不能超过六位):");
                String userRegisteName = sc.next();
                if(userRegisteName.length()>6)
                {
                    System.out.println("*****你输入的注册用户名长度超过六位,请重新注册*****");
                    continue;
                }             System.out.print("请输入注册的密码(长度不能超过六位):");
                String userRegistePassword = sc.next();
                if(userRegistePassword.length()>6)
                {
                    System.out.println("*****你输入的注册密码长度超过六位,请重新注册*****");
                    continue;
                }
                
                System.out.print("请输入对此帐户的存款:");
                double userRegisteBalance = sc.nextDouble();
                if(Double.isNaN(userRegisteBalance))
                {
                    System.out.println("*****你输入的存款不是数字类型,请重新注册*****");
                    continue;
                }
                System.out.println();
                
                
                System.out.println("-----恭喜你注册成功!-----");
              
                
                
                System.out.println();
                
                while(true)
                {
                    System.out.print("你还想继续注册么?Y/N   ");
            
                    Scanner scStr = new Scanner(System.in);
                    String str = scStr.next();
            
                    if(str.equals("y")||str.equals("Y"))
                    {
                        break;
                    }else if(str.equals("n")||str.equals("N"))
                    {
                        System.out.println("谢谢你的参与!");
                        System.out.println();
                        break ;
                    }else{
                        System.out.println("你的输入有误!请重新输入:");
                    }
                }  }
      

  14.   


    我自己也解决了,呵
    把“nextLine”改为“next”就可以了public String next()
       查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息。即使以前调用 hasNext() 返回了 true,在等待要扫描的输入时此方法也可能阻塞。public String nextLine()
       此扫描器执行当前行,并返回跳过的输入信息。 此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。 
    因为此方法会继续在输入信息中查找行分隔符,所以如果没有行分隔符,它可能会缓冲所有输入信息,并查找要跳过的行。 跟大家也分享一下