我是Java的新手。
我有一个看起来像(Array)的数组。 (我用Array.toString来打印它)。这是阵列的制作方式:arraymade。 这是从这种格式的文件中读取和制作的:
Nilsson;Lars;u;g;vg;vg
Svensson;Lena;vg;g;g;vg
Jonsson;Jonas;g;g;vg;g
我正在尝试创建一个返回“u”,“vg”或“g”的方法,具体取决于对象数组包含的内容。
@Override
public String getKursbetyg() {
if (Arrays.asList(uppgiftsbetyg).contains("u")) {
kursbetyg = "u";
return kursbetyg;
} else if (Arrays.asList(uppgiftsbetyg).contains("if the array contains 2 vg strings")) {
kursbetyg = "vg";
return kursbetyg;
} else {
kursbetyg = "g";
return kursbetyg;
}
}
这是我现在的代码,但它似乎不起作用,因为它只返回“g”,即使数组包含“u”。
另外你可以看到我希望这个方法只在找到2个vg:s时返回vg,因为你需要2个vg:s来获得等级vg。那么如何在这里检查双元素?
答案 0 :(得分:0)
首先,您应该重新考虑您的要求。一个字符串(如u
)的存在并不排除其他字符串的缺失(例如两个vg
或g
),也不存在u
和两个字符串vg
证明了g
的存在。您发布的示例在这方面已经不一致了。
除此之外,你的方法缺少变量kursbetyg
的声明,我真的希望,你不是修改一个字段作为这个“get ...”方法的副作用。
您可以通过搜索除第一个匹配项之外的子列表来直接搜索两个匹配项:
public String getKursbetyg() {
List<String> list = Arrays.asList(uppgiftsbetyg);
if(list.contains("u")) {
return "u";
}
int index=list.indexOf("vg");
if(index>=0 && list.subList(index+1, list.size()).contains("vg")) {
return "vg";
}
return "g";
}
更接近原始结构的解决方案,也可能被认为更简单
public String getKursbetyg() {
List<String> list = Arrays.asList(uppgiftsbetyg);
if(list.contains("u")) {
return "u";
} else if(Collections.frequency(list, "vg")>=2) {
return "vg";
} else {
return "g";
}
}
但是,通过不必要地计算vg
超出2
的出现次数,可能会做更多的工作。