The Gunner Geschrieben 10. Juli 2007 Teilen Geschrieben 10. Juli 2007 Hallo, ich arbeite mich zur Zeit in Java ein. Jetzt sind zwei Fragen aufgetaucht. 1. In Java gibt es ja auch schleifen. Z.B. die for - Schleife. for (i = 1, i < 100, i++) Das heisst ja jetzt, dass von 1 bis 99 gezählt wird, also jedesmal die wieder der Programmteil ausgeführ wird (Schleife). Das i++ heisst ja, dass die Variable i bei jedem Durchgang um eins erhöt wird. Wie müsste ich das nun schreiben, wenn die Variable z.B. um vier oder 10 bei jedem Durchgang erhöt werden sollte? i + 4 oder +4 haben nicht funktioniert. 2. In jeder Klasse muss ja die main - Funktion enthalten sein: public static void main(String[] argument) Nun habe ich in meinem Buch gesehen, dass der Autor bei Programmbeispielen teilweise argument, args oder argumente verwendet. Die Programme funktionieren alle mit allen drei Werten (argument, args und argumente). Was sind denn jetzt die Unterschiede? Ich danke euch vielmals. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schroenser Geschrieben 10. Juli 2007 Teilen Geschrieben 10. Juli 2007 1.) Du musst wissen, das i++ eine Wertzuweisung ist. Also gleichbedeutend mit i = i + 1 Dann wird deutlich das i + 4 keinen Sinn ergibt, denn wo soll der Wert der Berechnung denn hin? Richtig wäre hier for ( i = 1, i < 100, i = i + 4 ) 2.) Nicht verwirren lassen! public static void main(String[] argument) sagt im Grunde nur, dass es eine Methode main gibt, die public und static ist, keinen Rückgabewert hat (void) und ein Array von Strings als Parameter erwartet. Dieses Array bekommt nun den Namen argument, args oder argumente, je nachdem, was halt dort steht. Will sagen: das ist schlichtweg der Name der Variablen mit dem man dann auf das Array zugreifen kann. Das Array selber enthält eventuelle Komandozeilen-Parameter, in der Reihenfolge, in der sie beim Aufruf der Applikation übergeben wurden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 10. Juli 2007 Teilen Geschrieben 10. Juli 2007 for (i = 1, i < 100, i=i+4) nicht Komma sondern Semikolon for (int i = 1; i < 100; i=i+4){ } 2. In jeder Klasse muss ja die main - Funktion enthalten sein: public static void main(String[] argument) Nicht in jeder Klasse sondern nur in jeder Klasse die als Einstiegspunkt für ein Programm dient. Der Interpreter erwartet exakt die Methoden Signatur: public static void main(String[] argument) Alles bis auf "argument" ist fest vorgegeben. public, static, void sind Schlüsselwörter main ist der Methodenname. Methodennamen sind normalerweise frei wählbar, aber der Interpreter startet nur die Methode wenn Sie den Namen main hat. String[] = ein Array von String Objekten die der Methode als Parameter übergeben werden. Auch so vorgeschrieben. argument = der Variablenname mit dem du auf die übergebenen Werte weiter zugreifen willst. Dem Interpreter ist egal was du da angibst, ihn interessiert nur das er ein String[] übergeben kann. Wie dieses Array im weiteren Verlauf angesprochen wird, ist ihm vollkommen egal. Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
The Gunner Geschrieben 11. Juli 2007 Autor Teilen Geschrieben 11. Juli 2007 Vielen Dank euch beiden. zu 1. Sorry, ich wollte eigentlich Semilikone ( machen, hab aber wohl zu schnell getippt. Sorry, das i + 2 nicht gehen würde, ist ja eigentlich klar, da man arithemtische Operationen ja immer einer Variablen zuordnen muss, also das Ergebnis. Wenn ich allerdings anstatt "i++" nun "i = i + 2" schreibe, dann geht das nicht. Könnte es sein, dass man den Schleifenzähler nur immer um eins erhöhen oder mindern kann? zu 2. Was ist denn eigentlich ein Array von Strings? Im Buch ist das kompliziert erklärt, da komm ich nicht draus. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 11. Juli 2007 Teilen Geschrieben 11. Juli 2007 Wenn ich allerdings anstatt "i++" nun "i = i + 2" schreibe, dann geht das nicht. for (int i = 1; i < 100; ++i++) for (int i = 1; i < 100; i+=2) Könnte es sein, dass man den Schleifenzähler nur immer um eins erhöhen oder mindern kann? Nein. i = i+x müsste auch gehen. Notfalls halt einfach: int i = 1; while (i < 100) { ... i+=2 } (kommt aufs gleiche raus) zu 2. Was ist denn eigentlich ein Array von Strings? Im Buch ist das kompliziert erklärt, da komm ich nicht draus. Viele Strings in einem (Variablen-) Feld. arg[0] = "Hallo" arg[1] = "Welt" arg[2] = "." usw. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
The Gunner Geschrieben 12. Juli 2007 Autor Teilen Geschrieben 12. Juli 2007 Hallo, so, ich bin in der zwischenzeit im Buch weitergekommen und es sind ein paar weitere Fragen aufgetaucht, welche ich hier gleich einbinden werde. Es sind zwar ein bisschen viele Fragen, aber ich hoffe, dass ihr sie trotzdem beantwortet. Ich denke, ich bin auf gutem Wege Java zu verstehen. zu 1. Das mit der For - Schleife (i = i + 2) hat jetzt funktioniert. Weiss auch nicht was ich das gewurstelt habe. 2. Wenn ich also in einem Quelltext keine Parameter drin habe, dann müsste ich also am Anfang kein String[] argument schreiben? Sind Parameter eigentlich = Variablen? Also z.B. int var1 = 23 Hier ist ja "var1" eine Variable vom Datentyp int. Ist denn "var1" auch gleich der Parameter? Oder was ist genau mit Parameter gemeint? 3. Ich habe Probleme den Begriff "Objekt" zu verstehen. Also die Hierarchie scheint ja so zu sein: Klassen - Objekte - (Variablen) Ein (komplexes) Programm besteht ja eigentlich aus vielen .java Dateien, welche man z.B. in Notepad erstellen kann. Diese .java Dateien muss man ja dann alle in Bytecode kompilieren, also .class. All diese verschiedenen .java Dateien sind ja eigentlich Klassen, oder? Und in diesen verschiedenen .java Dateien (Klassen) sind dann verschiedene Objekte drin (z.B. String var1 = "Hans"; ). Dann gibt es aber auch noch Klassen welche man nicht selber erstellt hat, einfach bei Java dabei und für den Benutzer nicht direkt sichtbar sind (im Gegensatz zu .java Dateien). Ist das so richtig? 4. Ein Objekt kann also auch etwas ganz und gar nicht komplexes sein, wie z.B. String var1 = "Hans"; Richtig? 5. char var1 = 'a'; Das ist ja eine Variable vom Datentyp char und hat den Wert a. String var2 = "Hans"; Das ist ja jetzt ein Objekt var2 mit dem Wert Hans. Es ist kein Datentyp mehr. Ein String (Hans) besteht also eigentlich aus vielen char Variablen. String var1 = "Hans"; String var2 = "Sepp"; String var3 = "Mausi"; Das wäre jetzt also ein Array von Strings, wie es z.B. in einer .java Datei vorkommen kann. Ist das alles richtig? 6. char var1 = 'a'; Noch eine Frage zum Datentyp char. Enthält eine Variable vom Datentyp char nur immer ein Zeichen? Wäre logisch, denn mit mehreren Zeichen wäre es einen String. Muss man beim 'a' diese ' ' machen? So stand es im Buch, aber bei den anderen Datentypen muss man das ja auch nicht machen. 7. Und nun die letzte Frage. public class FloatInt { public static void main(String[] argument) { double var1 = 99.99; double var2 = 60000.23; short ziel; ziel = (short) var1; System.out.println("aus "+var1+" wird "+ziel); ziel = (short) var2; System.out.println("aus "+var2+" wird "+ziel); } } Bei den zwei Zeilen mit System.out.println verstehe ich die " und + nicht, also warum die so verteilt sind. Könnte das jemand erklären? So, ich danke euch vielmals für eure Bemühungen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 12. Juli 2007 Teilen Geschrieben 12. Juli 2007 Hi, Parameter sind das, was man dem Programm mit gibt, z. B. "program a b c", wo a b c dann die Parameter sind. 3. Objekte und Variablen sind nicht hierachisch voneinander abhängig. Man kann das vielleicht mit Beispielen aus der realen Welt nehmen: Ein Objekt (Mensch) hat einige Eigenschaften (Größe, Alter, Gewischt) und Methoden (Gehen, Schlafen, Essen). Einige davon beeinflussen die Eigenschaften (Gewicht). Eine Klasse ist quasi der Bauplan für ein Objekt. Ein Objekt (oder Instanz, ein anderes Wort dafür) enthält die Eigenschaften und Methoden, die in der Klasse deklariert wurden. 4. Du erzeugst so ein String Objekt. Dieses Objekt hat aber auch Eigenschaften und Methoden, wie z. B. length() oder so. Ob das kompliziert ist, hängt vom Betrachter ab. 5. Char ist ein primitiver Datentyp, also hat keine Eigenschaften und Methoden. 6. Ja, ein Char hat nur ein Zeichen und muss in ' stehen. 7. Damit fügst du Zeichenketten und Variablen zusammen. So wird die Ausgabe ""aus 1 wird 2" ,oder welche Zahlen auch immer, erzeugt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 13. Juli 2007 Teilen Geschrieben 13. Juli 2007 7. Damit fügst du Zeichenketten und Variablen zusammen. So wird die Ausgabe ""aus 1 wird 2" ,oder welche Zahlen auch immer, erzeugt. Wobei ich allerdings sagen muss dass String + int in meinen Augen nicht konform ist. Ich würde lieber System.out.println("aus " + String.valueOf(var2) + " wird " + String.valueOf(ziel)); nehmen. Das kommt im Endeffekt aufs Selbe raus, da via Autoboxing normal die int-Variablen in Integer umgewandelt werden und dann Integer.toString() aufgerufen wird. Nimm's mir nicht übel, ich bin nur der Ansicht, dass der Schutz der Sprache nicht alleine für natürliche Sprachen gelten sollte. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
The Gunner Geschrieben 15. Juli 2007 Autor Teilen Geschrieben 15. Juli 2007 Vielen Dank. Ihr habt mir bei vielen Sachen weitergeholfen. Natürlich ist einiges noch unklar, aber das wird sich mit der Zeit wohl klären. Greetz. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigredeyes Geschrieben 16. Juli 2007 Teilen Geschrieben 16. Juli 2007 zu 2. public static void main(String[] args){ } ist feststehend! -> ein public static void main(){ } kompiliert nicht. bigredeyes p.s. ok, es kompilert, aber ausführbar wird die klasse dadurch nicht! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
The Gunner Geschrieben 16. Juli 2007 Autor Teilen Geschrieben 16. Juli 2007 Es ist schon wieder ein Probem aufgetaucht. Folgender Quelltext funktioniert nicht. public class Aufg1 { public static void main(String[] argument) { int zahl = 300; { { if (zahl >= -128 && zahl <= 127) ziel = (byte)zahl; System.out.println("byte-Variable "+ziel); } { else System.out.println("int-Variable "+zahl); } } } } Was habe ich falsch gemacht? Mit den Klammern { habe ich sowieso ein Problem. Habe wohl einige zu viel gemacht. Wann man man solche Klammern { ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Frozone Geschrieben 16. Juli 2007 Teilen Geschrieben 16. Juli 2007 Also erstmal womit codest du? Eclipse? Du solltest dich mit der Fehleranalyse beschäftigen. Es sollten doch die Fehler angezeigt und erklärt werden. Problem: Du must die Variable ziel vorher noch deklarieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
The Gunner Geschrieben 16. Juli 2007 Autor Teilen Geschrieben 16. Juli 2007 Ich code mit dem Editor von Windows. *g* Dann wandle ich den Code mittels Eingabeauforderung in Bytecode um. Meinst du mit Fehleranalys das was der Compiler ausgibt, wenns nicht klappt? Werde morgen, dann die Variable ziel deklarieren, also int ziel; Wann macht man Klammern {}? Wenn man Klammern macht, dann rückt man den nächsten Abschnitt ja auch gerade um eins nach rechts, der Übersicht halber. package fahrzeug; abstract class StrassenFzg { protected String bez; protected short geschw; protected boolean verliehen; abstract boolean eingeben(); abstract boolean anzeigen(); public boolean verleihen() { if (verliehen) return false; else { verliehen = true; return true; } } } Warum kommt bei public boolean verleihen() nicht noch ein ; hintendran, wie bei den anderen Methoden und Variablen? Müsste es nicht if(verliehen = false) heissen? Falls nicht, warum nicht? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_murphy_ Geschrieben 17. Juli 2007 Teilen Geschrieben 17. Juli 2007 hmm, also es scheint so, als du noch nicht so viel ahnung mit java hast, wenn dies der fall sein sollte, dann lese dich mal schlau nun zu diesem beispiel: public class Aufg1 { public static void main(String[] argument) { int zahl = 300; { { if (zahl >= -128 && zahl <= 127) ziel = (byte)zahl; System.out.println("byte-Variable "+ziel); } { else System.out.println("int-Variable "+zahl); } } } } es sieht sehr verwirrend aus, was du da machst. Punkt 1: - public static void main(String[] argument) dies ist nur ein "einstiegspunkt", d.h. wenn das programm gestartet wird, wird diese methode zuerst aufgerufen Punkt 2: - erzeuge objekte, trenne deine funktionen damit möchte ich dir sagen, was bei dir in der main steht, packe es in eine methode und erzeuge objekte von deiner klasse hier mal ein beispiel: public class Aufg1 { public static void main(String[] argument) { new Aufg1(); //objekterzeugung, ruft den constructor der klasse auf } public Aufg1(){ int zahl = 300; if (zahl >= -128 && zahl <= 127){ ziel = (byte)zahl; System.out.println("byte-Variable "+ziel); }else{ System.out.println("int-Variable "+zahl); } } } hoffe, das du erstmal weiter kommst greetz edit: zu dem hier: { if (verliehen) return false; else { verliehen = true; return true; } } diese if (verliehen) heisst nicht mehr als --> if (verliehen == true) dies wiederrum heisst, wenn die variable verliehen = true ist, dann passiert halt jenes, falls false, dann dies halt ^^ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pinhead Geschrieben 17. Juli 2007 Teilen Geschrieben 17. Juli 2007 Wann macht man Klammern {}? Wenn man Klammern macht, dann rückt man den nächsten Abschnitt ja auch gerade um eins nach rechts, der Übersicht halber. Die Klammer bilden immer einen Anweisungsblock. Damit machst du deutlich was zum Beispiel alles zu einer Schleife bzw. einer Verzweigung gehört. Beispiel: public class Aufg1 { //Beginn der Klasse public static void main(String[] argument) {// Beginn der Main Methode int zahl = 300; if (zahl >= -128 && zahl <= 127) {//Beginn vom if ziel = (byte)zahl; System.out.println("byte-Variable "+ziel); }//Ende If else {//Beginn else System.out.println("int-Variable "+zahl); }//Ende Else }//Ende Main Methode }//Ende Klasse [/PHP] [code]package fahrzeug; abstract class StrassenFzg { protected String bez; protected short geschw; protected boolean verliehen; abstract boolean eingeben(); abstract boolean anzeigen(); public boolean verleihen() { if (verliehen) return false; else { verliehen = true; return true; } } } [/code] Warum kommt bei public boolean verleihen() nicht noch ein ; hintendran, wie bei den anderen Methoden und Variablen? Weil die verleihen Methode nicht abstract ist und bereits in dieser Klasse implementiert sind. Die beiden anderen abstracten Methoden müssen zwingend in einer von dieser Klasse abgeleiteten Klasse mit "Leben gefüllt werden". Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.