Symmetrische Klammer, wie Sie zu zählen?
Muss ich ein java-Programm schreiben, das Ihnen sagt, wenn Sie die Klammern sind symmetrisch in einem string, kann ich nicht finden, den richtigen Weg, es zu tun, obwohl.
Ich weiß schon, ich werde eine Schleife verwenden, um die Anzahl der offenen und geschlossenen Klammer "(" = 1 and ")" = -1
gespeichert, in eine Ganzzahl, die kommen zurück, als 0
oder irgendetwas anderes.
Ich weiß nur nicht, wie Sie zählen die Klammer so.
Edit: klarer, und alles, was ich wirklich brauchen, ist ein Weg zu zählen, die Klammern und ich bin blockiert, weil ich nicht arbeiten kann mit so etwas wie :
if (args[i] == '(') //der Dolmetscher wird nicht lassen Sie mich vergleichen Sie strings mit Zeichen
count++;
Edit 2 :
public class Testing_grounds {
public static void main(String[] args) {
String str = args[];
char RetV[] = str.toCharArray();
int counter = 0;
for (int n = 0; n <= RetV.length; n++) {
if (RetV[n] == '(')
counter++;
else if (RetV[n] == ')')
counter--;
}
if (counter == 0)
System.out.println("The parentheses are balenced!");
else if(counter < 0)
System.out.println("There are to many closed parenthesis!");
else if(counter > 0)
System.out.println("There are to many opened parenthesis!");
}
}
Dies ist ziemlich viel code, ich werde für (ich bin zu versuchen, um die toCharArray () - Methode zu arbeiten, aber ich bekomme immer Klasse erwartet Fehler auf der 3. Zeile. Dass die Linie da ist, denn es lässt mich nicht : args.toCharArray)
Erinnere mich, dass ich das tun müssen, mit einem Eingang und nicht ein string bereits im code vorhanden.
- Können Sie fügen Sie das Programm
- Ich denke, dass zusätzlich zu beachten, dass die Reihenfolge, wie Sie erscheinen;
))((
ist falsch und()()
ist Ok und in beiden Fällen zurück0
- Vergessen Sie nicht, überspringen Klammern in Anführungszeichen Zeichenfolgen. Das macht das problem schwierig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Scannen Sie den string zeichenweise, dann können Sie etwas wie das hier tun:
Dieser code berücksichtigt die Reihenfolge der Klammer, so ")(" wird erkannt und als Fehler an.
BEARBEITEN:
Tun das gleiche in Java können Sie tun:
Hoffe, es hilft.
Lesen Sie die Zeichenfolge vom Beginn bis zum Ende, verwenden einen stack, um die Anzahl der Klammern. Push nur die öffnende Klammern in den stack, pop, wenn Sie auf eine schließende Klammer.
So etwas wie ((a+x)*(b+y)) würde einen leeren stack am Ende, die Ihnen sagt, die Klammern sind symmetrisch.
Tun, müssen Sie auch prüfen, die Bestellung, z.B.:(a+b)))((?
Eigentlich können Sie es tun, haben Sie mehrere Möglichkeiten:
1) verwenden Sie einen stack. Schieben Sie einen Wert jedes mal, wenn Sie sehen, ein
(
- und pop-ein Wert, der jedes mal, wenn Sie sehen, ein)
. Wenn es nichts zu pop (stack-exception), dann ist es nicht ausgewogen. Dieser Ansatz ist nett, weil, wenn Sie einen Stapel vonchar
können Sie ganz einfach erweitern Sie es mit anderen Arten von Klammern durch eine einfache Zuordnung der schließenden Klammer zu Klammer (d.h.] -> [, ) -> (, } -> {
) und überprüfen, ob das, was Sie geholt, ist ok für das, was Sie schon in den string.Etwas wie dieses:
Wird das nicht funktionieren, wenn die Klammer Reihenfolge ist nicht von Bedeutung, obwohl.
2) verwenden Sie einen Zähler, add
1
wenn Sie feststellen, dass die(
und entfernen1
wenn Sie sehen, ein)
. Wenn Sie gehen, unten 0 false zurückgeben (unsymmetrisch). Oder gehen Sie bis zum Ende des Strings und dann prüfen, ob die Zählung0
dies wird mit Fällen umgehen, wenn Sie nicht benötigen, bestellen (nur wenn die Anzahl der(
==)
)@EDIT:
Ok also das problem ist
String str = args[];
wird nicht kompiliert, wenn Sie nicht den index (d.h.String str = args[0];
). Auch kann man nicht nennentoCharArray()
aufargs
weil das eine Methode definiert, die sich aufString
Klasse undargs
ist ein array vonString
s.Ich würde nicht empfehlen, übergeben Sie den gewünschten text zu zählen, die Weg sind, ist es nicht gut danach. Wie wärs stattdessen Arsch eine test Datei-name mit Ihrem text und Lesen das statt?
ch == ")"
woch
ist einchar
? Das funktioniert nicht -> brauchen Sie'
.gut, wenn Sie wollen zählen Sie die Anzahl der balancierten Klammern in einem string, folgende java-code könnte helfen
Funktion berechnet die unsymmetrische Klammern.
Hier ist der code arbeiten, das gibt die passende Anzahl und -1, wenn unerreicht.
Können Sie den Unterschied mit folgenden code:
wenn es
0
dann Klammern sind symmetrisch.a)(a
?a)(a
gilt nicht text, sondern er will, um zu überprüfen, ob(
und)
gleich im text oder nicht.