Informatik am Johanneum/Java: Unterschied zwischen den Versionen

Aus ZUM Projektwiki
(Nur kleine Schliffe)
(Eigenen Namen eingetragen)
 
(12 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 7: Zeile 7:
!offene Aufgabe!!Verantwortlicher
!offene Aufgabe!!Verantwortlicher
|-
|-
|Klassen in Eclipse anlegen||Erik
|Klassen in Eclipse anlegen||Erik, Joshi
|-
|-
|Variablentypen
|Variablentypen
Zeile 13: Zeile 13:
|-
|-
|eigene Methoden schreiben, Syntax der Signatur, return Statement
|eigene Methoden schreiben, Syntax der Signatur, return Statement
|
|Max
|-
|-
|typische Fehlermeldungen, IndexOutOfBoundsExcecption
|typische Fehlermeldungen, IndexOutOfBoundsExcecption
Zeile 111: Zeile 111:


<br />
<br />
===Erstellen eigener Methoden===
=====Vor dem Erstellen=====
Um eine Methode zu erstellen, muss man sich erst einmal Gedanken über folgende Punkte machen:
#Soll die Methode auch aus anderen Klassen aus erreichbar sein?
#Sollen der Methode Argumente übergeben werden?
#Soll die Methode einen Wert zurückliefern?
=====Punkt 1: Erreichbarkeit aus anderen Klassen=====
Eine Methode, die nur aus der Klasse erreichbar sein soll, in welcher sie steht, ist "private". Eine Methode, die auch aus anderen Klassen aus erreichbar sein soll, ist "public".
=====Punkt 2: Argumente=====
Wenn der Methode Argumente überliefert werden sollen, legt man sie zwischen den Klammern beim Definieren der Methode mit Komma getrennt fest mit "<Variablentyp> <Variablenname>". Beim Aufrufen der Funktion müssen in Klammen dann auch die geforderten Werte übergeben werden. Wenn der Funktion keine Argumente übergeben werden müssen, lässt man sowohl beim Definieren als auch beim Aufrufen der Funktion den Raum zwischen den Klammern leer.
=====Punkt 3: Das return-Statement=====
Wenn die Methode nichts zurückgeben soll, nutzt man den Methoden-Typ "void". Soll sie einen Wert zurückliefern, nutzt man den jeweiligen Variablen-Typ als Methoden-Typ. Um dann einen Wert zurückzuliefern, wird "return <Wert>" verwendet. Dabei wird die Methode abgebrochen. Es können mehrere return-Statements in einer Methode stehen.
=====Syntax=====
Sobald man weiß, was die Methode machen soll, kann man sie dann erstellen. Dafür nutzt man folgende Syntax:
<public/private> <Typ> <Name>(<Argument1, Argument2, ...){
      <nowiki><Code></nowiki>
}
=====Beispiele=====
======Beispiel 1======
Diese Methode kann nur aus der Klasse aufgerufen werden, in welcher sie sich befindet. Sie liefert keinen Wert zurück, aber benötigt einen String, weshalb man beim Aufrufen einen String übergeben muss.
private void ausgabe(String str) {
      System.out.println(str);
}
ausgabe("Hello world!");
======Beispiel 2======
Diese Methode gibt einen Integer zurück und benötigt zwei Integer, um sie aufzurufen. Sie kann aus jeder Klasse aufgerufen werden.
public int addiere(int zahl1, int zahl2) {
      return (zahl1 + zahl2);
}
int summe = addiere(5, 4);
===Arithmetische Operatoren===
===Arithmetische Operatoren===
=====Grundlagen=====
=====Grundlagen=====
Zeile 289: Zeile 333:
  } while(o == 2);
  } while(o == 2);
Diese Schleife wird einmal ausgeführt, danach nicht mehr, da die Bedingung nicht erfüllt wird.
Diese Schleife wird einmal ausgeführt, danach nicht mehr, da die Bedingung nicht erfüllt wird.
<br />


