到目前为止,我已经拥有了这部分代码。编译精细,运行良好。但是如果我选择在列表中插入一个不排名的等级,它仍会打印我输入的值。
private String Rank; //string r
private static String[] Ranks = {"Assistant", "Associate", "Full"};
public professor(String n, int a, int s, String r, int nc, int pp)
{
super(n, a, s);
setRank(r);
setNumCo(nc);
setPubPaps(pp);
}
//mutator to set the Rank and check to make sure it is in the string list
public void setRank(String r)
{
boolean check = false;
List valid = Arrays.asList(this.Ranks);
if(valid.contains(r))
check = true;
if(check = true)
this.Rank = r;
else
this.Rank = "Associate";
}
以下是我所谈论的一个例子:
professor p2 = new professor ("Muench", 50, 222344455, "False", 3, 45);
"假"绝对不在排名列表中,但它仍然会在我的打印窗口中打印如下 虚假教授Muench ....
答案 0 :(得分:1)
List valid = Arrays.asList(this.Ranks);
if(valid.contains(r))
this.Rank = r;
else
this.Rank = "Associate";
这是有效的,因为.contains方法返回一个布尔值,所以当返回值时,你基本上会得到if(true)
或if(false)
答案 1 :(得分:0)
if(valid.contains(r))
check = true;
if(check == true)
this.Rank = r;
else
this.Rank = "Associate";
答案 2 :(得分:0)
您也可以使用字符串数组(不将数组转换为列表)来执行此操作:
public void setRank(String r)
{
for ( final String rank : professor.Ranks ) // Static reference to Ranks class variable.
{
if ( rank.equals( r ) )
{
this.Rank = r;
return;
}
}
this.Rank = "Associate";
}
您还有一个奇怪的命名约定:
professor
完全是小写的。Rank
已成为国会。答案 3 :(得分:0)
使用 Java 8
如果区分大小写
[:fr]
如果不区分大小写
public void setRank(String r){
this.Rank = Stream.of(Ranks).filter(p->p.equals(r)).findAny().orElse("Associate");
}