开关/案件请求与布尔值

我试图创build一个方法,检查是否login(用户名和密码)至less有6 charakters。

要意识到我创build了这个方法public void checkLoginData(final String username, final String password) 。 在这种方法中,我创build了布尔(用户和通过),我可以创build4个不同的布尔链:

  • 用户:真传递:真
  • 用户:false通过:true
  • 用户:false传递:false
  • 用户:真传递:假

现在我想为他们每个人做一个开关/案例的请求,但我不明白如何实现…

如果你问我为什么需要这个开关,我只是觉得我需要它,因为我想为这四个布尔链中的每一个都做这件事,它确实显示了不同的东西。 另外我想用性感java的方式做这个,而不是与千千万万不同的'ifs':P,请帮助!

以下是该方法的代码:

 public void checkLoginData(final String username, final String password){ boolean user, pass; if (username.length() < 6){ user = false; }else { user = true; } if (password.length() < 6){ pass = false; }else { pass = true; } boolean[] logindaten = {user, pass}; } 

Thx提前帮助!

最好的问候safari

Solutions Collecting From Web of "开关/案件请求与布尔值"

您不能切换boolean[] ,只能通过整型。 要将布尔转换为int,可以使用2个布尔值的掩码,例如:

 int val = 0; if (user) val |= 0x1; if (pass) val |= 0x2; switch (val) { case 0: // Both too short case 1: // User Ok, pass too short case 2: // User too short, pass ok case 3: // Both Ok } 

如果你真的想要一个“性感java的方式”(但这取决于你所理解的),你可以做一些类似的事情(需要Java 7):

 boolean user, pass; switch (user + "-" + pass) { case "false-false": ... case "false-true": ... case "true-false": ... case "true-true": ... default: throw new RuntimeException( "something strange happening here, user: " + user + ",pass: " + pass); } 

但我宁愿只做两个不同的检查,每个检查都带有自己的消息,消息被join进来。 (不知道这是否可以被认为是“性感java的方式”,更像是一个“解决方法”)

基本上没有比这更简单的方法,也没有办法在明显less的代码行中做到这一点。

 if (username.length() < 6){ if (password.length() < 6){ // do case 1 } else { // do case 2 } } else { if (password.length() < 6){ // do case 3 } else { // do case 4 } } 

在我看来,这是最好的解决scheme。

另外我想用性感java的方式做这个,而不是与数千个不同的'ifs'

如果以“性感-java-way”的意思是“聪明”或“晦涩”,那么还有其他方法可以做到。 但是他们当然不会让代码更容易阅读/维护。

顺便说一句,以上只涉及3 …这是正确的if陈述。


…但我希望能让我的老板印象深刻;)

说真的,如果我是你的老板,而且你这样写代码的话,我会对联合国留下深刻的印象。 任何一个认为自己聪明的人编写模糊和不可维护的代码是愚蠢的。

猜猜这就是我将如何解决与枚举:

 public class LoginController { private void login( String username, String password ) { LoginState state = determineLoginState( username, password ); switch ( state ) { case LOGIN_OK: //Do Something break; case USERNAME_FALSE: //Do Something break; case PASSWORD_FALSE: //Do Something break; case BOTH_FALSE: //Do Something break; } } private LoginState determineLoginState( String username, String password ) { final boolean checkUsername = checkUsername( username ); final boolean checkPassword = checkPassword( password ); if ( checkUsername && checkPassword ) return LoginState.LOGIN_OK; if ( !checkUsername && checkPassword ) return LoginState.USERNAME_FALSE; if ( checkUsername && !checkPassword ) return LoginState.PASSWORD_FALSE; if ( !checkUsername && !checkPassword ) return LoginState.BOTH_FALSE; throw new AuthenticationException(); } protected boolean checkUsername( String username ) { return username.length() > 6; } protected boolean checkPassword( String password ) { return password.length() > 6; } private enum LoginState { LOGIN_OK, USERNAME_FALSE, PASSWORD_FALSE, BOTH_FALSE; } public class AuthenticationException extends RuntimeException { } } 
 if (user) { if (pass) { // user = true, pass = true } else { // user = true, pass = false } } else { if (pass) { // user = false, pass = true } else { // user = false, pass = false } } 

要么

 int case = user ? (pass ? 1 : 2) : (pass ? 3: 4); switch (case) { case 1: System.out.println(" user = true, pass = true "); break; case 2: System.out.println(" user = true, pass = false "); break; case 3: System.out.println(" user = false, pass = true "); break; case 4: System.out.println(" user = false, pass = false "); break; } }