===Reihungen===
===Reihungen===
<br>'''Definition'''<p>
<br>'''Definition'''<p>
Eine Reihung besteht aus einer Anzahl von Werten des gleichen Datentyps. Sie alle werden unter einem Namen geführt und unterscheiden sich nur in den Feldnummern, welche die Position in der Reihung bestimmt.
Eine Reihung besteht aus einer Anzahl von Werten des gleichen Datentyps. Sie alle werden unter einem Namen geführt und unterscheiden sich nur in den Feldnummern, welche die Position in der Reihung bestimmt.<p>
<p>
<p>
'''Arten von Reihungen'''
'''Arten von Reihungen'''<p>
Es gibt verschiedene Arten von Reihungen. Diese unterscheiden sich in dem Datentyp der Variablen, die in ihnen gespeichert sind.


* <p> int[] a; Reihung aus ganzen Zahlen
*<p> int[] a; Reihung aus ganzen Zahlen
* <p> char[] b; Reihungen aus Zeichen
*<p> char[] b; Reihungen aus Zeichen
* <p> boolean[] c; Reihung aus Wahrheitswerten
*<p> boolean[] c; Reihung aus Wahrheitswerten
* <p> int[][] d; Mehrdimensionale Reihung, dabei ist in jedem Element ein eigenes Array enthalten. Jede Dimension wird durch ein paar eckige Klammern dargestellt.<p>
*<p> int[][] d; Mehrdimensionale Reihung, dabei ist in jedem Element ein eigenes Array enthalten. Jede Dimension wird durch ein paar eckige Klammern dargestellt.<p> <p>'''Deklaration von Reihungen'''
'''Initialisierung von Reihen'''
<p>
<p>
Reihungen werden grundsätzlich mit dem Operator <b> new </b>initialisiert.
Reihungen werden grundsätzlich mit dem Operator <b> new </b>deklariert.
<p>
<p>
''Beispiel:''<syntaxhighlight lang="java">
''Beispiel:''<syntaxhighlight lang="java">
int[] a = new int[10]
int[] a = new int[5]
 
oder
 
int[] b;
a = new int[5]
</syntaxhighlight><p>
</syntaxhighlight><p>
In diesem Beispiel erzeugen wir eine Reihung mit 10 Elementen, dieses enthält jedoch noch keine Werte.
In diesen Beispielen erzeugen wir zwei Reihungen mit je 5 Elementen, welche jedoch noch keine Werte enthalten.
<P>
<P><p>
Möchte man hingegen eine Reihung mit bereits bekannten Werten initialisieren, fällt der Operator <b> new </b> weg. Die eckigen Klammern werden durch geschwungene ersetzt innerhalb welcher alle Werte, durch ein Komma getrennt, eingetragen werden.
'''Initialisierung von Reihungen'''<p>
<p>
Bei der Initialisierung  werden die im vorigen Kapitel erstellten Reihungen mit Werten gefüllt. Dafür gibt es verschiedene Möglichkeiten:<br />
''Beispiel:''<syntaxhighlight lang="java">
 
int[] b = {1,2,3,4,5}
#Möchte man eine Reihung mit bereits bekannten Werten initialisieren, fällt der Operator <b> new </b> weg. Die eckigen Klammern werden durch geschwungene ersetzt innerhalb welcher alle Werte, durch ein Komma getrennt, eingetragen werden. Hier wird  die Reihung also gleichzeitig '''deklariert''' und '''initialisiert'''Beispiel:<syntaxhighlight lang="java">
</syntaxhighlight><p>
int[] a = {1,2,3,4,5}
In diesem Beispiel erzeugen wir eine Reihungen mit einer Länge von 5 Elementen mit den Werten 1, 2, 3, 4 und 5.
</syntaxhighlight>In diesem Beispiel erzeugen wir eine Reihungen mit einer Länge von 5 Elementen mit den Werten 1, 2, 3, 4 und 5.   <br />
#Man kann eine Reihung auch initialisieren, indem man die Positionen einzeln mit Werten befüllt.  Beispiel:<syntaxhighlight lang="java">
b[0] = 1;
b[1] = 2;
b[2] = 3;
b[3] = 4;
b[4] = 5;
</syntaxhighlight>Hier werden die verschiedenen Positionen der Reihung einzeln mit Werten gefüllt.  '''Achtung:''' Dabei wird die Position bei 0 beginnend gezählt. Also befindet sich die erste Zahl in der Reihung auf Position 0,  die zweite Zahl in der Reihung auf Position 2 und so weiter
 


