// wykorzystujemy klasę Scanner z pakietu java.util
import java.util.*;
/**
* Sprawdzanie poprawności nawiasów
* Wykorzystujemy utworzoną wcześniej klasę Stos
*
* @author kodatnik.blogspot.com
*/
public class PoprawnoscNawiasow {
// metoda sprawdza czy nawiasy w przekazanym jako parametr wyrażeniu są poprawne
// obsługiwane są nawiasy okrągłe, kwadratowe i klamrowe
// zwraca true dla poprawnych i false dla niepoprawnych
public static boolean czyPoprawne(String wyrazenie) {
// dwie tablice przechowujące nawiasy otwierające i zamykające
char[] otwierajace = {'(', '[', '{'};
char[] zamykajace = {')', ']', '}'};
// tworzymy stos o rozmiarze naszego wyrażenia
Stos stos = new Stos(wyrazenie.length());
// pętla dla każdego znaku znajdującego się w wyrażeniu
for (int i = 0; i < wyrazenie.length(); i++) {
// jeżeli znak jest nawiasem otwierającym odkładamy go na stos
for (int j = 0; j < otwierajace.length; j++ ){
if ( wyrazenie.charAt(i) == otwierajace[j]) stos.push((int) otwierajace[j]);
}
// jeżeli znak jest nawiasem zamykającym porównujemy go z wartością ze stosu
for (int j = 0; j < zamykajace.length; j++ ){
if ( wyrazenie.charAt(i) == zamykajace[j]) {
// jeśli stos jest pusty zwracamy fałsz
if (stos.czyPusty()) return false;
// jeśli nawiasy nie są tego samego typu zwracamy fałsz
if (((char) stos.pop()) != otwierajace[j]) return false;
}
}
// ignorujemy znaki, które nie są nawiasami
}
// zwracamy true albo false (stos pusty - wszystkie nawiasy są poprawne)
return stos.czyPusty();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print ("Podaj wyrażenie z nawiasami: ");
// pobieramy od użytkownika wyrażenie z nawiasami
String wyrazenie = sc.nextLine();
// wyświetlamy informacje o poprawności wyrażenia z nawiasami
System.out.println("Wyrażenie jest " + (czyPoprawne(wyrazenie) ? "poprawne." : "niepoprawne."));
}
}
Przykładowe uruchomienia aplikacji: Podaj wyrażenie z nawiasami: (a[b{c}d]e)
Wyrażenie jest poprawne.
Podaj wyrażenie z nawiasami: [a(b{c})
Wyrażenie jest niepoprawne.
Podaj wyrażenie z nawiasami: (([a]b)} Wyrażenie jest niepoprawne.
Modyfikując tablicę z nawiasami możemy sprawdzać poprawność wyrażeń z dowolnymi znakami otwierającymi i zamykającymi.

2 Komentarze - Sprawdzanie poprawności nawiasów
Mi ten kod w netbeans ani w jcreator nie chce działać. Przyczepia się do "Stos stos = new Stos(wyrazenie.length());" i nie wiem dlaczego ;/.
P.S. Żaden program ze stosem nie działa.
o nawiasy trzeba dbac
Prześlij komentarz
Możesz użyć niektórych tagów HTML, takich jak <b>, <i>, <u>, <a> Nie spamuj :)