Zum Inhalt springen

Zwei Fragen zu Java


The Gunner

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich allerdings anstatt "i++" nun "i = i + 2" schreibe, dann geht das nicht.

for (int i = 1; i < 100; ++i++) :D

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 { ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

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".

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...