'''Auslesen von Werten'''
'''Auslesen von Reihungen'''


Um Werte aus einer Reihung auszulesen, muss man den Namen der Reihung, sowie die Position des Elements in der Reihung auswählen.
Um Werte aus einer Reihung auszulesen, muss man den Namen der Reihung, sowie die Position des Elements in der Reihung auswählen.

Aktuelle Version vom 18. Januar 2021, 17:36 Uhr

Offene Aufgaben

Bitte tragt in die Tabellen ein, welches Thema ihr bearbeiten wollt. Erst wenn ihr euch in der Tabelle für ein Thema eingetragen habt, könnt ihr mit der Bearbeitung beginnen. Ihr könnt Themen auch zu zweit erstellen.

offene Aufgaben
offene Aufgabe Verantwortlicher
Klassen in Eclipse anlegen Erik, Joshi
Variablentypen Vinzent/J-P
eigene Methoden schreiben, Syntax der Signatur, return Statement Max
typische Fehlermeldungen, IndexOutOfBoundsExcecption
Arithmetische Operatoren Niklas
Verzweigungen Finn, Nikita
Schleifen (For-Schleife, While Schleife) Vinzent/J-P
Reihungen (Initialisierung, ...) Arian, Dharam

Tipps zur Erstellung eines Eintrags:

  • jedes Thema hat eine Überschrift von Typ Unterüberschrift1
  • Verwende danach für die einzelnen Teilthemen Unterüberschrift2 oder weitere Unterüberschriften. So erscheinen diese Felder im Inhaltsverzeichnis.
  • Quellcode kann eingefügt werden, indem die Zeile im Modus Quelltextbearbeitung mit einem Leerzeichen begonnen wird.
public void quellcodeSchreiben(){
//  dies ist ein Beispiel, wie Quellcode dargestellt werden kann.
// wechsele dazu in den Modus Quelltextbearbeitung (oben rechts bei dem Stft)
// beginne dann jede Quelltextzeile mit einem Leerzeichen.
}


Klassen in Eclipse anlegen


Variablentypen

In Java gibt es verschiedene Typen von Variablen. Einige davon werden im Folgenden erläutert.

Syntax einer Variable:

Erste Erstellung: Typ + Name = Wert -> Beispiel: int number = 3 / boolean correct = false

Spätere Bearbeitung: Name = Wert -> Beispiel: number = 1 / correct = true

Abfrage (z.B. in IF/ELSE Anfragen oder WHILE-Schleifen): Name == Wert -> number == 1 / correct == true

Ganzzahl-Typen:

integer (int): alle Zahlen zwischen -2147483648 und 2147483647.

long: alle Zahlen zwischen -9223372036854775808 und 9223372036854775807.

Kommazahl-Typen:

double: Zahlen mit Kommastellen, aber auch ohne. Double wird verwendet, da die Ganzzahl-Typen keine Kommastellen speichern können.

Boolean:

boolean: kann zwei Werte annehmen, entweder true oder false, also wahr oder falsch.

Char

char: kann den Wert eines Unicodezeichens annehmen, also beispielsweise einen Buchstaben oder eine Zahl von 0-9.

Syntax

char i = 'J'

String

String: kann die Werte einer Zeichenkette annehmen

ACHTUNG: Der Typ String muss in Java mit einem großen 'S' geschrieben werden.

Syntax

String java = "Hello World!"

Array

array[]: eine Reihung von Zahlen: man kann jeder Stelle eines Arrays eine bestimmte Zahl zuweisen.

Syntax

Erstellen eines Arrays mit der Länge u

int[] example = new int[u]

Erstellen eines Arrays mit bestimmten vorgegebenen Werten

int example[] = {0, 3, 5, 10, 20, 25}

Die Ausgaben kann folgendermaßen aussehen

