日期:2014-05-20  浏览次数:20933 次

一个很简单却又很怪异的JAVA基础问题
问题:实现用户注册功能,用户输入账号、密码和确认密码,注册用户!
  要求:a.用户的帐号为邮箱形式,必须对邮箱进行验证
b.密码必须和确认密码一致
c.密码的长度必须是8-16位
  d.用户的帐号不能包涵china,中国,共产党这些敏感字符
e.用户输入非法要给用户合理的提示
这个功能我可以实现,但是在测试的时候第一次帐号输入错误,以后都输入正确的话,在注册成功以后还会要你输入密码。源代码我贴出来,各位高手大大帮我看看那里出现错误了
Java code

import java.util.Scanner;

public class Zhuce {
    Scanner input = new Scanner(System.in);

    public void zhuce() {
        System.out.println("请输入账号");
        String s = input.next();
        boolean b = false;
        boolean c = false;
        if (s.equals("china") || s.equals("中国") || s.equals("共产党")) {
            System.out.println("您的账号无效");
            System.out.println("是否继续 Y/N?");
            String j = input.next();
            if (j.equals("y")) {
                zhuce();
            } else {
                System.out.println("您退出了注册");
            }
        } else {
            if (s.indexOf('@') != -1 && s.indexOf('.') > s.indexOf('@')) {
                b = true;

            } else {
                System.out.println("您的账号无效");
                System.out.println("是否继续 Y/N?");
                String i = input.next();
                if (i.equals("y")) {
                    zhuce();
                } else {
                    System.out.println("您退出了注册");
                }
            }
        }
        System.out.println("请输入密码");
        String m = input.next();
        System.out.println("请再次输入密码");
        String n = input.next();
        if (m.equals(n) && m.length() <= 16 && m.length() >= 8) {
            c = true;
        } else {
            System.out.println("您输入的密码有错");
            System.out.println("是否继续 Y/N?");
            String k = input.next();
            if (k.equals("y")) {
                zhuce();
            } else {
                System.out.println("您退出了注册");
            }
        }
        if (b && c) {
            System.out.println("注册成功");
        }
    }
    
    public static void main(String[] args) {
        Zhuce z=new Zhuce();
        z.zhuce();
    }
}




------解决方案--------------------
当然了,因为你当用户输错时,再次调用了zhuche()方法,所以第二次执行的是第二个zhuche()方法,执行完第二个zhuche()后会回到第一个执行的地方,接着执行,所以会出现你说的情况

最简单的方法,你在每次调用zhuche()的后边加一个return语句


------解决方案--------------------
zhuce();
return;