TweakPC

Zurück   Computer Hardware Forum - TweakPC > Games und Software > Programmiersprachen

Antwort
 
LinkBack Themen-Optionen Thema bewerten Ansicht
Alt 09.06.2008, 17:16   #1 (permalink)
PC Schrauber
 
Registriert seit: 11.05.2006
Beiträge: 131

Greeven befindet sich auf einem aufstrebenden Ast

Standard Warum eine Endlosschleife?

Guten Tag,
ich habe mir vorgenommen mit einem Buch näher an Java ran zu kommen. Dort gibt es ein Beispielprogramm, was ich ihr unten seht. Leider kommt das Programm wohl aus der while-Schleife nicht raus, was ich nicht verstehe.

PHP-Code:
public class Zeichen
{
    public static 
void main (String[] argsthrows Exception
    
{
    
int c 0;
    
int anzahl 0;
    
    while (
!= -1)
    {
        
System.in.read();
        
        if (
!= -1)
        {
            
System.out.println ("ASCII-Code: " " Zeichen: " + (charc);
            
anzahl anzahl 1;
        }
        
    }
    
    
System.out.println ("nAnzahl, die irgendwie nich kommt evtl.?: " anzahl);
    }

Ist das ausreichend um Hilfe zu bekommen oder fehlt noch was?
PS.: Das Buch sagt, dass man Strg + Z drücken muss, damit System.in.read () -1 zurück gibt, was ich aus der Documentation aber nicht erkennen kann.

Geändert von Greeven (09.06.2008 um 17:22 Uhr)
Greeven ist offline   Mit Zitat antworten
Alt 10.06.2008, 07:59   #2 (permalink)
Stickstoff Junkie
 
Benutzerbild von bigfoot996
 
Registriert seit: 14.02.2005
Ort: 70 KM südlich Stuttg
Beiträge: 4.649

bigfoot996 ist ein Lichtblickbigfoot996 ist ein Lichtblickbigfoot996 ist ein Lichtblickbigfoot996 ist ein Lichtblickbigfoot996 ist ein Lichtblick

Standard AW: Warum eine Endlosschleife?

Hi, ich bin jetzt nich so der ultra programmer, gleich gar nich in Java, aber ich hoffe mal ich kann dir helfen:

Eine While Schleife ist eine sogenannte "Kopfgesteuerte Schleife", d.h. die Schleife überprüft erst jedes mal die Bedinngung bevor es eigentlich losgeht. In deinem Fall wird das aber nich passieren, da deine variable "c" immer ungleich -1 sein wird, daher springt er gar nich in den 2. Teil rein sondern macht solange den 1. bis c mal verändert werden würde.


while (c != -1) wird also immer true sein, weil c nie verändert wird.

Hoffe das is richtig und verständlich.

MfG
bigfoot996

Geändert von bigfoot996 (10.06.2008 um 08:06 Uhr)
bigfoot996 ist offline   Mit Zitat antworten
Alt 10.06.2008, 08:18   #3 (permalink)
Extrem Tweaker
 
Registriert seit: 01.07.2002
Beiträge: 2.031

Fr@ddy ist ein sehr geschätzer MenschFr@ddy ist ein sehr geschätzer MenschFr@ddy ist ein sehr geschätzer Mensch

Standard AW: Warum eine Endlosschleife?

Also ich würde vermuten, dass System.in.read() keine -1 zurückgibt.
lass doch mal testweise den eingelesenen int wieder ausgeben, noch vor dem if, dann siehst du ja ob da ein -1 kommt.
Fr@ddy ist offline   Mit Zitat antworten
Alt 10.06.2008, 08:38   #4 (permalink)
EoN
Kaffeejunkie
 
Benutzerbild von EoN
 
Registriert seit: 01.05.2002
Ort: Augsburg
Beiträge: 5.035

EoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer Anblick

Standard AW: Warum eine Endlosschleife?

Zitat:
Zitat von bigfoot996 Beitrag anzeigen
Hi, ich bin jetzt nich so der ultra programmer, gleich gar nich in Java, aber ich hoffe mal ich kann dir helfen:

Eine While Schleife ist eine sogenannte "Kopfgesteuerte Schleife", d.h. die Schleife überprüft erst jedes mal die Bedinngung bevor es eigentlich losgeht. In deinem Fall wird das aber nich passieren, da deine variable "c" immer ungleich -1 sein wird, daher springt er gar nich in den 2. Teil rein sondern macht solange den 1. bis c mal verändert werden würde.


while (c != -1) wird also immer true sein, weil c nie verändert wird.

Hoffe das is richtig und verständlich.

MfG
bigfoot996
Das stimmt so leider nicht.
C wird genau hier " c = System.in.read();" überschrieben.
Das mit der kopfgesteuerten Schleife hat dann den Einfluss, dass man in die Schleife mindestens einmal hinein gelangt und diese dann frühestens nach dem ersten Durchlauf terminiert.

Dass bei Strg + z ein -1 zurückgegeben wird wundert mich jetzt doch ein wenig. Hast Du es denn mal mit Strg + c probiert? Das ist normalerweise die Abbruchstastenkombination von Konsolenanwendungen und könnte evtl einen Fehlercode in der Art von -1 werfen.

Bitte Regeln beachten und Suchfunktion benutzen.
EoN ist offline   Mit Zitat antworten
Alt 10.06.2008, 08:50   #5 (permalink)
Stickstoff Junkie
 
Benutzerbild von bigfoot996
 
Registriert seit: 14.02.2005
Ort: 70 KM südlich Stuttg
Beiträge: 4.649

bigfoot996 ist ein Lichtblickbigfoot996 ist ein Lichtblickbigfoot996 ist ein Lichtblickbigfoot996 ist ein Lichtblickbigfoot996 ist ein Lichtblick

Standard AW: Warum eine Endlosschleife?

Zitat:
Zitat von EoN Beitrag anzeigen
Das stimmt so leider nicht.
C wird genau hier " c = System.in.read();" überschrieben.
Das mit der kopfgesteuerten Schleife hat dann den Einfluss, dass man in die Schleife mindestens einmal hinein gelangt und diese dann frühestens nach dem ersten Durchlauf terminiert.

Dass bei Strg + z ein -1 zurückgegeben wird wundert mich jetzt doch ein wenig. Hast Du es denn mal mit Strg + c probiert? Das ist normalerweise die Abbruchstastenkombination von Konsolenanwendungen und könnte evtl einen Fehlercode in der Art von -1 werfen.
Hm mist, ich hätte doch den javakurs auch noch machen sollen xD

Aber es kommt ja auch drauf an weis er eingibt oder? wenn er jedes mal sowas eingibt das es ungleich -1 is dann geht er ja trotzdem nich aus dem while raus oder?
bigfoot996 ist offline   Mit Zitat antworten
Alt 10.06.2008, 08:52   #6 (permalink)
EoN
Kaffeejunkie
 
Benutzerbild von EoN
 
Registriert seit: 01.05.2002
Ort: Augsburg
Beiträge: 5.035

EoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer Anblick

Standard AW: Warum eine Endlosschleife?

Zitat:
Zitat von bigfoot996 Beitrag anzeigen
Hm mist, ich hätte doch den javakurs auch noch machen sollen xD

Aber es kommt ja auch drauf an weis er eingibt oder? wenn er jedes mal sowas eingibt das es ungleich -1 is dann geht er ja trotzdem nich aus dem while raus oder?
Richtig, ist halt die Frage was die Strg + irgendwas Tastenkombinationen zurückgeben. Da sind leider meine Javakenntnisse am Ende.
EoN ist offline   Mit Zitat antworten
Alt 10.06.2008, 09:01   #7 (permalink)
Stickstoff Junkie
 
Benutzerbild von bigfoot996
 
Registriert seit: 14.02.2005
Ort: 70 KM südlich Stuttg
Beiträge: 4.649

bigfoot996 ist ein Lichtblickbigfoot996 ist ein Lichtblickbigfoot996 ist ein Lichtblickbigfoot996 ist ein Lichtblickbigfoot996 ist ein Lichtblick

Standard AW: Warum eine Endlosschleife?

Zitat:
Zitat von EoN Beitrag anzeigen
Richtig, ist halt die Frage was die Strg + irgendwas Tastenkombinationen zurückgeben. Da sind leider meine Javakenntnisse am Ende.
Ach sei getröstet, ich kenn nichmal irgendwelche strg + xx Kombinationen xD Ich kenn mich in java absolut 0 aus, programmier so gut wie nur C# und selbst das noch miserabel

Für mein eigenes Verständniss nochmal: Meine Erklärung vorher was soweit richtig bis auf das das die Variable C doch verändert wird oder? Dann is sein Problem doch eig gar kein Problem, nur dass er halt nie das richtige eingibt das nich -1 rauskommt und er somit in den 2. Teil der Schleife geht oder?
bigfoot996 ist offline   Mit Zitat antworten
Alt 10.06.2008, 09:20   #8 (permalink)
EoN
Kaffeejunkie
 
Benutzerbild von EoN
 
Registriert seit: 01.05.2002
Ort: Augsburg
Beiträge: 5.035

EoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer Anblick

Standard AW: Warum eine Endlosschleife?

Zitat:
Zitat von bigfoot996 Beitrag anzeigen
Ach sei getröstet, ich kenn nichmal irgendwelche strg + xx Kombinationen xD Ich kenn mich in java absolut 0 aus, programmier so gut wie nur C# und selbst das noch miserabel

Für mein eigenes Verständniss nochmal: Meine Erklärung vorher was soweit richtig bis auf das das die Variable C doch verändert wird oder? Dann is sein Problem doch eig gar kein Problem, nur dass er halt nie das richtige eingibt das nich -1 rauskommt und er somit in den 2. Teil der Schleife geht oder?
Ja es kommt anscheinend durch Strg + Z kein "-1" zurück.
EoN ist offline   Mit Zitat antworten
Alt 10.06.2008, 10:12   #9 (permalink)
Overclocker
 
Registriert seit: 24.05.2002
Beiträge: 200

BenniG. wird schon bald berühmt werdenBenniG. wird schon bald berühmt werden

Standard AW: Warum eine Endlosschleife?

Zitat:
Zitat von EoN Beitrag anzeigen
Ja es kommt anscheinend durch Strg + Z kein "-1" zurück.
Also bei mir klappt das prima..
Ich hab es aber auf die Schnelle nirgendwo offiziell dokumentiert gefunden. Aber STRG+Z soll dafür sorgen, dass der InputStream der Tastatur beendet wird (EOF bzw. End of Stream).

Bei mir im Eclipse klappt das..

Edit: Hier stehen ein paar Sätze dazu:
Ein-/Ausgabe
Zitat:
  • Ende der Eingabe
    Ctrl-Z signalisiert das Ende der Eingabe (end of file). Häufig ist mindestens unter DOS/Windows nach Ctrl-Z noch ein Enter nötig, damit das lesende Programm das Ctrl-Z auch erhält.
BenniG. ist offline   Mit Zitat antworten
Alt 10.06.2008, 10:38   #10 (permalink)
PC Schrauber
 
Registriert seit: 11.05.2006
Beiträge: 131

Greeven befindet sich auf einem aufstrebenden Ast

Standard AW: Warum eine Endlosschleife?

Habe es mit Strg + fast die ganze Tastatur versucht. Schade, dass diese Abbruchkombinationen alle nicht funktionieren. So will es ja das Buch.
Schlimmer find ich, dass die eingefügten Ausgaben nicht erscheinen. Warum die Ausgaben nicht kommen, ist dann bestimmt etwas, was mir später noch erklärt wird. Eine Erklärung wäre trotzdem schön, weswegen die nicht kommen und Abbruchkombinationen müssten doch eigentlich irgendwo nachzulesen sein, oder?

PHP-Code:
public class Zeichen
{
   public static 
void main (String[] argsthrows Exception
   
{
      
int c 0;
      
int anzahl 0;

      
System.out.println ("   " anzahl);

      while (
!= -1)
      {
         
System.in.read();
         
System.out.print (c);
         
System.out.println ("Wäre schön, wenn ich dies sehen würde:" anzahl);

         if (
!= -1)
         {
            
System.out.println ("ASCII-Code: " c
                               
" Zeichen: " + (charc);
            
anzahl anzahl 1;
         }
      }   
      
System.out.println ("nAnzahl: " anzahl);
   }

Greeven ist offline   Mit Zitat antworten
Alt 10.06.2008, 10:48   #11 (permalink)
Overclocker
 
Registriert seit: 24.05.2002
Beiträge: 200

BenniG. wird schon bald berühmt werdenBenniG. wird schon bald berühmt werden

Standard AW: Warum eine Endlosschleife?

Drückst du zwischendurch auch [Enter]? Der Input-Stream hat da wohl einen Puffer (bin mir fast sicher, dass man den irgendwo abschalten kann, hab ich aber nicht gefunden), der erst bei [Enter] geflusht wird.

Deine Ausgabe "0 0" erscheint?
BenniG. ist offline   Mit Zitat antworten
Alt 10.06.2008, 11:40   #12 (permalink)
PC Schrauber
 
Registriert seit: 11.05.2006
Beiträge: 131

Greeven befindet sich auf einem aufstrebenden Ast

Standard AW: Warum eine Endlosschleife?

Also zwischendurch Enter drücken würde nix bringen, da dann mein schon eingegebener Input nochmal gegeben wird. Du kannst auch "blablabla" eingeben, nicht nur Zahlen. Hab grad mit einem Kumpel drüber sinniert, der hatte es auch erst so aufgefasst. Bei ihm allerdings kamen - bis auf die letzte - die anderen Ausgaben. meine Ausgabe sieht wie folgt aus, nachdem ich "testbla" eingegeben habe und Enter gedrückt hab:

testbla
ASCII-Code: 116 Zeichen: t
ASCII-Code: 101 Zeichen: e
ASCII-Code: 115 Zeichen: s
ASCII-Code: 116 Zeichen: t
ASCII-Code: 98 Zeichen: b
ASCII-Code: 108 Zeichen: l
ASCII-Code: 97 Zeichen: a
ASCII-Code: 10 Zeichen:

Merkwürdig dabei ist, dass testbal am Anfang angezeigt wird, was ich nicht erwartet hätte und dass halt keine der anderen Ausgaben kommt.
Greeven ist offline   Mit Zitat antworten
Alt 10.06.2008, 11:48   #13 (permalink)
Overclocker
 
Registriert seit: 24.05.2002
Beiträge: 200

BenniG. wird schon bald berühmt werdenBenniG. wird schon bald berühmt werden

Standard AW: Warum eine Endlosschleife?

Zitat:
Merkwürdig dabei ist, dass testbal am Anfang angezeigt wird, was ich nicht erwartet hätte und dass halt keine der anderen Ausgaben kommt.
javac vergessen? Sieht mir so aus, als hast du noch eine alte Class-Datei..
BenniG. ist offline   Mit Zitat antworten
Alt 10.06.2008, 13:04   #14 (permalink)
PC Schrauber
 
Registriert seit: 11.05.2006
Beiträge: 131

Greeven befindet sich auf einem aufstrebenden Ast

Standard AW: Warum eine Endlosschleife?

Habe eine Entwicklunsumgebung (Kürzel dafür vergessen). Weiß nicht wie man auf sowas, wie du kommen könnte, da doch immer davor compiliert wird, oder nich? Muss ja. Aber drei Sterne kommen nicht von ungefähr.^^ Also habe ich in meinem Ordner zwei Classdateien gelöscht, die Zeichen.class hießen. Ausgeführt und es kam:
PHP-Code:
init:
deps-jar:
compile-single:
run-single:
java.lang.NoClassDefFoundErrorpunkt/Zeichen (wrong nameZeichen)
        
at java.lang.ClassLoader.defineClass1(Native Method)
        
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
        
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        
at java.security.AccessController.doPrivileged(Native Method)
        
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        
at sun.misc.Launcher.loadClass(Launcher.java:276)
        
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Exception in thread "main" 
Java Result1
BUILD SUCCESSFUL 
(total time0 seconds
Ich war schockiert, was ich angerichtet hab und löschte dies auch bei Netbeans und erstellte es neu. Das gleiche. Da fiel mir ein, dass es ja auch noch eine Javadatei gibt. Die hab ich dann auch gelöscht und quasi einen richtigen Neuanfang bezüglich diesem "Zeichen-Programm". Und nun seh ich zwar noch nicht die letzte Ausgabe, aber die davor schonmal. Nun jedoch meine Frage: Was hab ich nun eigentlich gemacht, weswegen der gleiche Code auf einmal anders behandelt wird?
So schauts also jetz aus:
PHP-Code:
0   0
test
116
Wäre schön
wenn ich dies sehen würde:  0
ASCII
-Code116 Zeichent
101
Wäre schön
wenn ich dies sehen würde:  1
ASCII
-Code101 Zeichene
115
Wäre schön
wenn ich dies sehen würde:  2
ASCII
-Code115 Zeichens
116
Wäre schön
wenn ich dies sehen würde:  3
ASCII
-Code116 Zeichent
10
Wäre schön
wenn ich dies sehen würde:  4
ASCII
-Code10 Zeichen
Greeven ist offline   Mit Zitat antworten
Alt 10.06.2008, 13:09   #15 (permalink)
Overclocker
 
Registriert seit: 24.05.2002
Beiträge: 200

BenniG. wird schon bald berühmt werdenBenniG. wird schon bald berühmt werden

Standard AW: Warum eine Endlosschleife?

Ich benutze zwar kein Netbeans, aber die IDEs kommen schnell aus dem Tritt, wenn man am Projektverzeichnis irgendwas manuell löscht/ändert.

Dein Verhalten kann nur davon kommen, dass die class-Datei nicht neu generiert wurde. Vielleicht hast du bei dir kein automatisches Build aktiviert und es wurde nur beim allerersten Versuch eine Class-Datei erstellt?

Was passiert, wenn du den "Play"-Button in deiner IDE klickst, ist relativ weit konfigurierbar.

Meine Sternchen hier sagen übrigens recht wenig über mein Java-Können aus
Nur soviel, ich verdiene mein Geld mit programmieren ua. Java.


Edit:
Prüfe am besten das Datum von deiner Class Datei. Wenn sich das nicht ändert, wird die Datei auch nicht neu erstellt. Kannst ja im Netbeans mal nach "Build automatically" oder ähnliches ausschau halten. In deutsch müsste es sowas wie "Automatisches Erstellen" heißen.

Geändert von BenniG. (10.06.2008 um 13:21 Uhr)
BenniG. ist offline   Mit Zitat antworten
Antwort

Stichworte
endlosschleife


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir erlaubt, neue Themen zu verfassen.
Es ist dir erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mangagirl singt Endlosschleife Catweazle Off Topic 13 08.03.2007 15:02
Grafikkartentest mit Endlosschleife? tomsan75 Benchmarks 3 05.10.2006 07:15
XP nutzt bei Dual PIII nur eine CPU>warum? flori Intel: CPUs und Mainboards 7 31.05.2006 11:17
winxp ladebildschirm->endlosschleife chaoz_ Windows & Programme 2 14.02.2006 16:51
Zwei Festpalatten???warum erkennte mein Mainboard nur eine?? Firefly Sonstige Hardware 4 22.11.2002 13:25


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 Uhr.




Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.
Impressum - Hardware-Links - Partner
Copyright © 1999-2013 TweakPC, Alle Rechte vorbehalten, all rights reserved