example[3] == 10;

example[4] == 20;

Zuweisung eines Wertes für eine Arraystelle:

example[1] = 4;

Die abgeänderte Reihung besitzt nun folgende Werte: {0, 4, 5, 10, 20, 25}


Erstellen eigener Methoden

Vor dem Erstellen

Um eine Methode zu erstellen, muss man sich erst einmal Gedanken über folgende Punkte machen:

  1. Soll die Methode auch aus anderen Klassen aus erreichbar sein?
  2. Sollen der Methode Argumente übergeben werden?
  3. Soll die Methode einen Wert zurückliefern?
Punkt 1: Erreichbarkeit aus anderen Klassen

Eine Methode, die nur aus der Klasse erreichbar sein soll, in welcher sie steht, ist "private". Eine Methode, die auch aus anderen Klassen aus erreichbar sein soll, ist "public".

Punkt 2: Argumente

Wenn der Methode Argumente überliefert werden sollen, legt man sie zwischen den Klammern beim Definieren der Methode mit Komma getrennt fest mit "<Variablentyp> <Variablenname>". Beim Aufrufen der Funktion müssen in Klammen dann auch die geforderten Werte übergeben werden. Wenn der Funktion keine Argumente übergeben werden müssen, lässt man sowohl beim Definieren als auch beim Aufrufen der Funktion den Raum zwischen den Klammern leer.

Punkt 3: Das return-Statement

Wenn die Methode nichts zurückgeben soll, nutzt man den Methoden-Typ "void". Soll sie einen Wert zurückliefern, nutzt man den jeweiligen Variablen-Typ als Methoden-Typ. Um dann einen Wert zurückzuliefern, wird "return <Wert>" verwendet. Dabei wird die Methode abgebrochen. Es können mehrere return-Statements in einer Methode stehen.

Syntax

Sobald man weiß, was die Methode machen soll, kann man sie dann erstellen. Dafür nutzt man folgende Syntax:

<public/private> <Typ> <Name>(<Argument1, Argument2, ...){
     <Code>
}
Beispiele
Beispiel 1

Diese Methode kann nur aus der Klasse aufgerufen werden, in welcher sie sich befindet. Sie liefert keinen Wert zurück, aber benötigt einen String, weshalb man beim Aufrufen einen String übergeben muss.

private void ausgabe(String str) {
     System.out.println(str);
}
ausgabe("Hello world!");
Beispiel 2

Diese Methode gibt einen Integer zurück und benötigt zwei Integer, um sie aufzurufen. Sie kann aus jeder Klasse aufgerufen werden.

public int addiere(int zahl1, int zahl2) {
     return (zahl1 + zahl2);
}
int summe = addiere(5, 4);


Arithmetische Operatoren

Grundlagen

In der Programmiersprache Java sind arithmetische Operatoren implementiert. Dabei müssen immer numerische Operanten (int, long, float, double) verwendet werden.

Operatoren
Addition

Der Operator der Addition (a+b) addiert einen numerischen Operanden mit einem weiteren numerischen Operanden.

public class Addition {

   public static void main(String[] args) {
         int a = 7;
         int b = 3;
         
         ergebnis = a + b;
         System.out.print(ergebnis);
      }

}

Ausgabe = 10

Subtraktion

Der Operator der Subtraktion (a-b) subtrahiert einen numerischen Operanden von einem anderen numerischen Operator.

public class Subtraktion {

   public static void main(String[] args) {
         int a = 7;
         int b = 3;
         
         ergebnis = a - b;
         System.out.print(ergebnis);
      }

}

Ausgabe = 4

Multiplikation

Der Operator der Multiplikation (a*b) multipliziert einen numerischen Operanden mit einem anderen numerischen Operanden.

public class Multiplikation {

   public static void main(String[] args) {
         int a = 7;
         int b = 3;
         
         ergebnis = a * b;
         System.out.print(ergebnis);
      }

}

Ausgabe = 21

Division

Der Operator der Division (a/b) dividiert einen numerischen Operanden durch einen anderen numerischen Operanden. Division zweier numerischer Operanden gleichen Typs: In diesem Fall sind die beiden numerischen Operanden ganzzahlig, daher ist auch das Ergebnis ganzzahlig:

