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:
- Cambiar las actividades de un lado a otro en Android
- Problema de conmutación: solo una opción visible
- Obteniendo la instancia Switch dentro de ActionBar
- Cambiar los conmutadores a declaraciones "if-else"
- ¿Cómo puedo agregar tercer estado en Android Switch?
- 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
- Android: cambia a la actividad sin reiniciarla
- ¿Puede utilizar declaraciones condicionales en el caso de conmutación en Android?
- Menú emergente personalizado de Android con conmutador
- Cómo cambiar la altura y el ancho de Switch en Android
- ¿O declaración en el interruptor / caso?
- Cambiar instrucción con cadena como argumento en Android
- El texto de Android debe aparecer en ambos lados en el
- Cómo detectar cuándo un conmutador se desliza, no se hace clic
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 TRES … if
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; } }
- SupportMapFragment.getMap () en una referencia de objeto nulo
- Hacer dos LinearLayouts tiene el 50% de la pantalla cada uno sin usar layout_weight