我正在尝试创建一个方法来检查Login(用户名和密码)是否至少包含6个字符。
要意识到我创建了这个方法public void checkLoginData(final String username, final String password)
。在那个方法中,我创建了booleans(用户和pass),我可以创建4个不同的布尔链:
现在我想为每个人做一个转换/案例请求,但我不明白如何实现......
如果你问为什么我需要切换,我只是认为我需要它,因为我想为这4个布尔链中的每一个做,它会/显示不同的东西。另外,我想以性感的方式做到这一点,而不是数以千计的不同'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提前获得帮助!
最好的问候野生动物园
答案 0 :(得分:11)
如果你真的想要一个“性感的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);
}
但是我更愿意只使用他自己的消息进行2次不同的检查,将消息加入进行演示。 (并且不确定这是否可以被认为是“性感的java方式”,更像是“解决方法”)
答案 1 :(得分:9)
您无法仅在整数类型上切换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
}
答案 2 :(得分:8)
基本上没有比这更简单的方法,并且没有办法以明显更少的代码行完成。
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
}
}
在我看来,这是最好的解决方案。
此外,我想以性感的方式做到这一点,而不是数以千计的不同'ifs'
如果用“sexy-java-way”表示“聪明”或“模糊”,那么还有其他方法可以做到。但它们肯定不会使代码更易于阅读/更易于维护。
顺便说一下,上面只涉及3 ...那是正确的三个 ... if
陈述。
然而你的(最终)具体例子是:
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};
....
}
可以简化为以下内容:
public void checkLoginData(final String username, final String password){
boolean user = username.length() >= 6;
boolean pass = password.length() >= 6;
boolean[] logindaten = {user, pass};
....
}
请注意,这里可以进行简化,因为操作(假设开关中的“case”)可以重构为简单的布尔赋值,并且测试实际上彼此独立。一般来说,你不能这样做......
...但是我想让它更能让我的老板印象深刻;)
说真的,如果我是你的老板并且你编写了这样的代码,我会对 UN - 印象深刻。任何认为你聪明地编写模糊和不可维护代码的老板都是无能为力的。
答案 3 :(得分:8)
猜猜我会用枚举来解决它:
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
{
}
}
答案 4 :(得分:3)
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;
}
}
答案 5 :(得分:0)
您可以执行以下操作,然后每种情况分别为1,2或3,依此类推。
switch((route.isComplete()?1:(route.getAuthentic()?2:(route.hasRoute()?3:0)))) {...}
答案 6 :(得分:0)
使用java12,您可以在switch-case中使用表达式,并提供Bool
类型(https://blog.codefx.org/java/switch-expressions/)。
答案 7 :(得分:0)
private static boolean checkCharOf_(String userName){
return userName.length() >= 6;
}
private static boolean checkCharOf_(String password){
return password.length() >= 6;
}
或
private static boolean checkCharOf_And_(String userName, String password){
return userName.length() >= 6 && password.length() >= 6;
}