public class Division {

   public static void main(String[] args) {
         int a = 7;
         int b = 3;
         
         ergebnis = a / b;
         System.out.print(ergebnis);
      }

}

Ausgabe = 2

Division zweier numerischer Operanden unterschiedlichen Typs Es ist möglich numerische Operanden unterschiedlichen Typs zu dividieren. Ist einer der numerischen Operanden als Gleitkommazahl definiert, so ist auch das Ergebnis eine Gleitkommazahl:

public class Division {

   public static void main(String[] args) {
          int a = 7;
          float b = 3;
          errgebnis = a / b;
     System.out.print(ergebnis);
   }

}

Ausgabe: 2.3333333

Division mit Rest

Bei der Division mit Rest (modulo) dividiert einen numerischen Operanden durch einen zweiten numerischen Operanden (a%b). Dabei wird der ganzzahlige Rest als Ergebnis ausgegeben:

public class Modulodivision {

   public static void main(String[] args) {
         int a = 7;
         int b = 3;
         
         ergebnis = a % b;
         System.out.print(ergebnis);
      }

}

Ausgabe = 1

Verzweigungen

Einführung

Verzweigungen gehören zu den Kontrollstrukturen Javas, die einen flexiblen und ereignisgesteuerten Ablauf eines Programmes ermöglichen. Für die Verzweigungen braucht man festgelegte Bedingungen. Beim Durchlauf des Programmes wird dann an den Verzweigungen überprüft, ob die Bedingung erfüllt wird oder nicht. Je nachdem welcher Fall zutrifft, wird ein bestimmter Bereich des Programmes ausgeführt. Im Folgenden unterscheiden wir in drei Verzweigungen: if-Anweisung, if-else-Anweisung und else-if-Anweisung.

if-Anweisung

Bei der if-Anweisung wird als erstes überprüft, ob die gestellte Bedingung erfüllt wird oder nicht. Wird die Bedingung erfüllt, werden die danach folgenden Anweisungen ausgeführt. Wird die Bedingung nicht erfüllt, werden die danach folgenden Anweisungen übersprungen. In Java sieht die if-Anweisung so aus:

if (Bedingung){
    Anweisung;
}


if-else-Anweisung

Die if-else-Anweisung ist im Prinzip nur eine Erweiterung der if-Anweisung, bei der festgelegt wird, welche Anweisungen ausgeführt werden sollen, wenn die Bedingung nicht erfüllt wird. Man hat also zwei mögliche Fälle. In Java sieht die if-else-Anweisung so aus:

if (Bedingung) {
    Anweisung1;
} 
else {
     Anweisung2;
}


else-if-Anweisung

Wenn man eine Verzweigung in drei verschiedene Programmbereiche braucht, kann man die else-if-Anweisung verwenden. Bei derelse-if-Anweisung wird erstmal überprüft, ob die erste Bedingung zutrifft. Wenn diese Bedingung zutrifft, wird der erste Programmbereich durchlaufen. Wenn diese Bedingung nicht zutrifft, wird zur nächsten Prüfung einer Bedingung gesprungen. Wenn diese zweite Bedingung zutrifft, dann werden die dazugehörigen Anweisungen ausgeführt. Wenn diese zweite Bedingung nicht zutrifft, dann wird zum letzten Teil der else-if-Anweisung gesprungen und der letzte Programmbereich ausgeführt. In Java sieht die else-if-Anweisung so aus:

if (Bedingung1) {
    Anweisung1;
} else if (Bedingung2) {
     Anweisung2;
} else {
     Anweisung3;
}


Schleifen

FOR-Schleife

Die sogenannte FOR-Scheife wird verwendet, wenn man die benötigten Schleifendurchläufe bereits im Voraus kennt. Man benötigt die folgenden drei Parameter: Initialisierung/Startwert, Zielwert und Schrittweite

Syntax

for(Startwert; Zielwert; Schrittweite)

Beispiel

for(int i = 1; i < 3; i++) {
    gehe 10 Schritte;
}

