| |
15.06.2008, 00:39
|
#26 (permalink)
| Overclocker
Registriert seit: 24.05.2002
Beiträge: 200
| AW: Warum eine Endlosschleife? if-schleife.de Zitat:
Jemand eine Idee woran es liegt bzw. wie ich es herausfinden könnte? Die Api hilft mir leider nicht weiter.
| Was genau daran ist dir unklar?
Die Ausgabe hätte ich genau so erwartet.. | |
| |
15.06.2008, 09:50
|
#27 (permalink)
| Stickstoff Junkie
Registriert seit: 03.01.2006
Beiträge: 3.205
| AW: Warum eine Endlosschleife? if- Schleife!? Was'n das?
Du schreibst "solange"(c != -1)...
Wo soll c den Wert -1 bekommen? | |
| |
15.06.2008, 12:11
|
#28 (permalink)
| PC Schrauber
Registriert seit: 11.05.2006
Beiträge: 131
| AW: Warum eine Endlosschleife? Ein richtiges lol an if-schleife.de, ich werde versuchen es mir zu merken.
Nach dem letzten "Ende der if-Schleife." (tz wer das geschrieben hat... if-Schleifen gibts doch gar nicht^^) müsste noch ein "vor read()" kommen und dann ist der String zu ende und read() kommt, was dann ein -1 für c zurückgibt.
Oder nicht? | |
| |
15.06.2008, 12:40
|
#29 (permalink)
| Hardware Freak
Registriert seit: 28.03.2003
Beiträge: 8.252
| AW: Warum eine Endlosschleife? Hui, hat ne Weile gedauert, bis ich gerafft hab, was das Programm überhaupt machen soll. Gut, ich habs mal eben durch den Debugger gejagt. Die Abfrage endet nicht, weil c nicht -1 wird, sondern nach Abarbeiten des Strings 10 (LF, Linefeed) wird. Außerdem wird c am Ende des Programms immer 13 (CR, Carriage Return, "Zum Zeilenanfang") angehängt.
Ich hab das Programm mal soweit korrigiert, damit es den Sinn erfüllt, den du mMn bezwecken willst. Nicht schön, aber funzt. PHP-Code: public class Zeichen
{
public static void main (String[] args) throws Exception
{
int c = 0;
int anzahl = 0;
while (c != 10)
{
System.out.print ("Vor read()");
c = System.in.read();
System.out.print ("nNach read()");
if (c != 10)
{
System.out.println ("nASCII-Code: " + c + " Zeichen: " + (char) c);
anzahl = anzahl + 1;
System.out.println ("Ende der if-Schleife.");
}
}
anzahl=anzahl-1;
System.out.print ("Anzahl: " + anzahl);
}
}
Btw, interessant, dass das Forum das "\n" nicht zu mögen scheint. | |
| | Für diesen Beitrag bedankt sich: | |
15.06.2008, 15:50
|
#30 (permalink)
| PC Schrauber
Registriert seit: 11.05.2006
Beiträge: 131
| AW: Warum eine Endlosschleife? So klappts. Vielen Dank. Habe aber trotzdem noch darüber ein paar Fragen:
Vor der Eingabe, die man tätigt, kommt einmal "Vor read()". Damit das aber wirklich so ist, muss ich print() in println() umändern. Ist das bei dir auch so oder hat das einen Grund der nur in meinem Rechner liegt?
Warum gibt read() 10 wieder und nicht -1? Die 10 kenne ich ja von der Ausgabe, aber ich dachte, dass sie das Enter symbolisiert. Meine Vermutung wäre, dass bei Input halt am Ende eine 10 zurückgegeben wird und wenn man der Methode einen String anders zukommen lässt eine -1.
Das mit der 10 ist leider auch nicht der Api zu entnehmen oder?
Und noch der Debugger: Ich hätte das Problem auch selbst finden können, wenn ich mit dem Debugger hätte umgehen können? Kenne ja "Debug File" und habe das grad mal versucht, aber es öffnen sich zwar paar Fenster, aber dort passiert relativ wenig.
Sinn und Zweck der Fragen ist, dass ich nicht immer sofort hier ins Forum kommen
will. Eine gewisse Unabhängigkeit fehlt mir. | |
| |
15.06.2008, 15:52
|
#31 (permalink)
| Overclocker
Registriert seit: 24.05.2002
Beiträge: 200
| AW: Warum eine Endlosschleife? Zitat:
Nach dem letzten "Ende der if-Schleife." [...] müsste noch ein "vor read()" kommen
| Das Problem können die Puffer in den Eingabe und Ausgabe-Streams sein. Die werden ggf. zu selten geflusht.
Ein Code: System.out.flush(); nach dem "Vor read()" könnte helfen..
Edit: Zitat:
Meine Vermutung wäre, dass bei Input halt am Ende eine 10 zurückgegeben wird und wenn man der Methode einen String anders zukommen lässt eine -1.
| Die -1 _soll_ zurückkommen, wenn man [STRG]+[Z] drückt, was _normalerweise_ "End of Stream" signalisieren soll. Bei deinem Netbeans scheint das nicht zu klappen..
10 ist der ASCII-Code zu Line-Feed, was ausgelöst wird, wenn man [ENTER] drückt. Zitat:
Und noch der Debugger: Ich hätte das Problem auch selbst finden können, wenn ich mit dem Debugger hätte umgehen können? Kenne ja "Debug File" und habe das grad mal versucht, aber es öffnen sich zwar paar Fenster, aber dort passiert relativ wenig.
| Hast du einen Breakpoint gesetzt? Normal geht das über doppelklick auf die Zeilennummer (bzw. den linken bereich im Editor-Fenster) |
Geändert von BenniG. (15.06.2008 um 16:02 Uhr)
|
| |
15.06.2008, 15:59
|
#32 (permalink)
| Hardware Freak
Registriert seit: 28.03.2003
Beiträge: 8.252
| AW: Warum eine Endlosschleife? Zitat:
Zitat von Greeven Und noch der Debugger: Ich hätte das Problem auch selbst finden können, wenn ich mit dem Debugger hätte umgehen können? Kenne ja "Debug File" und habe das grad mal versucht, aber es öffnen sich zwar paar Fenster, aber dort passiert relativ wenig. | Welchen Editor nutzt du? | |
| |
15.06.2008, 16:46
|
#33 (permalink)
| PC Schrauber
Registriert seit: 11.05.2006
Beiträge: 131
| AW: Warum eine Endlosschleife? NetBeans 5.5.1
Bezüglich dem Debuggen: Ich weiß davon nix. (Wusste auch nicht, was ein Breakpoint ist) Jetz habe ich es mal auspobiert und dort hört er dann wohl einfach auf das Programm zu compilieren etc. Aber bevor freundlicher Weise mir versucht wird zu helfen - Hilfe die mich verwirrt, da ich mit vielen Begriffen noch nichts anfangen kann - würde ich wohl erstmal ein Tutorial machen. Wenn ich damit nämlich selbst Fehler finden und Fragen beantworten kann, wäre das natürlich eine Top-Sache.
So stellt sich zum Beispiel auch jetzt die Frage: flushen? Zum ersten mal gehört und so beantworte ich mir momentan die Frage:
Wörterbuch: leeren --> gibt mir schonmal ne Vorstellung davon
Api (es heißt Api oder?) --> "Flushes the stream. This is done by writing any buffered output bytes to the underlying output stream and then flushing that stream."
Also leeren. Aber was das nun kann oder zu was das gut ist.. keine Ahnung. | |
| |
15.06.2008, 17:34
|
#34 (permalink)
| Overclocker
Registriert seit: 24.05.2002
Beiträge: 200
| AW: Warum eine Endlosschleife? Zitat:
Jetz habe ich es mal auspobiert und dort hört er dann wohl einfach auf das Programm zu compilieren etc.
| Nein, mit dem compilen hat das nix zu tun. An der Stelle stoppt er die Ausführung des Programms.
Compilen: Übersetzen des Programms in Maschinensprache (bzw. bei Java in den Java Byte Code) => Erzeugen der .class Datei.
Bei einem Breakpoint kannst du die Aufrührung des Programms anhalten und dann über die verschiedenen Funktionen das Programm langsam weiter laufen lassen. Step over, Step Into, Step return sollten über verschiedene Buttons in der Debuger-Perspektive verfügbar sein. Beim angehaltenen Programmzustand kannst du dir dann die Inhalte von Variablen anschauen etc. Bei deinem Mini-Beispiel ist das aber wahrscheinlich zu trivial Zitat:
So stellt sich zum Beispiel auch jetzt die Frage: flushen?
| Java benutzt bei vielen Sachen Streams. Streams sind, wie der Name schon sagt, Datenströme. Aus Performancegründen wird nicht alles, was im Stream verfügbar ist sofort geschrieben (auf den Bildschirm, die Festplatte, etc) sondern zum Teil gepuffert. Wenn man bei einer Datei jedes einzelne Byte einzeln schreiben würde, wäre das sehr langsam.
Anscheinend wird auch bei System.out (was einen Ausgabestrom darstellt) in manchen Fällen (bei mir z.B. nicht) ein Puffer benutzt. D.h. die Ausgabe erfolgt nicht zwingend sofort, sondern evtl. etwas verzögert, zusammen mit einer anderen Ausgabe..
Das Flushen des Puffers erzwingt eine Leerung des Puffers. Der Puffer wird dann auf das Ausgabemedium (Festplatte, Bildschirm) geschrieben.
Daher einfach mal ausprobieren, ob das in deinem Fall hilft.. |
Geändert von BenniG. (15.06.2008 um 17:40 Uhr)
|
| | Für diesen Beitrag bedankt sich: | |
15.06.2008, 18:13
|
#35 (permalink)
| PC Schrauber
Registriert seit: 11.05.2006
Beiträge: 131
| AW: Warum eine Endlosschleife? Hat nicht geholfen, aber deinen Gedankengang kann ich jetzt nochvollziehen. | |
| |
15.06.2008, 18:21
|
#36 (permalink)
| Overclocker
Registriert seit: 24.05.2002
Beiträge: 200
| AW: Warum eine Endlosschleife? Starte das Programm mal außerhalb von Netbeans. Vielleicht auch mal Eclipse versuchen. Da kann ich dir genau sagen, wo sich welche Funktion versteckt, oder dir mal ein Demo-Projekt schicken.. | |
| |
15.06.2008, 18:28
|
#37 (permalink)
| PC Schrauber
Registriert seit: 11.05.2006
Beiträge: 131
| AW: Warum eine Endlosschleife? Wenn ich es mit (c != 10) mache läufts. Insofern habe ich das Problem erstmal aus dem Weg. (Wobei es sicherlich ja im Endeffekt ein Bedienfehler ist, da ich nicht weiß, warum es so ist. Nen Grund hat es bestimmt.)
Werde Bescheid geben an dem Tag, an dem ich mir Eclipse installiert habe. Aber erstmal freu ich mich weitermachen zu könne. | |
| |
15.06.2008, 18:48
|
#38 (permalink)
| Hardware Freak
Registriert seit: 28.03.2003
Beiträge: 8.252
| AW: Warum eine Endlosschleife? Programmierst du momentan "nur" so kleine Konsolenprogramme? Wenn ja ist Netbeans oder Eclipse doch totaler Overkill (sofern ihr es nicht in der Schule (?) nutzt). Schau dir mal den JavaEditor an. Kompakt, übersichtlich, simpel und alles was man für den Anfang braucht. | |
| |
15.06.2008, 20:21
|
#39 (permalink)
| PC Schrauber
Registriert seit: 11.05.2006
Beiträge: 131
| AW: Warum eine Endlosschleife? Den JavaEditor kenn ich nicht. Java mach ich aus freien Stücken heraus. In jungen Jahren hat man ja hier und da immer mal eine Idee über die man gern sinniert. Dafür brauch ich allerdings etwas zum visualisieren.
Java wird da immer gelobt und so kam ich dazu. Habe mir aus diesem Grund ein Buch gekauft und ein Kumpel hat mir letztens eine Cd gegeben mit Videos drauf. Bei dem Buch war NetBeans dabei und auf der Cd werden NetBeans und Eclipse vorgestellt aber alles über NetBeans gezeigt.
Den vermeindlichen Overkill finde ich nicht so schlimm. So weiß man, was noch alles in etwa auf einen zukommt.
Aber ja: momentan ist das nur so kleines Zeug (und ich freue mich immer wieder, wenn es klappt^^) | |
| | | |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Forumregeln
| Es ist dir nicht erlaubt, neue Themen zu verfassen. Es ist dir nicht erlaubt, auf Beiträge zu antworten. Es ist dir nicht erlaubt, Anhänge hochzuladen. Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten. HTML-Code ist aus. | | | Alle Zeitangaben in WEZ +1. Es ist jetzt 07:26 Uhr. | | |