public class trening_lf06 { /* Innholdet i denne metoden svarer på oppgaven */ public static boolean erBalansert(char[] uttrykk) { char[] uttrykk1, uttrykk2; // for å sjekke del-uttrykk // test for lengde 0 if (uttrykk.length == 0) { return true; } // test for to uttrykk etter hverandre char start1 = uttrykk[0]; char slutt1 = (start1 == '(' ? ')' : ']'); int dybde = 1; // i denne løkka er det viktig å stoppe 1 før slutten, // hvis ikke kan uttrykk1 == uttrykk og uttrykk2 være tomt for (int i = 1; i < uttrykk.length - 1; i++) { if (uttrykk[i] == start1) { dybde++; } else if (uttrykk[i] == slutt1) { dybde--; } if (dybde == 0) { uttrykk1 = new char[i+1]; for (int j = 0; j < uttrykk1.length; j++) { uttrykk1[j] = uttrykk[j]; } uttrykk2 = new char[uttrykk.length - i - 1]; for (int j = 0; j < uttrykk2.length; j++) { uttrykk2[j] = uttrykk[j+i+1]; } return erBalansert(uttrykk1) && erBalansert(uttrykk2); } } // test for mellom '(' og ')' if (uttrykk[0] == '(' && uttrykk[uttrykk.length - 1] == ')') { uttrykk1 = new char[uttrykk.length - 2]; for (int i = 0; i < uttrykk1.length; i++) { uttrykk1[i] = uttrykk[i+1]; } return erBalansert(uttrykk1); } // test for mellom '[' og ']' else if (uttrykk[0] == '[' && uttrykk[uttrykk.length - 1] == ']') { uttrykk1 = new char[uttrykk.length - 2]; for (int i = 0; i < uttrykk1.length; i++) { uttrykk1[i] = uttrykk[i+1]; } return erBalansert(uttrykk1); } return false; } /* Denne metoden kjører tester for å sjekke at metoden over fungerer */ public static void main(String[] args) { // test-data char[][] riktige = { {}, {'[', ']'}, {'(', ')', '[', ']'}, {'[', '(', ')', ']', '(', '[', ']', ')'}, {'(', '[', '(', ')', ']', '(', '[', ']', ')', ')'}, {'[', ']', '[', ']'}, {'(', '[', ']', ')', '(', ')'} }; char[][] feil = { {'('}, {'(', ']'}, {'[', ')'}, {'(', '[', ')', ']'}, {'(', '(', '(', '(', '(', '(', ')', ')', ')', ')', ')'} }; // test metoden System.out.println("Tester riktige parantesuttrykk:"); for (int i = 0; i < riktige.length; i++) { boolean svar = erBalansert(riktige[i]); System.out.println(String.valueOf(riktige[i]) + ": " + (svar ? "Riktig" : "Feil")); } System.out.println("Tester gale parantesuttrykk:"); for (int i = 0; i < feil.length; i++) { boolean svar = erBalansert(feil[i]); System.out.println(String.valueOf(feil[i]) + ": " + (!svar ? "Riktig" : "Feil")); } } }