Mit dieser Schleife wird bei i == 1 10 Schritte gegangen und bei i == 2 ebenfalls, bei i == 3 nicht mehr, da der Zielwert erreicht ist.

WHILE-Schleife
Die sogenannte WHILE-Schleife wird solange ausgeführt, bis eine bestimmte Bedingung nicht erfüllt ist. Diese Bedingung steht am Anfang der Schleife. Sofern die Bedingung anfangs nicht erfüllt wird, wird die Schleife übersprungen.

Syntax

while(Bedingung) {
    Anweisung;
}

Beispiel

boolean correct = true;
while(correct) {
    gehe 10 Schritte;
    correct = false;
}

Die Schleife wird einmal ausgeführt, da die Bedingung anfangs korrekt und danach nicht mehr korrekt ist.


DO-WHILE-Schleife

Die sogenannte DO-WHILE-Schleife ist eine WHILE-SCHLEIFE mit dem Unterschied, dass die Anweisung mindestens einmal ausgeführt wird, hierbei ist es anfangs egal, ob die Bedingung erfüllt ist oder nicht.

Syntax

do {
    Anweisung;
} while(Bedingung);

Beispiel

int o = 1;
do {
    gehe 10 Schritte;
} while(o == 2);

Diese Schleife wird einmal ausgeführt, danach nicht mehr, da die Bedingung nicht erfüllt wird.


Reihungen


Definition

Eine Reihung besteht aus einer Anzahl von Werten des gleichen Datentyps. Sie alle werden unter einem Namen geführt und unterscheiden sich nur in den Feldnummern, welche die Position in der Reihung bestimmt.

Arten von Reihungen

Es gibt verschiedene Arten von Reihungen. Diese unterscheiden sich in dem Datentyp der Variablen, die in ihnen gespeichert sind.

  • int[] a; Reihung aus ganzen Zahlen

  • char[] b; Reihungen aus Zeichen

  • boolean[] c; Reihung aus Wahrheitswerten

  • int[][] d; Mehrdimensionale Reihung, dabei ist in jedem Element ein eigenes Array enthalten. Jede Dimension wird durch ein paar eckige Klammern dargestellt.

    Deklaration von Reihungen

Reihungen werden grundsätzlich mit dem Operator new deklariert.

Beispiel:

int[] a = new int[5]

oder

int[] b;
a = new int[5]

In diesen Beispielen erzeugen wir zwei Reihungen mit je 5 Elementen, welche jedoch noch keine Werte enthalten.

Initialisierung von Reihungen

Bei der Initialisierung werden die im vorigen Kapitel erstellten Reihungen mit Werten gefüllt. Dafür gibt es verschiedene Möglichkeiten:

  1. Möchte man eine Reihung mit bereits bekannten Werten initialisieren, fällt der Operator new weg. Die eckigen Klammern werden durch geschwungene ersetzt innerhalb welcher alle Werte, durch ein Komma getrennt, eingetragen werden. Hier wird die Reihung also gleichzeitig deklariert und initialisiert. Beispiel:
    int[] a = {1,2,3,4,5}
    
    In diesem Beispiel erzeugen wir eine Reihungen mit einer Länge von 5 Elementen mit den Werten 1, 2, 3, 4 und 5.
  2. Man kann eine Reihung auch initialisieren, indem man die Positionen einzeln mit Werten befüllt. Beispiel:
    b[0] = 1;
    b[1] = 2;
    b[2] = 3;
    b[3] = 4;
    b[4] = 5;
    
    Hier werden die verschiedenen Positionen der Reihung einzeln mit Werten gefüllt. Achtung: Dabei wird die Position bei 0 beginnend gezählt. Also befindet sich die erste Zahl in der Reihung auf Position 0, die zweite Zahl in der Reihung auf Position 2 und so weiter

Auslesen von Reihungen Um Werte aus einer Reihung auszulesen, muss man den Namen der Reihung, sowie die Position des Elements in der Reihung auswählen. Beispiel:

int[] a = {1,2,3,4,5}

Dann gilt:
a[3] = 4