Java中使用Mutator的二进制类型的操作数类型错误

Java中使用Mutator的二进制类型的操作数类型错误,java,bluej,Java,Bluej,我是Java编程的初学者。我正在使用BlueJ IDE。我似乎不知道这个变异器出了什么问题。错误消息显示二进制类型的操作数类型不正确 /** * Sets the period of this course. */ public void setPeriod(String period) { if(period = "A"|| "B" || "C" || "D") { this.period = period; } } // end of mutato

我是Java编程的初学者。我正在使用BlueJ IDE。我似乎不知道这个变异器出了什么问题。错误消息显示二进制类型的操作数类型不正确

/**
 * Sets the period of this course.
 */
public void setPeriod(String period)
{
    if(period = "A"|| "B" || "C" || "D")
    {
        this.period = period;
    }
} // end of mutator setPeriod(String period)

您的
if
语句表达式不正确。单独的测试表达式需要用逻辑
| |
运算符分隔

还可以使用
String.equals
来比较
String
内容。赋值运算符
=
用于赋值

if (period.equals("A") || period.equals("B") || 
                          period.equals("C") || period.equals("D")) {
或者更好


这将防止
空点异常
如果
期间
null
您的
语句表达式不正确。单独的测试表达式需要用逻辑
| |
运算符分隔

public void setPeriod(String period)
{
    if(period.equals("A") || period.equals("B") || period.equls("C") || period.equals("D"))
    {
        this.period = period;
    }
} // end of mutator setPeriod(String period)
还可以使用
String.equals
来比较
String
内容。赋值运算符
=
用于赋值

if (period.equals("A") || period.equals("B") || 
                          period.equals("C") || period.equals("D")) {
或者更好

这将防止出现
NullPointerException
period
null

public void setPeriod(String period)
{
    if(period.equals("A") || period.equals("B") || period.equls("C") || period.equals("D"))
    {
        this.period = period;
    }
} // end of mutator setPeriod(String period)
那个么,若周期为空会发生什么呢?或者不等于这些值中的任何一个


那个么,若周期为空会发生什么呢?或者不等于这些值中的任何一个?

|
表示逻辑Or,其操作数可以是布尔或导致布尔表达式

您应该更改方法以检查布尔表达式,如下所示

public void setPeriod(String period)
{
    if("A".equals(period) || "B".equals(period) || "C".equls(period) || "D".equals(period)) // using "A".equals(period) also gives safety from NPE, if period is null
    {
        this.period = period;
    }
} 

| |
表示逻辑OR,其操作数可以是布尔型或导致布尔型表达式

您应该更改方法以检查布尔表达式,如下所示

public void setPeriod(String period)
{
    if("A".equals(period) || "B".equals(period) || "C".equls(period) || "D".equals(period)) // using "A".equals(period) also gives safety from NPE, if period is null
    {
        this.period = period;
    }
} 

您将需要咨询客户。逻辑or,
|
的优先级高于赋值,
=
。此外,您需要认识到,在
C
语言家族中,
=
是赋值,而
=
是相等性测试。那么,你的表情

if(period = "A"|| "B" || "C" || "D")
意思与

if(period = ("A"|| "B" || "C" || "D"))
将period设置为“A”或“B”或“C”或“D”,然后查看结果是否为
true
。但与C不同,逻辑or只适用于布尔运算,因此表达式的这一部分不会编译。即使这样做有效,您也将为结果设置周期,而不是对其进行测试。那么结果就不是布尔值了

您需要测试集合成员资格:

private final Set<String> legalPeriods;
static {
    Set<String> set = new HashSet<>();
    set.add("A");
    set.add("B");
    set.add("C");
    set.add("D");
    legalPeriods = Collections.unmodifiableSet(set);
}

这是更多的工作,但它很好地解释了自己。调用
unmodifiableSet
可以防止灾难;我试着保护自己不受伤害。

你会想咨询医生的。逻辑or,
|
的优先级高于赋值,
=
。此外,您需要认识到,在
C
语言家族中,
=
是赋值,而
=
是相等性测试。那么,你的表情

if(period = "A"|| "B" || "C" || "D")
意思与

if(period = ("A"|| "B" || "C" || "D"))
将period设置为“A”或“B”或“C”或“D”,然后查看结果是否为
true
。但与C不同,逻辑or只适用于布尔运算,因此表达式的这一部分不会编译。即使这样做有效,您也将为结果设置周期,而不是对其进行测试。那么结果就不是布尔值了

您需要测试集合成员资格:

private final Set<String> legalPeriods;
static {
    Set<String> set = new HashSet<>();
    set.add("A");
    set.add("B");
    set.add("C");
    set.add("D");
    legalPeriods = Collections.unmodifiableSet(set);
}

这是更多的工作,但它很好地解释了自己。调用
unmodifiableSet
可以防止灾难;我试着保护自己不受伤害。

这不是对你问题的直接回答,但如果你在句点上使用一个而不是字符串,你会避免这个问题,并且通常会让事情变得更容易。然后,您可以使用静态方法来解析输入文件中的字符串:

public void setPeriod(String period) throws IllegalArgumentException {
    this.period = Enum.valueOf(Class<Period>, period);
}

写作时不要担心这个问题。

这不是对你问题的直接回答,但是如果你在句点上使用一个而不是一个字符串,你会避免这个问题,并且通常会让事情变得更容易。然后,您可以使用静态方法来解析输入文件中的字符串:

public void setPeriod(String period) throws IllegalArgumentException {
    this.period = Enum.valueOf(Class<Period>, period);
}
在写你的课的时候不要担心它