Avatar billede renebmadsen Nybegynder
31. december 2006 - 13:49 Der er 7 kommentarer og
1 løsning

metode til at tjekke om parranteser er sat rigtigt i en string

Skal lave en metode de rtjekker om der er sat parranteser rigtigt i en tekst string har brug for lidt hjælp. her tjekket for om der er lige mange start og slut parranteser. men nu er jeg gået i stå.
Avatar billede schwarz84 Nybegynder
31. december 2006 - 13:58 #1
Tja, hvad er din definition af rigtig her?
Avatar billede renebmadsen Nybegynder
31. december 2006 - 14:04 #2
dette er rigtigt (hej hej)
mens dette er forkert )hej hej(
Avatar billede schwarz84 Nybegynder
31. december 2006 - 14:23 #3
Så når der ses en højreparantes skal der altid være sat mindst lige så mange venstreparanteser som der er sat højreparanteser til og med dette tegn?

Det kunne se således ud:
    public boolean countParantheses(String s) {
        int numberRight = 0;
        int numberLeft = 0;
        for (int i = 0; i < s.length(); i++ ) {
            char c = s.charAt(i);
            if (c == '(')
                numberLeft++;
            else if (c == ')')
                numberRight++;
            if (numberRight > numberLeft)
                return false;
        }
        return true;
    }
Avatar billede erikjacobsen Ekspert
31. december 2006 - 14:23 #4
antal=0
Løb strengen igennem fra venstre mod højre
Mødes en ( så antal++;
Mødes en ) så antal--;
Undervejs må antal aldrig blive negativ.
Tilsidst skal antal være 0
Avatar billede schwarz84 Nybegynder
31. december 2006 - 14:24 #5
Den løber en streng igennem og returnerer false hvis der opdages en højreparentes på et tidspunkt hvor der ikke tidligere er sat en venstreparantes (altså fx hvis højreparantes nummmer 6 sættes når der kun er set 5 venstreparanteser...)
Avatar billede schwarz84 Nybegynder
31. december 2006 - 14:26 #6
Det hele i en klasse med en lille test:

public class Test{
    public static boolean countParantheses(String s) {
        int numberRight = 0;
        int numberLeft = 0;
        for (int i = 0; i < s.length(); i++ ) {
            char c = s.charAt(i);
            if (c == '(')
                numberLeft++;
            else if (c == ')')
                numberRight++;
            if (numberRight > numberLeft)
                return false;
        }
        return true;
    }

    public static void main(String args[]) {
        String s = "(hej hej)";
        System.out.println(countParantheses(s));
        s = ")hej hej(";
        System.out.println(countParantheses(s));
    }
}

Så skulle den ged vist være barberet. Godt nytår!
Avatar billede schwarz84 Nybegynder
31. december 2006 - 15:04 #7
Hvis du ydermere vil have at der skal være lige mange venstre- og højreparanteser (det vil du jo nok, når jeg tænker mig om) kan du teste for dette til sidst:

public boolean countParantheses(String s) {
        int numberRight = 0;
        int numberLeft = 0;
        for (int i = 0; i < s.length(); i++ ) {
            char c = s.charAt(i);
            if (c == '(')
                numberLeft++;
            else if (c == ')')
                numberRight++;
            if (numberRight > numberLeft)
                return false;
        }
        return numberRight == numberLeft;
    }
Avatar billede renebmadsen Nybegynder
31. december 2006 - 16:19 #8
super manglede faktisk kun linien med
if (numberRight > numberLeft)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester