Java中使用Mutator的二进制类型的操作数类型错误
我是Java编程的初学者。我正在使用BlueJ IDE。我似乎不知道这个变异器出了什么问题。错误消息显示二进制类型的操作数类型不正确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
/**
* 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);
}
在写你的课的时候不要担心它