gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Stek - primer provere ispravnosti parova zagrada
[spa1-materijali.git] / kodovi / stek-i-red-opsluzivanja / ProveraZagrada.java
1 public class ProveraZagrada {
3 /**
4 * Proverava da li su zagrade ispravno otvarane i zatvarane u prosledjenom
5 * stringu.
6 *
7 * @param red
8 * String koji se proverava
9 * @return da li je prosledjeni string ispravan
10 */
11 public static boolean proveriRed(String red) {
12 Stek<Character> stek = new Stek<>();
13 for (int i = 0; i < red.length(); i++) {
14 char c = red.charAt(i);
15 if (jeOtvorenaZagrada(c)) {
16 stek.stavi(c);
17 } else if (jeZatvorenaZagrada(c)) {
18 if (stek.jePrazan()) {
19 return false;
20 } else {
21 char par = stek.skiniVrh();
22 if (c != zatvorena(par)) {
23 return false;
24 }
25 }
26 }
27 }
28 // ako je stek prazan, svi su nasli par
29 return stek.jePrazan();
30 }
32 /**
33 * Proverava da li su zagrade ispravno otvarane i zatvarane u prosledjenom
34 * stringu i vraca poziciju prve greske u redu ako je bilo (od 1 do duzina)
35 * ili -1 ako nema greske.
36 *
37 * @param red
38 * String koji se proverava
39 * @return pozicija greske, ili -1 ako je nije bilo
40 */
41 public static int pozicijaGreskeURedu(String red) {
42 Stek<Character> stek = new Stek<>();
43 for (int i = 0; i < red.length(); i++) {
44 char c = red.charAt(i);
45 if (jeOtvorenaZagrada(c)) {
46 stek.stavi(c);
47 } else if (jeZatvorenaZagrada(c)) {
48 if (stek.jePrazan()) {
49 return i + 1;
50 } else {
51 char par = stek.skiniVrh();
52 if (c != zatvorena(par)) {
53 return i + 1;
54 }
55 }
56 }
57 }
58 // ako je stek prazan, svi su nasli par
59 if (stek.jePrazan())
60 return -1;
61 else
62 return red.length() + 1;
63 }
65 /**
66 * Proverava da li je u prosledjenom fajlu ispravno koriscenje zagrada i
67 * vraca poruku o gresci ako je bilo, ili "Ispravan" ako nije bilo greske.
68 *
69 * @param ime
70 * @return
71 */
72 public static String proveriFajl(String ime) {
73 Stek<Character> stek = new Stek<>();
75 int brojReda = 0;
76 while (Svetovid.in(ime).hasMore()) {
77 String red = Svetovid.in(ime).readLine();
78 brojReda++;
79 for (int i = 0; i < red.length(); i++) {
80 char c = red.charAt(i);
81 if (jeOtvorenaZagrada(c)) {
82 stek.stavi(c);
83 } else if (jeZatvorenaZagrada(c)) {
84 if (stek.jePrazan()) {
85 return "Nema otvorene zagrade; red " + brojReda
86 + " kolona " + i;
87 } else {
88 char par = stek.skiniVrh();
89 if (c != zatvorena(par)) {
90 return "Pogresna zatvorena zagrada; red "
91 + brojReda + " kolona " + i;
92 }
93 }
94 }
95 }
96 }
97 Svetovid.in(ime).close();
99 if (stek.jePrazan()) {
100 // ako je stek prazan, svi su nasli par
101 return "Ispravan";
102 } else {
104 return "Ostalo je nezatvorenih zagrada";
108 public static char zatvorena(char par) {
109 switch (par) {
110 case '(':
111 return ')';
112 case '[':
113 return ']';
114 case '{':
115 return '}';
116 default:
117 return 0;
121 public static boolean jeZatvorenaZagrada(char c) {
122 return (c == ')' || c == ']' || c == '}');
125 public static boolean jeOtvorenaZagrada(char c) {
126 return (c == '(' || c == '[' || c == '{');
129 public static void testRedovi() {
130 String[] ulazi = new String[] { "abc", "()", "())", "(()", ")(",
131 "()[]{} ((( [{}] ) [] ))" };
132 for (String s : ulazi) {
133 System.out.println(proveriRed(s) + "\t" + s);
137 public static void testRedoviPozicija() {
138 String[] ulazi = new String[] { "abc", "()", "())", "(()", ")(",
139 "()[]{} ((( [{}] ) [] ))" };
140 for (String s : ulazi) {
141 int g = pozicijaGreskeURedu(s);
142 System.out.println(g + "\t" + s);
146 public static void testFajlovi() {
147 String[] fajlovi = new String[] { "tekst1.txt", "tekst2.txt",
148 "tekst3.txt", "tekst4.txt" };
149 for (String s : fajlovi) {
150 System.out.println("Fajl:" + s);
151 System.out.println(proveriFajl(s));
155 public static void main(String[] args) {
156 testRedovi();
157 System.out.println();
158 testRedoviPozicija();
159 System.out.println();
160 testFajlovi();
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner