Solicitud de switch / case con boolean

Estoy tratando de crear un método que comprueba si el Login (nombre de usuario y contraseña) tiene un mínimo de 6 charakters.

Para darse cuenta de que he creado este método public void checkLoginData(final String username, final String password) . En ese método, creo a booleanos (usuario y pase), con los que puedo crear 4 diferentes cadenas booleanas:

  • Usuario: true pass: true
  • Usuario: false pass: true
  • Usuario: false pass: false
  • Usuario: true pass: false

Ahora me gustaría hacer una solicitud de cambio / caso para cada uno de ellos, pero no entiendo cómo darse cuenta de que …

Si me preguntas por qué necesito el conmutador, sólo creo que lo necesito, porque me gustaría hacer por cada una de esas 4 cadenas booleanas, que hace / muestra algo diferente. También me gustaría hacer esto de una manera sexy-java, no con todos los conjuntos de diferentes "ifs": P, por favor, ayuda!

Aquí está el código del método:

 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 para la ayuda en Advance!

Saludos cordiales safari

No puede cambiar boolean[] , solo sobre tipos integrales. Para convertir los booleanos en un int, podría usar una máscara de bit para los 2 booleanos, como por ejemplo esto:

 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 } 

Si realmente quieres un "sexy-java-way" (pero eso depende de lo que entiendas como tal) puedes hacer algo como (Java 7 requerido):

 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); } 

Pero preferiría hacer sólo 2 cheques distintos cada uno con su propio mensaje, el mensaje se unió para su presentación. (Y no está seguro si eso podría ser considerado "sexy-java-way", más como una "solución")

Básicamente no hay manera más simple que esto, y no hay forma de hacerlo en significativamente menos líneas de código.

 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 } } 

En mi opinión, eso hace que esta sea la mejor solución.

También me gustaría hacer esto de una manera sexy-java no con tousands de 'ifs diferentes'

Si por "sexy-java-way" quiere decir "inteligente" u "oscuro", entonces hay otras maneras de hacerlo. Pero ciertamente no hacen que el código sea más fácil de leer / más fácil de mantener.

Por cierto, lo anterior implica sólo 3 … eso es correcto TRESif declaraciones.


… pero la identificación tiene gusto de tenerlo más celver para impresionar a mi jefe;)

En serio, si yo fuera tu jefe y escribieras código así, estaría impresionado. Cualquier jefe que piensa que eres listo para escribir código oscuro e inmantable no tiene ni idea.

Supongo thats cómo lo resolvería con enums:

 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 } } 

O

 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; } } 
  • Obtener la intensidad de la señal de WIFI y datos móviles
  • Para eventos de Android, ¿por qué las sentencias switch son más comunes que if-else?
  • Android Studio no me deja usar el interruptor en una cadena?
  • ¿Reutilizar las actividades anteriores?
  • Un problema Java de conmutación: las expresiones de caso deben ser expresiones constantes
  • ¿Usando la cadena del recurso XML en el interruptor?
  • Interruptor multinivel Android
  • ¿Por qué utilizar un hashmap?
  • Cómo cambiar entre la cámara delantera y trasera cuando se utiliza MediaRecorder android
  • Cómo cambiar entre actividades con viewflipper
  • Android Cambiar entre actividades
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.