Java ';如果';声明是多余的

Java ';如果';声明是多余的,java,if-statement,Java,If Statement,我试图编码一个验证系统,验证用户是否输入了所需的字段。我似乎遇到了一个错误“if”语句是多余的”有人能帮我解决这个问题吗?或者想出一种更好的验证字段的方法来检查字段是否为空 String messageId = messageIdText.getText(); String subject = subjectText.getText(); String recipient = recipientText.getText(); String message = messageArea.getTex

我试图编码一个验证系统,验证用户是否输入了所需的字段。我似乎遇到了一个错误“if”语句是多余的”有人能帮我解决这个问题吗?或者想出一种更好的验证字段的方法来检查字段是否为空

String messageId = messageIdText.getText();
String subject = subjectText.getText();
String recipient = recipientText.getText();
String message = messageArea.getText();
boolean allFieldsCheck = false;

if (messageId.equals("") ){
    allFieldsCheck = false;
} else {
    allFieldsCheck = true;
}
if (subject.equals("") ){
    allFieldsCheck = false;
} else {
    allFieldsCheck = true;
}
if (recipient.equals("") ){
    allFieldsCheck = false;
} else {
    allFieldsCheck = true;
}
if (message.equals("") ){
    allFieldsCheck = false;
} else {
    allFieldsCheck = true;
}

java中的布尔值可以这样声明:

boolean myBool = some condition;

因此,您的
if
语句可以压缩为如下所示:

allFieldsCheck = !messageId.equals("");
或者将它们全部压缩为一个:

allFieldsCheck = !messageId.equals("") && !subject.equals("") && !recipient.equals("") && !message.equals("");

java中的布尔值可以这样声明:

boolean myBool = some condition;

因此,您的
if
语句可以压缩为如下所示:

allFieldsCheck = !messageId.equals("");
或者将它们全部压缩为一个:

allFieldsCheck = !messageId.equals("") && !subject.equals("") && !recipient.equals("") && !message.equals("");

首先,除了最后一个
if
语句外,您可以省略所有语句,因为它将覆盖您在
allFieldsCheck
上的任何值。但即使如此,您也不需要
if
语句-您可以直接将布尔检查的值分配给变量:

allFieldsCheck = !message.equals("");
说到这里,我假设您要做的是验证没有字段等于
”。这可以通过一系列逻辑运算符而不是
if
语句来完成:

boolean allFieldsCheck = !(messageId.equals("") ||
                           subject.equals("") ||
                           recipient.equals("") ||
                           message.equals(""));

首先,除了最后一个
if
语句外,您可以省略所有语句,因为它将覆盖您在
allFieldsCheck
上的任何值。但即使如此,您也不需要
if
语句-您可以直接将布尔检查的值分配给变量:

allFieldsCheck = !message.equals("");
说到这里,我假设您要做的是验证没有字段等于
”。这可以通过一系列逻辑运算符而不是
if
语句来完成:

boolean allFieldsCheck = !(messageId.equals("") ||
                           subject.equals("") ||
                           recipient.equals("") ||
                           message.equals(""));

所有if语句都可以替换为:

allFieldsCheck = ! messageId.equals("");
etc...
此外,只有最后一个if语句才会对
allFieldsCheck
布尔变量产生影响;例如:

if (messageId.equals("") ){
    allFieldsCheck = false;
} else {
    allFieldsCheck = true;
}

if (subject.equals("") ){
    allFieldsCheck = false;
} else {
    allFieldsCheck = true;
}

if (recipient.equals("") ){
    allFieldsCheck = false;
} else {
    allFieldsCheck = true;
}

if (message.equals("") ){
    allFieldsCheck = false;
} else {
    allFieldsCheck = true;
}
相当于

allFieldsCheck = ! messageId.equals("");
allFieldsCheck = ! subject.equals("");
allFieldsCheck = ! recipient.equals("");
allFieldsCheck = ! message.equals(""); 
只有最后一条语句对
allFieldsCheck

你想要的是:

allFieldsCheck = !(messageId.equals("") || subject.equals("") || recipient.equals("") || message.equals("")) //false if any of the top returns `true`

所有if语句都可以替换为:

allFieldsCheck = ! messageId.equals("");
etc...
此外,只有最后一个if语句才会对
allFieldsCheck
布尔变量产生影响;例如:

if (messageId.equals("") ){
    allFieldsCheck = false;
} else {
    allFieldsCheck = true;
}

if (subject.equals("") ){
    allFieldsCheck = false;
} else {
    allFieldsCheck = true;
}

if (recipient.equals("") ){
    allFieldsCheck = false;
} else {
    allFieldsCheck = true;
}

