Java NameLengthNotValidException всегда выдается в domainclass - PullRequest
0 голосов
/ 20 марта 2019

ВАЖНО: Возможно, это вопрос новичка, но я не знаю, как его решить.

У меня есть класс пользовательского интерфейса, который я использую для ввода имени и пола (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--;
        }
    }
}

В моем доменном классе я проверяю длину этого имени в установщике, но он всегда выдает исключение, независимо от того, что я пробовал. При отладке длина любого имени, которое я выбрал, как ни странно, составляет от 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;

}

Любые идеи или советы приветствуются.

РЕДАКТИРОВАТЬ1 код dc.maakSpelerAan

public void maakSpelerAan(String naam, char geslacht){
    s.maakSpeler(naam, geslacht);   
}

РЕДАКТИРОВАТЬ2 код s.maakspeler

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);
    } 


}

РЕДАКТИРОВАТЬ 3 REPOST С ПРАВИЛЬНЫМ ИЗОБРАЖЕНИЕМ Изображение переменной «naam» непосредственно перед переходом в цикл IF при отладке. MINLENGTHNAAM и MAXLENGTHNAAM установлены в 6 и 12 соответственно в классе интерфейса.

Loop

EDIT4 Код в моем классе интерфейса для MINLENGTH AND MAXLENGTH

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;

}

1 Ответ

0 голосов
/ 20 марта 2019

В «Edit4» вам нужно изменить зеленую линию на:

if(naam.length() > MAXLENGTHNAAM || naam.length() < MINLENGTHNAAM) {

Просто небольшая логическая проблема:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...