01.
// wykorzystujemy klasę Scanner z pakietu java.util
02.
import
java.util.*;
03.
04.
/**
05.
* Sprawdzanie poprawności nawiasów
06.
* Wykorzystujemy utworzoną wcześniej klasę Stos
07.
*
08.
* @author kodatnik.blogspot.com
09.
*/
10.
public
class
PoprawnoscNawiasow {
11.
12.
// metoda sprawdza czy nawiasy w przekazanym jako parametr wyrażeniu są poprawne
13.
// obsługiwane są nawiasy okrągłe, kwadratowe i klamrowe
14.
// zwraca true dla poprawnych i false dla niepoprawnych
15.
public
static
boolean
czyPoprawne(String wyrazenie) {
16.
17.
// dwie tablice przechowujące nawiasy otwierające i zamykające
18.
char
[] otwierajace = {
'('
,
'['
,
'{'
};
19.
char
[] zamykajace = {
')'
,
']'
,
'}'
};
20.
21.
// tworzymy stos o rozmiarze naszego wyrażenia
22.
Stos stos =
new
Stos(wyrazenie.length());
23.
24.
// pętla dla każdego znaku znajdującego się w wyrażeniu
25.
for
(
int
i =
0
; i < wyrazenie.length(); i++) {
26.
27.
// jeżeli znak jest nawiasem otwierającym odkładamy go na stos
28.
for
(
int
j =
0
; j < otwierajace.length; j++ ){
29.
if
( wyrazenie.charAt(i) == otwierajace[j]) stos.push((
int
) otwierajace[j]);
30.
}
31.
32.
// jeżeli znak jest nawiasem zamykającym porównujemy go z wartością ze stosu
33.
for
(
int
j =
0
; j < zamykajace.length; j++ ){
34.
if
( wyrazenie.charAt(i) == zamykajace[j]) {
35.
// jeśli stos jest pusty zwracamy fałsz
36.
if
(stos.czyPusty())
return
false
;
37.
// jeśli nawiasy nie są tego samego typu zwracamy fałsz
38.
if
(((
char
) stos.pop()) != otwierajace[j])
return
false
;
39.
}
40.
}
41.
42.
// ignorujemy znaki, które nie są nawiasami
43.
44.
}
45.
// zwracamy true albo false (stos pusty - wszystkie nawiasy są poprawne)
46.
return
stos.czyPusty();
47.
}
48.
49.
public
static
void
main(String[] args) {
50.
51.
Scanner sc =
new
Scanner(System.in);
52.
System.out.print (
"Podaj wyrażenie z nawiasami: "
);
53.
54.
// pobieramy od użytkownika wyrażenie z nawiasami
55.
String wyrazenie = sc.nextLine();
56.
57.
// wyświetlamy informacje o poprawności wyrażenia z nawiasami
58.
System.out.println(
"Wyrażenie jest "
+ (czyPoprawne(wyrazenie) ?
"poprawne."
:
"niepoprawne."
));
59.
}
60.
}
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 :)