'如果'声明是冗余的

时间:2015-01-26 22:16:59

标签: java if-statement

我正在尝试编写验证系统,以验证用户是否输入了所需的字段。我似乎得到一个错误“'如果'声明是冗余的',有人可以帮助我解决这个问题吗?或者可能想出一种更好的方法来验证字段以检查字段是否为空。

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

6 个答案:

答案 0 :(得分:3)

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

allFieldsCheck = !message.equals("");

在说明之后,我假设您要做的是验证没有字段等于""。这可以通过一系列逻辑运算符而不是if语句来完成:

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

答案 1 :(得分:1)

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

如果这些值中的任何一个为空,您似乎希望将allFieldsCheck指定为false。这将是一个更简单的一个班轮。基本上,如果任何值为空字符串,则将allFieldsCheck设置为false。

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

答案 2 :(得分:0)

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

boolean myBool = some condition;

实施例

boolean myBool = 5 + 1 == 6; // myBool = true

因此,您的if语句可以压缩为:

allFieldsCheck = !messageId.equals("");

或者所有这些都压缩成一个:

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

答案 3 :(得分:0)

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

boolean allFieldsCheck = true;

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

答案 4 :(得分:0)

所有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`

答案 5 :(得分:0)

您可能没有预期的结果...您将每个支票设置为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;