if (message.equals("") ){
    allFieldsCheck = false;
} else {
    allFieldsCheck = true;
}
相当于

allFieldsCheck = ! messageId.equals("");
allFieldsCheck = ! subject.equals("");
allFieldsCheck = ! recipient.equals("");
allFieldsCheck = ! message.equals(""); 
只有最后一条语句对
allFieldsCheck

你想要的是:

allFieldsCheck = !(messageId.equals("") || subject.equals("") || recipient.equals("") || message.equals("")) //false if any of the top returns `true`

一个问题是3条first if语句是多余的,因为第4条if语句将覆盖它们所做的任何更改

如果这些值中的任何一个为空,您似乎希望将allFieldsCheck赋值为false。这将是一个简单得多的单行线。基本上,如果任何值是空字符串,则allFieldsCheck设置为false

 allFieldsCheck = !(messageId.equals("") || subject.equals("")|| message.equals("") || subject.equals(""))

一个问题是3条first if语句是多余的,因为第4条if语句将覆盖它们所做的任何更改

如果这些值中的任何一个为空,您似乎希望将allFieldsCheck赋值为false。这将是一个简单得多的单行线。基本上,如果任何值是空字符串,则allFieldsCheck设置为false

 allFieldsCheck = !(messageId.equals("") || subject.equals("")|| message.equals("") || subject.equals(""))

您可能没有预期的结果。。。每次检查都将其设置为false和true,因此,如果第一次检查为false,最后一次检查为true,则最终结果将为true。我猜你是想做如下的事情

String messageId = messageIdText.getText();
String subject = subjectText.getText();
String recipient = recipientText.getText();
String message = messageArea.getText();

// Set to true
boolean allFieldsCheck = true;

// Foreach check and only set false so if one is bad, the allFieldsCheck is bad.
if (messageId.equals("")) allFieldsCheck = false;
if (subject.equals("")) allFieldsCheck = false;
if (recipient.equals("")) allFieldsCheck = false;
if (message.equals("")) allFieldsCheck = false;

您可能没有预期的结果。。。每次检查都将其设置为false和true,因此,如果第一次检查为false,最后一次检查为true,则最终结果将为true。我猜你是想做如下的事情

String messageId = messageIdText.getText();
String subject = subjectText.getText();
String recipient = recipientText.getText();
String message = messageArea.getText();

// Set to true
boolean allFieldsCheck = true;

// Foreach check and only set false so if one is bad, the allFieldsCheck is bad.
if (messageId.equals("")) allFieldsCheck = false;
if (subject.equals("")) allFieldsCheck = false;
if (recipient.equals("")) allFieldsCheck = false;
if (message.equals("")) allFieldsCheck = false;


如果(cond){x=true;}否则{x=false;}
等于
x=cond
。此外,只有您的最终检查对整体结果有任何影响。显然,您希望在开始时设置
allFieldsCheck=true
一次,并删除所有
else
分支。还有
allFieldsCheck=!messageId.isEmpty()
(等等)更优雅、更简短、更可读。请发布一个完整的示例,其他人可以自己尝试编译,如果(cond){x=true;}否则{x=false;}等同于
x=cond,请标记获取错误的行
。此外,只有您的最终检查对整体结果有任何影响。显然,您希望在开始时设置
allFieldsCheck=true
一次,并删除所有
else
分支。还有
allFieldsCheck=!messageId.isEmpty()
(等等)更优雅、更简短、更可读。请发布一个完整的示例,其他人可以自己尝试编译,并请标记获取错误的行,这些应该是
allFieldsCheck=!stuff.equals(“”)@tobias_k yup:)意外地放入了奇怪的逻辑:P@tobias_k它是fixed@tobias_k这个翻转该值,例如,如果
messageId.equals(“”
为true,则表示allFieldsCheck为false(表示存在错误)。我知道
是什么是,并且它在一些代码块中丢失。我现在修好了。如果你的意思是相反的,可以随意颠倒,但那是错误的。应该是
allFieldsCheck=!stuff.equals(“”)@tobias_k yup:)意外地放入了奇怪的逻辑:P@tobias_k它是fixed@tobias_k这个翻转该值,例如,如果
messageId.equals(“”
为true,则表示allFieldsCheck为false(表示存在错误)。我知道
是什么是,并且它在一些代码块中丢失。我现在修好了。如果你的意思是相反的,请随意反转,但那是错误的。作为首选,我发现它读起来更清楚,我通常表示
!(a | | b | | c)
as
!a&&!b&&!c
。最好*使用
#isEmpty()
而不是
#equals(“”
)。(*可读性更强)作为首选,我发现它读起来更清晰,我通常表示
!(a | | b | | c)
as
!a&&!b&&!c
。最好*在中使用
#isEmpty()