重要提示:可能是一个菜鸟问题,但我不知道如何解决它。
我有一个UI类,用来通过扫描器输入姓名和性别(geslacht) (参见下面的代码)
private static void geefNaamEnGeslacht(int aantal) {
String naam, geslacht;
for (int i = 0; i < aantal; i++) {
System.out.print("Wat is de naam van speler " + (i + 1) + " (min 6 tekens, max 12 tekens)? ");
naam = sc.next();
naam += sc.nextLine();
System.out.print("Wat is het geslacht van speler " + (i + 1) + "(man=m vrouw=v)? ");
geslacht = sc.next();
System.out.println(naam.length());
try {
dc.maakSpelerAan(naam, geslacht.charAt(0));
} catch (NameLengthNotValidException e) {
System.out.println(e.getMessage());
i--;
}
}
}
在我的域类中,我在setter中检查该名称的长度,但无论我尝试什么,它都会抛出异常。在调试时,奇怪的是,我选择的任何名称的长度都在6到12个字符之间。(参见下面的代码)
public final void setNaam(String naam) {
int lengte = naam.length();
if (naam.length() < 6 || naam.length() > 12) {
throw new NameLengthNotValidException("Je naam moet tussen 6 en 12 tekens liggen!");
}
this.naam = naam;
}
任何想法或小贴士都会被采纳。
dc.maakSpelerAan的EDIT1代码
public void maakSpelerAan(String naam, char geslacht){
s.maakSpeler(naam, geslacht);
}
s.maakspeler的EDIT2代码
public void maakSpeler(String naam, char geslacht){
if (spelCompleet()) {
throw new ListFilledException("De lijst met spelers is vol !");
}
if (!controleerUniekeNaam(naam)) {
throw new NotUniqueNameException();
}
Kaart[] schatkaarten = new Kaart[STARTAANTAL];
Kaart[] kerkerkaarten = new Kaart[STARTAANTAL];
for (int i = 0; i > STARTAANTAL; i++) {
schatkaarten[i] = stapels.get(SCHATKAART).geefBovensteKaart();
kerkerkaarten[i] = stapels.get(KERKERKAART).geefBovensteKaart();
}
try{
Speler s = new Speler(naam, geslacht);
s.getKaarten(kerkerkaarten, schatkaarten);
spelers.add(s);
}catch (IllegalArgumentException | NameLengthNotValidException e){
throw e;
}
if (spelCompleet()) {
//UC2
spelers.get(EERSTESPELERINDEX).setBeurt(true);
}
}
EDIT3重新发布正确的图像变量"naam“的图像,然后在调试时进入IF循环。在接口类中,MINLENGTHNAAM和MAXLENGTHNAAM分别设置为6和12。
用于MINLENGTH和MAXLENGTH的接口类中的EDIT4代码
public interface SpelInfo {
final int STARTAANTAL = 2;
final int MAXAANTALPUNTEN = 10;
final int INDEXNAAMDETAILS = 0;
final int INDEXGESLACHTDETAILS = 1;
final int INDEXPUNTENDETAILS = 2;
final int MINAANTALSPELERS = 3;
final int MAXAANTALSPELERS= 6;
final int EERSTESPELERINDEX = 0;
final int MAXLENGTHNAAM = 6;
final int MINLENGTHNAAM = 12;
final int AANTALSTAPELS = 2;
final char MAN = 'm';
final char VROUW = 'v';
final int SCHATKAART = 0;
final int KERKERKAART = 1;
}
发布于 2019-03-21 01:56:27
在"Edit4“中,您需要将绿色行更改为:
if(naam.length() > MAXLENGTHNAAM || naam.length() < MINLENGTHNAAM) {
只有一个小逻辑问题:)
https://stackoverflow.com/questions/55266548
复制相似问题