Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
folgende Problemstellung:
- die eingabe an das prog wird zeichenweise von der standardeingabe gelesen
- das prog prüft für jede eingabezeile, ob die klammerung in dieser zeile korrekt ist (das heist gleiche anzahl öffneender und schliessender klammern)
- wenn keine korrekte klammerung gegeben ist, wird die zeilennr ausgegeben!
Code:
public class aufgabe1 {
public static void main (String args[]) throws java.io.IOException {
int einlesen = System.in.read();
int oeffnende = 0;
int schliessende = 0;
int zeilennr = 0;
while(einlesen != -1)
{
zeilennr++;
if (einlesen == '(')
{
oeffnende++;
}
if (einlesen == ')')
{
schliessende++;
}
if (einlesen == '\n' && oeffnende != schliessende)
{
System.out.println(zeilennr);
}
}
}
}
für mich als jemanden der keine ahnung hat, sieht es garnicht mal so schleht aus, es ist aber fehlerhaft. ich bin mir auch nicht sicher ob man die klammer mit '(' identifiziert oder ob da noch ein \ oder so davor muss. Auch die Ausgabe ist fehlerhaft.
bin für hilfe sehr dankbar, denn sowas ähnliches kommt best. in der klausur dran, muss es also können
Man könnte z.B. über folgende Fragen nachdenken:
1. Wie oft wird denn hier ein Zeichen von der Standardeingabe gelesen?
2. Unter welchen Umständen liefert System.in.read() -1 zurück?
3. Wird die Schleife jemals terminieren?
4. Wann sollte man Zeilennummer hochzählen?
der Compiler meckert garnicht, die Syntax an sich ist also richtig, nur nicht die Semantik!
habe den Code ein wenig geändert, und hoffe das ich jetz zum richtigen zeitpunkt die zeilennr erhöhe.
wie identifiziere ich dann jetzt eig. eine ( richitg?
ich kann mein prog nur mit der tastenkombination strg + c beenden! wieso?
wie müsste der code richtig aussehen?
Code:
public class aufgabe1 {
public static void main (String args[]) throws java.io.IOException {
int einlesen = System.in.read();
int oeffnende = 0;
int schliessende = 0;
int zeilennr = 0;
while(einlesen != -1)
{
if (einlesen == '(')
{
oeffnende++;
}
if (einlesen == ')')
{
schliessende++;
}
if (einlesen == '\n')
zeilennr++;
if (einlesen == '\n' && oeffnende != schliessende)
{
System.out.println(zeilennr);
}
}
}
}
weil du immer noch eine endloschleife hast debugge mal dann siehst du dass dein enlesen sich nie ändert und immer den gleichen wert hat --> es wird nie -1
Leute, ich bedanke mich ja für eure hilfe, aber ich bin absolut kein programmierer! ihr müsstet mir schon etwas detailierter helfen, denn ich hab wirklich 0 ahnung davon...
EDIT: und wenn du nur in der jeder zeile prüfen willst, also nicht zeilenübergreifend solltest du deine offend schliessend auch wieder zurück setzen....
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
char[] zeile = in.readLine().toCharArray();
for (int i = 0; i < zeile.length; i++ ){
// hier kommt deine Überprüferei rein
if (zeile[i]=='(') // Hier kannste was machen!
}
ich weiß ich nerve euch, da ich ein so einfaches Prog. nicht alleine hinkriege. Trotzdem frag ich nochmal nach. Also ich habe es fast fertig. Das einzige was mir noch nicht passt ist folgendes:
wenn ich jetzt eine Zeile eingebe die ungleiche Mengen an Klammern erhält und danach enter drücke wird direkt in der nächsten Zeile die Zeilennr mit der ungleichen Klammernmenge angegeben.
Bsp:
()
(()
2
()
(())
und so weiter...
es ist aber so gewollt das die 2 und alle Zeilennr mit ungleichen KLammernmengen erst ganz am Ende nach Beendigung des Progs ausgegeben werden, also so:
()
(()
()
(())
()))
<--prog ende -->
2
5
Code:
public class aufgabe1 {
public static void main (String args[]) throws java.io.IOException {
int einlesen = System.in.read();
int oeffnende = 0;
int schliessende = 0;
int zeilennr = 0;
while(einlesen != -1)
{
if ((char)einlesen == '(')
{
oeffnende++;
}
if ((char)einlesen == ')')
{
schliessende++;
}
if (einlesen == '\n') {
zeilennr++;
if (oeffnende != schliessende) {
System.out.println(zeilennr);
}
oeffnende = 0;
schliessende = 0;
}
einlesen = System.in.read();
}
}
}
Was muss ich am Code ändern? und denkt daran das ich nicht unbedingt eure Profi Hinweise verstehe, weil ich absolut kein Programmierer bin ;-)