Witam!
Mam problem natury bardzo banalnej, ale mimo to nie potrafię zrozumieć, co jest źle w moim toku myślenia.
Na początku klasy zdefiniowałem:
boolean beka = true;
int licznikOkr=0;
int licznikKwa=0;
int licznikDzi=0;
Następnie tą zmienną("boolean beka") wykorzystuję w pętli, która zlicza nawiasy, ale nie rozumiem czemu jej wartość jest zawsze przeciwna tej, której się spodziewam(co w sumie nie jest problemem jak znam tą zależność, ale wypadałoby zrozumieć czemu tak jest). Podaję swój kod, żebym lepiej mógł wytłumaczyć o co mi chodzi:
while(!stos.isEmpty()){
String a =stos.pop();
switch (a) {
case "(":
licznikOkr++;
break;
case "[":
licznikKwa++;
break;
case "{":
licznikDzi++;
break;
case ")":
//przypadek gdy nie ma nawiasu otwierajacego, a pojawia sie zamykajacy
if (licznikOkr == 0) beka = false;
licznikOkr--;
break;
case "]":
if (licznikKwa == 0) beka = false;
licznikKwa--;
break;
case "}":
if (licznikDzi == 0) beka = false;
licznikDzi--;
break;
}
}
if(licznikDzi==0 && licznikKwa==0 && licznikOkr==0 && beka){
System.out.println("Podane wyrażenie,"+s+"," +
"jest dobrze zapisane");
System.out.println(beka);
} else{
System.out.println("Podane wyrażenie,"+s+"," +
"jest zle zapisane");
System.out.println(beka);
}
Ten kod jedynie zlicza nawiasy dodając jeden do sumy jak trafia na nawias otwierający, a odejmuje jeden od sumy, gdy trafi na zamykający. (dostępne nawiasy "(,[,{" )
Manipuluję zmienną beka, gdy najpierw wprowadzany jest nawias zamykający i w tym momencie ustawiam ją na false, czyli powinien być spełniony przypadek "else"(na samym koncu), ale jest odwrotnie, true występuje, gdy powinnien być false i na odwrót, jednak nie widzę miejsca, gdzie popełniam błąd. Mam nadzieje, że mimo zawiłego tłumaczenia z mojej strony jest to zrozumiałe.
Najprostszy przykład, dla którego to sprawdzałem to: ")2+3(", który podaję przez scanner, potem rozbijam to na tokeny, wrzucam na stos tylko tokeny zawierające nawiasy, a następnie ściągam te tokeny ze stosu tak jak w kodzie wyżej.