Haakjes balanceren

Status
Niet open voor verdere reacties.

colablikjes

Nieuwe gebruiker
Lid geworden
18 mrt 2010
Berichten
3
Hej,

Ik ben bezig met een programmatje te maken dat controleert of er evenveel gesloten als open haakjes zijn. Ik een iets gefabriceerd maar het is ni volledig volgens de regels die we meekregen. Ik zal eerst mijn code zetten:

Code:
public class OpenEnGeslotenHaakjes {

    static char[] stack;
    static String testString = "{{}}{}{}}}}{}";
    static int index = testString.length();

    public static void main(String[] args) {
        boolean correct;
        char waarde;
        int aantalGeslotenHaakjes, aantalOpenHaakjes;
        aantalGeslotenHaakjes = 0;
        aantalOpenHaakjes = 0;
        int length = testString.length();
        stack = new char[length];
        evalueer(testString);
        for (int i = 0; i < length; i++) {
            waarde = pop();
            correct = controleerWaarde(waarde);
            if (correct) {
                aantalGeslotenHaakjes++;
            } else {
                aantalOpenHaakjes++;
            }
        }


        System.out.println(" Gesloten " + aantalGeslotenHaakjes + "Open " + aantalOpenHaakjes);
    }

    private static void evalueer(String testString) {
        stack = testString.toCharArray();
    }

    private static char pop() {
        char haakje1;
        haakje1 = stack[index - 1];
        --index;
        return haakje1;
    }

    private static boolean controleerWaarde(char waarde) {
        boolean correct;
        correct = false;
        if (waarde == '}') {
            correct = true;
        }
        return correct;
    }
}

We mochten echter maar 2 klassevariabele gebruiken namelijk de index variabele en stack en er moest gebruikt maken van zowel de push en pop methode.

Kan iemand mij de oplossing in woorden of in code geven of op weg helpen?

Alvast bedankt.
 
Laatst bewerkt door een moderator:
Misschien kan je dit proberen

Code:
public class StackDemo {
	Stack st;
	
	public static void main(String[] args) {
		st = new Stack(); 
		String test = "{{}{}}}{{}}";
		
		push_value(test);
		pop_value();
	}
	
	public void push_value(String test) {
		String [] array = test.split("");
		
		int length = array.length();
		
		for (int i=0; i < length; i++) {
			st.push(new String(value));
		}
	}
	
	public void pop_value() {
		int open=0, close=0, undentified=0;
		
		for (int i=0; i < length; i++) {
			String value = (String) st.pop();
			
			if (value == "{") { open++; }
			else if (value == "}") { close++; }
			else { undentified++; }
		}
		
		System.out.println("Open:" + open + ", Gesloten:" + close + ", Onbekend:" + undentified + ".\n");
	}
}

Ik weet niet of het werkt aangezien ik dit niet getest hebt maar zo heb je een push en pop functie die beide zaken afhandelt.
De String test kan je zelf bepalen en kijken of alles werkt

groeten vreugde
 
hmm.... bedankt voor de reacties maar ik ben er nog niet uit. ik heb nu:

public class OpenEnGeslotenHaakjes {

static char[] stack;
static int index = 0;
static char[] ca;

public static void main(String[] args) {
boolean correct;
String testString = "{{{}}}";
int length = testString.length();
ca = new char[length];
stack = new char[length];
evalueer(testString);
}

private static void evalueer(String testString) {
stack = testString.toCharArray();
char waarde;
boolean correct;
for (int i = stack.length - 1; i >= 0; i--) {
waarde = stack;
correct = controleerWaarde(waarde);
if (correct) {
push(waarde);
} else {
pop();
}
}
}

private static void push(char getal) {
ca[index] = getal;
index++;
}

private static char pop() {
char haakje1;
haakje1 = ca[index-1];
--index;
return haakje1;
}

private static boolean controleerWaarde(char waarde) {
boolean correct;
correct = false;
if (waarde == '}') {
correct = true;
}
return correct;
}
}

Mijn bedoeling is 2 arrays te maken. De ene array loopt het program af en als er een sluitend haakje is pop het dit in een nieuwe array. Als er een openend haakje is zou het dit eraf moeten halen. Als de array op het laatste dan leeg is, dan zijn er evenveel open als gesloten haakjes.

Maar ik snap de pop() methode niet. Hoe haalt die dit laatste element eraf?

Bedankt
 
Je zult de uitleg misschien al gekregen hebben maar toch even herhalen, de stack is als een stapel borden, als je een bord toevoegt -push- wordt die bovenaan bijgezet, als je een bord weghaalt -pop- is dat tevens die laatste dus krijg je een "last in, first out (LIFO)" principe. Hoe kun je zelf een stack maken...
- Je hebt je char[] stack grootte 0;
- in je push methode maak je een tijdelijke char[] tempstack die 1 plaats groter is dan je originele en kopieert er de inhoud van je originele in + hetgeen je wilt toevoegen en dan stel je je originele terug gelijk aan je tijdelijke;
- in je pop methode kopieer je alles naar je tijdelijke char[] tempstack die 1 positie kleiner is behalve de laatste. Wederom stel je je originele terug gelijk aan je tijdelijke;

of je vergeet dit alles en gebruikt de java.util.Stack (maar dat mag je waarschijnlijk niet:p)

nu voor je oefening:
Elke keer je een open haakje tegenkomt in je string steek je die bij in de stack, elke keer dat je een gesloten haakje tegenkomt haal je een haakje eruit en wanneer de stack kleiner is dan 0 of als er op het einde nog een haakje overblijft is er dus iets fout.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan