1. Fragen für Javaeinsteiger
1. Fragen für Javaeinsteiger
(Lizenz) |
KompetenzzieleJavafragen für Einsteiger. Die Fragen in dieser Kategorie sind auf das Skript: "Grundlagen der Programmierung in Java" für das erste Semester abgestimmt. |
- 10432 views
Fragen zur Einführung
Fragen zur Einführung Stefan Schneider Sat, 07/14/2018 - 19:34- 2316 views
1. Starten einer Anwendung:
1. Starten einer Anwendung:Was gibt das folgende Javaprogramm auf der Konsole aus wenn man es mit dem Befehl
java Maintest F
startet. Woran erkennt man die Hauptmethode zum Starten der Anwendung?
public class MainTest { public MainTest(int k) { System.out.println("A"); }public void Main() {
System.out.println("B");
}
public static void main(String[] eingabe) {
System.out.println("C");
}
public final void main(String args) {
System.out.println("D");
}
public String Main(String args) {
System.out.println("E");
String e = "E";
return e;
}
}
Hinweis: Diese Frage kann man erst beantworten wenn man den Stoff des gesamten Grundkurs beherrscht.
Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
- 7618 views
2. Java-Befehle: Welche drei Dateiextensionen (Dateitypen) werden beim Übersetzen, Packen, Bündeln und Ausführen benutzt?
2. Java-Befehle: Welche drei Dateiextensionen (Dateitypen) werden beim Übersetzen, Packen, Bündeln und Ausführen benutzt?Welcher der Dateitypen im Javaumfeld ist dafür gedacht in Texteditoren erstellt zu werden?
- *.java
- *.class
- *.jar
Erklärung: Dateiextensionen sind die Endungen von Dateien die den Typ einer Datei bestimmen; Beispiele ausserhalb des Javaumfelds sind: .txt .exe .doc
Die Antwort finden Sie bei der nächsten Frage (URL rechts unten)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Antwort zu 1. Starten eines Hauptprogramms
Die Frage finden Sie auf der vorgehenden Seite (URL links unten klicken)
Gibt "C" auf der Konsole aus.
Wenn eine Klasse mit dem Befehl java als Hauptpgrogramm gestartet wird, sucht das Laufzeitsystem eine Methode für die das folgende gilt
- sie muss statisch sein: Es gibt zu diesem Zeitpunkt noch keine Anwendungsobjekte
- void als Rückgabewert
- Name "main". Java ist sensitive für Groß- und Kleinschreibung!
- Eingabeparameter: Ein Feld von String. Der Name der Variable ist beliebig.
- 7421 views
3. jar: Wozu dient das Hilfprogramm jar im Java SDK?
3. jar: Wozu dient das Hilfprogramm jar im Java SDK?Die Antwort finden Sie bei der nächsten Frage (URL rechts unten).
Niveau | 1 |
Schwierigkeitsgrad | leicht |
Zeit | 2 Minuten |
Antwort zu 2. Welche drei Dateiextensionen (Dateitypen) werden beim Übersetzen, Packen, Bündeln und Ausführen von Java-Anwendungen verwendet?
Die Frage finden Sie auf der vorgehenden Seite (URL links unten klicken)
Nur die *.java Dateien sind in Text (UTF8) codierte Dateien die man mit einem normalen Texteditor lesen kann.
*.class und *.jar Dateien sind Binärdateien. *.jar Dateien sind im zip Format codiert.
- 6562 views
4. Anwendungen des Java Development Kits
4. Anwendungen des Java Development KitsDas Java Development Kit enthält Programme zum Übersetzen, Ausführen von Programmen, packen von Dateien, extrahieren von Dokumentation, generieren von Schnittstelleninformation.
Tragen Sie in die 5 pfeilartigen Fünfecke die entsprechenden Programmnamen ein:
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
6 Minuten |
Antwort zu 3. jar: Wozu dient das Hilfprogramm jar im Java SDK?
Zum Packen, Entdecken, Bündeln, komprimieren und signieren von Java Bytecode-dateien und beliebigen anderen Dateien zu einer Datei.
- 5751 views
5. Anforderungen an einen Algorithmus
5. Anforderungen an einen AlgorithmusNennen Sie vier Anforderungen an einen gültigen Algorithmus.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 4. : Anwendungen des Java Development Kits
- 4825 views
6. Algorithmen erkennen I
6. Algorithmen erkennen IWarum implementiert die folgende Methode keinen Algorithmus?
Geben Sie eine Erklärung.
public void keinAlgorithmus() { int a = 17; int b = 22; while (a!=b) { a++; b++; } }
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 5: Anforderungen an einen Algorithmus
- Er funktioniert für gültige Eingaben
- Er besitzt endlich viele Einzelschritte
- Er ist in realistischer Zeit ausführbar
- Er terminiert
- 3339 views
7. Eigenschaften eines gültigen Algorithmus
7. Eigenschaften eines gültigen AlgorithmusAnalysieren Sie die folgende Methode. Der Algorithmus implementiert das Multiplizieren zweier Zahlen durch fortgesetztes Addieren. Ignorieren Sie potentielle Probleme mit endlichen Wertebereichen in der Java-arithmetik:
public static int multipliziere(int a, int b) { int i = 0; // Laufvariable int result = 0; // Ergebnis while (i<b) { //Mache weiter bis Laufvariable b erreicht result = result+a; // addiere a zu Ergebnis i++; // Inkrementiere die Laufvariable } return result; }
Die folgende Aussage ist zu vage formuliert um der Methode die Eigenschaften eines gültigen Algorithmus zu zugestehen.
„Diese Methode multipliziert zwei beliebige ganze Zahlen a und b und gibt das Ergebnis zurück“
Welche Eigenschaft eines Algorithmus ist nicht erfüllt?
Wie muss die Aussage präzisiert werden, damit Sie einen gültigen Algorithmus beschreibt?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2+2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 6: Algorithmen erkennen
Die Schleife terminiert nicht. Mehr Informationen zu diesem Thema finden Sie hier.
- 3705 views
"<<" ?
Hallo Herr Schneider,
wollten Sie wirklich den binary left shift operator benutzen?
Nach meinem Wissensstand würde Ihre Schleife dann nicht terminieren. ( Die Bits von i um b Stellen nach links verschoben ist immer größer Null, also -> True. )
Und eine Anfrage bezüglich der Lesbarkeit des Codes: Ist es möglich die Kommentare alle bündig weiter rechts auszurichten? ( Betrifft vlt allen Code von Ihnen, doch hier fällt es mir besonders auf. )
Viele Grüße!
- Log in to post comments
8. Programme des JDK/SDK
8. Programme des JDK/SDKDas Java Development Kit (JDK) enthält Programme zur Softwareentwicklung und Ausführung von Javaanwendungen. Nennen Sie die typischen Eingaben und Ausgaben dieser Programme :
JDK Programm | Gelesene Dateien (Eingaben) | Ausgaben |
---|---|---|
javac | ||
javap | ||
javadoc | ||
jar | ||
java |
.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 6 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 7: Eigenschaften eines gültigen Algorithmus
Die folgende Aussage ist zu vage formuliert um der Methode die Eigenschaften eines gültigen Algorithmus zu zugestehen.
„Diese Methode multipliziert zwei beliebige ganze Zahlen a und b und gibt das Ergebnis zurück“
Welche Eigenschaft eines Algorithmus ist nicht erfüllt (2 Min.)?
Negative Werte für b sind gültige Eingabewerte für die aber inkorrekte Ergebnisse produziert werden.
Wie muss die Aussage präzisiert werden, damit Sie einen gültigen Algorithmus beschreibt (2 Min.)?
„Diese Methode multipliziert eine beliebige ganze Zahl a mit einer positiven Zahl b und gibt das Ergebnis zurück“
Antwort zu Frage 8.: Programme des JDK/SDK
JDK Programm | Gelesene Dateien (Eingaben) | Ausgaben |
---|---|---|
javac | Java Quellcode, Java class, Jar dateien | *.class Dateien mit Byte code |
javap | Java class Dateien | *.java Dateien mit Deklarationen |
javadoc | Javaquellcode | html Seiten mit Dokumentation |
jar | Beliebige Dateien, vorzugsweise Java Bytecodedateien | Den Inhalt der jar Datei oder jar Dateien. Dies hängt von den Optionen ab |
java | Java Bytecode-dateien, Java Archive |
Alle Möglichkeiten eines Programms: Ausgaben auf Konsole, GUI, Netzwerk oder Dateien. |
- 3374 views
Frage zur Aufgabe 8.
Ich verstehe leider nicht warum bei den Programmen des JDK/SDK der Javac also der Übersetzer auch Java class und jar Dateien einlesen kann, ich dachte dieser Übersetzt den Quellcode in Bytecode und gibt dann die .class Dateien aus?
- Log in to post comments
Gute Frage
java braucht oft die Informationen anderer Klassen (Methoden, Attribute etc.) um eine Klasse übersetzen zu können. Hierfür benutzt er die .class Datei einer Klasse oder ein .jar Archiv in dem die .class Datei steht. Findet er keine .class Datei, übersetzt der die .java Datei.
- Log in to post comments
9. Algorithmen erkennen II
9. Algorithmen erkennen IIWarum implementiert die folgende Methode keinen Algorithmus. Geben Sie eine Erklärung.
public void keinAlgorithmus() { int a = 1; while (a!= 100) { a++; a++; } }
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 8.: Programme des JDK/SDK
JDK Programm | Gelesene Dateien (Eingaben) | Ausgaben |
---|---|---|
javac | Java Quellcode, Java class, Jar dateien | *.class Dateien mit Byte code |
javap | Java class Dateien | *.java Dateien mit Deklarationen |
javadoc | Javaquellcode | html Seiten mit Dokumentation |
jar | Beliebige Dateien, vorzugsweise Java Bytecodedateien | Den Inhalt der jar Datei oder jar Dateien. Dies hängt von den Optionen ab |
java | Java Bytecode-dateien, Java Archive |
Alle Möglichkeiten eines Programms: Ausgaben auf Konsole, GUI, Netzwerk oder Dateien. |
Antwort zu Frage 9.: Erkennen Algorithmen II
Die Schleife terminiert nicht.
- 156 views
Fragen zu Typen, Operationen und Zuweisungen
Fragen zu Typen, Operationen und Zuweisungen javafrage Thu, 09/06/2018 - 18:09- 1923 views
1. Zuweisungen mit dem Datentyp char
1. Zuweisungen mit dem Datentyp charWelche der Zuweisungen der Typen short und char werden nicht vom Übersetzer akzeptiert?
public class CharTest {
public static void main(String[] args) {
short s1 = 70;
short s2 = 0;;
char c = 'a';
System.out.println(c);
c++;
System.out.println(c);
c = s1;
System.out.println(c);
c = (char)s1;
System.out.println(c);
c = (char)(c + s1);
System.out.println(c);
s2= c;
System.out.println(s2);
s2= (short)c;
System.out.println(s2);
}
}
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
4 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
- 6586 views
2. Syntax von Zuweisungen
2. Syntax von ZuweisungenWelche der folgenden 10 Zuweisungen haben eine korrekte (richtige) bzw. inkorrekte (falsche) Syntax?
Was stimmt an den inkorrekten Zuweisungen nicht?
Nr. | Zuweisung | Bewertung (richtig, falsch) | Erklärung (nur bei falscher Zuweisung) |
---|---|---|---|
int a; int b; int c; |
richtig | Die Variablen sind alle im gleichen Block deklariert und mit dem Wert 0 initialisiert. | |
1 |
a = 4; |
||
2 |
a = b; |
||
3 |
b := a; |
||
4 |
19 = b; |
||
5 |
a = a+c; |
||
6 |
a = 2*c |
||
7 |
a = a*a; |
||
8 |
a = 4; |
||
9 |
a,c = b; |
||
10 |
c = c; |
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
4 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu 1.: Zuweisungen mit dem Datentyp char
char und short sind Datenbehälter der gleichen Größe (16 Bit). Auf beiden sind die arithmetischen Operationen definiert. Man darf sie aber aus Sicherheitsgründen nicht ohne Cast (Typkonversion) aufeinander zuweisen.
public class CharTest {
public static void main(String[] args) {
short s1 = 70;
short s2 = 0;
char c = 'a';
System.out.println(c);
c++;
System.out.println(c);
//c = s1;
System.out.println(c);
c = (char)s1;
System.out.println(c);
c = (char)(c + s1);
System.out.println(c);
//s2= c;
System.out.println(s2);
s2= (short)c;
System.out.println(s2);
}
}
- 5471 views
3. Syntax von Bezeichnern
3. Syntax von BezeichnernMit welchen Zeichen dürfen in Java Namen (Identifier) von Variablen beginnen?
Achten Sie auf Groß- und Kleinschreibung!
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 2.: Syntax von Zuweisungen
Nr. | Zuweisung | Bewertung (richtig, falsch) | Erklärung (nur bei falscher Zuweisung) |
---|---|---|---|
int a; int b; int c; |
richtig | Die Variablen sind alle im gleichen Block deklariert und mit dem Wert 0 initialisiert. | |
1 |
a = 4; |
richtig | |
2 |
a = b; |
richtig | |
3 |
b := a; |
falsch | Der Zuweisungsoperator in Java ist „=“ |
4 |
19 = b; |
falsch | Man kann einem konstanten Literal keinen Wert zuweisen. |
5 |
a = a+c; |
richtig | |
6 |
a = 2*c |
falsch | Semikolon fehlt |
7 |
a = a*a; |
richtig | |
8 |
a = 4; |
richtig | |
9 |
a,c = b; |
falsch | Man kann nur einer Variablen einen Wert zuweisen |
10 |
c = c; |
richtig |
- 5232 views
4. Nicht erlaubte Namen von Bezeichnern
4. Nicht erlaubte Namen von BezeichnernNennen Sie 10 Namen (Identifier) die Sie nicht in Java verwenden dürfen, obwohl Sie von der Zeichenfolge her, gültig aufgebaute Namen sind.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 3.: Syntax von Bezeichnern
„_“, „$“ oder Buchstaben
- 5146 views
5 Vererbung, Konstruktoren, Schlüsselworte
5 Vererbung, Konstruktoren, SchlüsselworteGegeben seien die beiden Klassen Unterklasse und Oberklasse:
public class Oberklasse { public int wert; public Oberklasse(int a) { wert=a; System.out.println("K-Oberklasse: "+ wert); a++; } // Ende Konstruktor Oberklasse ** Hier fehlte ein CR public static void main(String[] args) { Oberklasse ok = new Oberklasse(10); ok.wert++; System.out.println(ok.wert); } // Ende main } // Ende Klasse Oberklasse public class Unterklasse extends Oberklasse { public Unterklasse (int e, int f) { super(e+f); System.out.println("K-Unterklasse: "+ wert); wert = wert + e +f; System.out.println("K-Unterklasse: "+ wert); } // Ende Konstruktor Unterklasse public static void main(String[] args) { System.out.println("ok"); Oberklasse ok = new Oberklasse(10); ok.wert++; System.out.println(ok.wert); System.out.println("uk"); Unterklasse uk = new Unterklasse(2,3); ok.wert--; System.out.println(ok.wert); } // Ende main } // Ende Klasse Unterklasse
a.) Schreiben Sie die Konsolenausgaben auf, die das Programm schreibt wenn es mit dem Befehl java Unterklasse gestartet wird.
b.) Unterlinieren Sie alle Schlüsselworte der Sprache Java
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 8+3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 4.: Nicht erlaubte Namen von Bezeichnern
Schlüsselwörter und die Literale true, false, null können nicht für Bezeichnernamen verwendet werden. Alle Antworten mit 10 Beispielen von Schlüsselwörtern sind korrekt.
- 5649 views
Frage zu 5
Macht es Sinn, diese Frage in Kapitel 2 zu packen, wenn hier noch nicht klar ist, was Vererbung überhaupt ist?
- Log in to post comments
6. Deklaration und Zuweisung von Variablen
6. Deklaration und Zuweisung von VariablenDeklarieren Sie eine Variable mit dem Namen x mit einem Typ der die Verwaltung von ganzen Zahlen mit 32 Bit erlaubt. Achten Sie auf die korrekte Syntax.
- Deklarieren Sie die Variable in einem Befehl und weisen Sie der Variablen den Wert 17 in einem zweiten Befehl zu.
- Deklarieren Sie die Variable und weisen Ihr den Wert 17 in einem integrierten Befehl zu.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 5.: Vererbung, Konstruktoren, Schlüsselwörter
public class Oberklasse { public int wert; public Oberklasse(int a) { wert=a; System.out.println("K-Oberklasse: "+ wert); a++; } // Ende Konstruktor Oberklasse ** Hier fehlte ein CR public static void main(String[] args) { Oberklasse ok = new Oberklasse(10); ok.wert++; System.out.println(ok.wert); } // Ende main } // Ende Klasse Oberklasse public class Unterklasse extends Oberklasse { public Unterklasse (int e, int f) { super(e+f); System.out.println("K-Unterklasse: "+ wert); wert = wert + e +f; System.out.println("K-Unterklasse: "+ wert); } // Ende Konstruktor Unterklasse public static void main(String[] args) { System.out.println("ok"); Oberklasse ok = new Oberklasse(10); ok.wert++; System.out.println(ok.wert); System.out.println("uk"); Unterklasse uk = new Unterklasse(2,3); ok.wert--; System.out.println(ok.wert); } // Ende main } // Ende Klasse Unterklasse
a.) Die Konsolenausgaben
ok K-Oberklasse: 10 11 uk K-Oberklasse: 5 K-Unterklasse: 5 K-Unterklasse: 10 10
b.) Unterlinieren Sie alle Schlüsselworte der Sprache Java: siehe oben
- 4714 views
7. Beispiele impliziter und expliziter Typkonvertierungen
7. Beispiele impliziter und expliziter TypkonvertierungenGeben Sie jeweils ein Beispiel für implizite und notwendige explizite Typkonvertierungen (Casts) bei einer Zuweisung. Nutzen Sie die vorgegebenen Variablen, weisen Sie sie aufeinander zu:
int ii = -1000000; long ll = -100L; double db = 3.13;
- Beispiel einer Zuweisung mit einer impliziten Typkonvertierung
- Beispiel einer Zuweisung mit einer notwendigen, expliziten Typkonvertierung
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 6.: Deklaration und Zuweisung von Variablen
-
int x; x = 17;
-
int x = 17;
- 5242 views
8. Unterschiede zwischen char und short Typen
8. Unterschiede zwischen char und short Typen
char und short sind Datenbehälter die 16 Bit große Zahlen verwalten.
Warum ist eine explizite Typkonversion (Cast) bei Zuweisungen von Variablen dieser beiden Typen notwendig?
Beispiel:
short sh = 1;; char ch = 1; ch = (char)sh; sh = (short)ch;
Geben Sie ein kurze Erklärung.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 7.: Beispiele impliziter und expliziter Typkonvertierungen
Beispiel einer Zuweisung mit einer impliziten Typkonvertierung:
ll = ii;
Beispiel einer Zuweisung mit einer notwendigen, expliziten Typkonvertierung:
ii = (int) ll;
- 4756 views
9. Bedingt auswertende Operatoren
9. Bedingt auswertende OperatorenNennen Sie zwei bedingt auswertende Operatoren und nennen Sie einen Verwendungszweck.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 8.: Unterschiede zwischen char und short Typen
char repräsentiert Zeichen und hat einen Wertebereich von 0 bis 216-1. short hat einen Wertebereich von -215 bis 215-1. Beide Wertebereiche überlappen sich nur zur Hälfte. Bei Zuweisungen im nicht überlappenden Bereich kommt es zu Werten die im Zieltyp eine andere Bedeutung haben. Hierdurch können unbemerkt Rechenfehler entstehen.
- 4865 views
10. long versus double
10. long versus doubleDie Javatypen double und long belegen jeweils 64 Bit Speicherplatz. Nennen Sie zwei Anwendungsfälle in den man den Typ double anstatt long verwenden sollte.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 9.: Bedingt auswertende Operatoren
|| und &&. Sie erlauben den Abbruch eines boolschen Ausdrucks wenn das Ergebnis schon feststeht. Die hinteren Teile des Ausdrucks werden dann nicht mehr ausgewertet. Man kann hierdurch unsichere Operationen, wie die Benutzung eines Zeigers, vor dem auslösen einer Ausnahme schützen. Man wertet im ersten Teil des Terms den potentiellen Fehlerfall, hier ein Nullzeiger, aus und fährt nur fort wenn der zweite Teil des Terms sicher ausgewertet werden kann.
- 3933 views
11. Automatische Typkonversionen bei Termen (double, long)
11. Automatische Typkonversionen bei Termen (double, long)Sie addieren eine Variable a von Type double zu einer Variablen b vom Typ long. Was ist der Typ des Ergebnis dieser Addition?
Tragen Sie den Typ den Java, ohne Casting, nach der Addition für die Variable c erwartet ein.
Geben Sie eine kurze Erklärung für Ihre Wahl:
double a = 24.3D; long b = 17L; ? c = a + b;
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 10.: long versus double
- Man sollte den Typ double benutzen wenn man erwartet, dass der Wertebereich den eines long Typen überschritten wird.
- Man sollte den Typ double benutzen wenn man Werte mit Nachkommastellen verwalten muss
- 3306 views
12. Typkonversionen bei Termen (int, long)
12. Typkonversionen bei Termen (int, long)Addieren Sie zwei sehr große Variablen d und e vom Typ int.
Das Ergebnis wird in der Variable f vom Type long gespeichert. f hat einen größeren Wertbereich damit das Ergebnis korrekt verwaltet werden kann.
Implementieren Sie die Addition im Code unten so, dass in f ein korrektes Ergebnis abgelegt wird.
int d= Integer.MAX_VALUE-2; int e= Integer.MAX_VALUE-3; long f = ; // hier implementieren
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 11.: Automatische Typkonversionen bei Termen (double, long)
double a = 24.3D; long b = 17L; double c = a +b;
Bei arithmetischen Termen wird die Operation immer im Wertebereich des größten Operanden durchgeführt. Diese ist double.
- 3340 views
13. Typen, Arithmetik und Wertebereiche
13. Typen, Arithmetik und WertebereicheWas würde geschehen wenn Sie die Summe der beiden Variablen d und e, wie folgt berechnen und in in der Variable g speichern würden?
int d= Integer.MAX_VALUE-2; int e= Integer.MAX_VALUE-3; int g = d + e;
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 1.78: Typkonversionen bei Termen (int, long)
int d= Integer.MAX_VALUE-2; int e= Integer.MAX_VALUE-3;
long f = (long)d + (long)e;
- 3508 views
fehlendes Semikolon
Hallo,
fehlt bei der Antwort zu Frage 1.78: Typkonversionen bei Termen (int,long) nicht ein Semikolon hinter der zweiten Zeile?
- Log in to post comments
14. int versus float
14. int versus floatDie Javatypen float und int belegen jeweils 32 Bit Speicherplatz.
Nennen Sie zwei Anwendungsfälle in den man den Typ float anstatt int verwenden sollte.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 13: Typen, Arithmetik und Wertebereiche
Bei der Addition dieser beiden großen Zahlen kommt es jenseits des positiven Wertebereichs zu einem Überlauf. Das Ergebnis ist negativ (-7 umgenau zu sein). Für Java ist das eine reguläre Operation es wird kein Fehler berichtet obwohl das Ergebnis nicht korrekt ist. Die ist ein Kompromis in der Java Spezifikation um eine extrem effiziente Arithmetik implementieren zu können.
- 2921 views
15. char versus short, Beispiele
15. char versus short, Beispielechar und short sind, obwohl sind unterschiedlich eingesetzt werden, 16 Bit Zahlentypen in Java.
Hilfe: 215=32768
- Nennen sie eine Zahl die man mit short Typen darstellen kann und nicht dem char Typ.
- Nennen Sie eine Zahl die man dem char Typ darstellen kann und nicht mit dem short Typ.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 14. : int versus float
- Man sollte float benutzen wenn man erwartet, dass der Wertebereich den eines int Typen übertrifft.
- Man sollte float benutzen wenn man Werte mit Nachkommastellen verwalten muss
- 3102 views
16. Erste ganze Zahl größer Null die man noch mit int darstellen kann aber nicht mit float Typen
16. Erste ganze Zahl größer Null die man noch mit int darstellen kann aber nicht mit float TypenWas ist die erste ganze Zahl größer Null, die man noch mit dem Typ int darstellen kann aber nicht mit dem Typ float?
Geben Sie eine Erklärung die auf dem Zahlenformat der beiden Typen basiert.
Schreiben Sie ein Programm welches diesen Wert berechnet.
Diese Frage ist für Klausuren etwas zu schwer...
Niveau | 1 |
Schwierigkeitsgrad | schwer |
Zeit |
10 Minuten (Herleitung) |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 15. char versus short
- Im Wertebereich vom short aber nicht im Wertebereich von char : -1
- Im Wertebereich von char aber nicht im Wertebereich short: (215 -1) + 1 = 215 = 32768
- Herleitung: Größte Wert von short: 215-1. Dann noch mindestens 1 addieren.
- 5492 views
17. Schlüsselwörter
17. SchlüsselwörterNennen Sie soviele Java Schlüsselworte wie möglich!
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 16.: Erste ganze Zahl größer Null die man noch mit int darstellen kann aber nicht mit float Typen
16777217
Erklärung
Der Typ int kann alle ganzen Zahlen bis 231-1 darstellen (Siehe)
Der Typ float kann alle ganzen Zahlen darstellen solange der Exponent 20 ist. Wird der Exponent zu 21, kann der Typ float nur noch jede zweite Zahl genau darstellen.
Der größte Wert den man im Typ float in der Mantisse beschreiben kann ist hat alle 23 Bits gesetzt. Der Wert is also 224-1=16777215.
float kann also noch (224-1)*20 = 16777215 darstellen.
Der nächste Wert kann float auch noch darstellen: 224=16777216. Hier wird ein größerer Exponent verwendet und eine 1 steht in der Mantisse.
Die nächste Zahl 16777217 kann aber von float nicht mehr dargestellt werden. Der Exponent muss größer als 20 sein, da die Mantisse nicht mehr ausreicht. Ist der Exponent aber 21 kann man nur noch jede zweite Zahl genau repräsentieren. Ist der Exponent 22, kann man nur noch jede vierte Zahl genau repräsentieren.
Eine mögliche Implementierung
package javafrage;public class IntVersusFloat {
public static void main(String[] args) {
int i=0;
float j=0.0f;
while (i==(int)j) {
j++;
i++;
}
System.out.println("i: "+i+", j: "+j);
double k = (int)Math.pow(2, 24);
System.out.println(k);
}
}
- 4522 views
18. Typkonversion: Casten
18. Typkonversion: CastenWas geschieht mit dem Ergebnis einer Zuweisung die von den Basistypen her unsicher ist und mit einem „Cast“ erzwungen wird...
- … im günstigsten Fall?
- … im ungünstigen Fall?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 17 : Schlüsselwörter
Java hat 50 Schlüsselwörter (Siehe)
Wertung
- 20 und mehr: Ausreichend für den Kurs
- 40 und mehr: Gurulevel
- 50: Sie sind wohl James Gosling?
- 4855 views
19. Sichere Zuweisungen
19. Sichere ZuweisungenNicht alle Basistypen können wegen ihrer unteschiedlichen Wertebereiche sicher aufeinander zugewiesen werden. Markieren alle sicheren Zuweisungen mit einem Kreuz in der dritten Spalte. Tragen Sie für die unsicheren Zuweisungen eine Zuweisung mit einer Typkonversion(Cast) so ein, so das der Übersetzer die unsichere Zeile ohne Fehler übersetzt.
Zuweisung | Erlaubt und sicher | Nicht erlaubt und unsicher (Zuweisung mit Typkonversion) |
|
---|---|---|---|
Deklaration der Variablen. Belegung sei unbekannt und nicht die Standardinitialisierung |
byte by; short sh; char ch; int in; long lo; ... |
Nichts in diese Zelle eintragen | Nichts in diese Zelle eintragen |
Beispiel a.) |
by = lo; |
by = (byte) lo; | |
Beispiel b.) |
by = by; |
X | |
1. |
lo = lo; |
||
2. |
lo = in; |
||
3. |
lo = sh; |
||
4. |
lo = by; |
||
5. |
sh = lo; |
||
6. |
sh = in; |
||
7. |
sh = ch; |
||
8. |
sh = by; |
||
9. |
in = lo; |
||
10. |
in = in; |
||
11. |
in = sh; |
||
12. |
in = by; |
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
6 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 18: Typkonversion, Casten
- … im günstigsten Fall?
- Nichts. Der zugewiesene Wert ist der korrekte Wert
- … im ungünstigen Fall?
- Der zugewiesene Wert ist kleiner, da Bits die ausserhalb des Wertebereichs des kleineren Typs liegen ohne Fehlermeldung abgeschnitten werden.
Antwort zu Frage 19: Sichere Zuweisungen
Zuweisung | Erlaubt und sicher | Nicht erlaubt und unsicher (Zuweisung mit Typkonversion) |
|
---|---|---|---|
Deklaration der Variablen. Belegung sei unbekannt und nicht die Standardinitialisierung |
byte by; short sh; char ch; int in; long lo; ... |
Nichts in diese Zelle eintragen | Nichts in diese Zelle eintragen |
Beispiel a.) |
by = lo; |
by = (byte) lo; |
|
Beispiel b.) |
by = by; |
X | |
1. |
lo = lo; |
X | |
2. |
lo = in; |
X | |
3. |
lo = sh; |
X | |
4. |
lo = by; |
X | |
5. |
sh = lo; |
sh=(short)lo; |
|
6. |
sh = in; |
sh=(short)in; |
|
7. |
sh = ch; |
sh=(short)ch; |
|
8. |
sh = by; |
X | |
9. |
in = lo; |
in=(int)lo; |
|
10. |
in = in; |
X | |
11. |
in = sh; |
X | |
12. |
in = by; |
X |
- 3968 views
Fragen zu Ablaufstrukturen
Fragen zu Ablaufstrukturen javafrage Fri, 10/19/2018 - 17:49- 1560 views
1. Codetransformation (if-else)
1. Codetransformation (if-else)Gegeben ist das folgende Javaprogramm:
public class Main2 { static short k; public static void main(String[] args) { short i, k; short imax = 10; for (i = 1; i < imax; i++) { for (k = 1; k < imax; k++) { if ((k == i) || (k == (imax - i))) {
System.out.print("*");
}
else { System.out.print(" "); // ein Leerzeichen
}
} // for k
switch (i) {
case 1:
case 2:
case 3:
case 4:
System.out.println("LINKS");
break;
case 6:
case 7:
case 8:
case 9:
System.out.println("RECHTS");
break;
default:
System.out.println("MITTE");
} // switch
} // for i
} // main
}
Was druckt dieses Programm aus?
Ersetzen Sie die switch Anweisung durch if bzw. if-else Anweisungen. Das Programm soll mit den if Anweisungen die gleichen Ausgaben wie mit der switch Anweisung erzeugen.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
8 Minuten (Konsolenausgaben) 8 Minuten (Codetransformation) |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
- 5582 views
2. Codetransformation von Schleifen
2. Codetransformation von SchleifenWandeln Sie die do-while-Schleife in der Methode doWhile() um.
a.) Reimplementieren Sie den vorgebenen Multiplikationsalgorithmus der Methode doWhile() mit Hilfe einer while-Schleife in der Methode nurWhile()
b.) Reimplementieren den vorgebenen Multiplikationsalgorithmus der Methode doWhile() mit einer for-Schleife in der Methode nurFor().
Hinweise:
- Die Lösungen sollen nur in Bereiche mit weißem Hintergrund eingetragen werden
- Der Multiplikationsalgorithmus muss nur für positive Werte korrekte Ergebnisse liefern
public class Schleifen {
public static void main(String[] args) {
int a = 3;
int b = 4;
int c;
if ((a>=1) && (b>=1)) {
c = doWhile(a,b); System.out.println(c);
c = nurWhile(a,b);System.out.println(c);
c = nurFor(a,b); System.out.println(c);
}
} // Ende main public static int doWhile(int a, int b) {
int i = 0;
int ergebnis = 0;
do {
ergebnis += a;
i++;
} while (i < b);
return ergebnis;
}
public static int nurWhile(int a, int b) {
int i = 0;
int ergebnis = 0; // Hier Lösung eintragen return ergebnis; } // Ende nurWhilepublic static int nurFor(int a, int b) {
int ergebnis = 0;
int ergebnis = 0;
// Hier Lösung eintragen
return ergebnis;
} // Ende Methode nurFor
}
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 6 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu 1: Codetransformation
Konsolenausgabe:
* *LINKS
* * LINKS
* * LINKS
* * LINKS
* MITTE
* * RECHTS
* * RECHTS
* * RECHTS
* *RECHTS
Codetransformation:
if (i <5)
System.out.println("Links");
else if (i==5)
System.out.println("Mitte");
else
System.out.println("Rechts");
- 5333 views
Sie haben bei der nurFor…
Sie haben bei der nurFor Schleife im Vergleich zur Lösung einen Fehler. In der Lösung ist bereits schon vor den //hier Lösung eintragen;
ein ergebnis +=a; allerdings ist dies in der Aufgabe nicht so angegeben. Sie müssten, damit alles passt einfach das ergebnis +=a; in der Lösung um eine Zeile verschieben, sodass es nicht mehr im Code überhalb der //hier Lösung eintragen steht.
- Log in to post comments
3. Codetransformation switch-case
3. Codetransformation switch-caseWandeln Sie die Switch-case Verzweigung der Methode caseVerzweigung() um in if-Verzweigungen. Benutzen Sie hierzu den Rumpf der Methode ifVerzweigung(). Beide Methoden sollen die gleichen Ausgaben mit der Methode drucke() erzeugen.
public class Transformation { public static void main(String[] args) { caseVerzweigung(3); ifVerzweigung(3); } public static void drucke(String st) { System.out.println(st);} public static void caseVerzweigung(int s) { switch (s) { case 2: case 4: drucke("gerade"); break; case 1: drucke("eins"); break; case 3: drucke("drei"); break; default: drucke("unbekannt"); } // End switch } //Ende Methode caseVerzweigung public static void ifVerzweigung(int s) { // Lösung hier eintragen } // Ende Methode ifVerzweigung }// Ende Klasse Transformation
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 2: Codetransformation
public class Schleifen { public static void main(String[] args) { int a = 3; int b = 4; int c; if ((a>=1) && (b>=1)) { c = doWhile(a,b); System.out.println(c); c = nurWhile(a,b);System.out.println(c); c = nurFor(a,b); System.out.println(c); } } // Ende main public static int doWhile(int a, int b) { int i = 0; int ergebnis = 0; do { ergebnis += a; i++; } while (i < b); return ergebnis; } public static int nurWhile(int a, int b) { int i = 0; int ergebnis = 0; // Lösung ergebnis += a; i++; while (i < b) { ergebnis += a; i++; } // Ende while Schleife return ergebnis; } // Ende nurWhile
public static int nurFor(int a, int b) {
int ergebnis = a;
// Lösung
for (int i = 1; i < b; i++) {
ergebnis += a;
}
return ergebnis;
} // Ende Methode nurFor
}
- 5889 views
nurWhile() Methode
Ist es in diesem Fall wichtig, vor der while-Schleife zu schreiben:
ergebnis += a;
i++;
Ich sehe da keinen Unterschied in der Ausgabe, wenn ich die beiden Zeilen weglasse, da i in dem Beispiel dann 0 wäre, die while-Schleife somit 4 mal durchlaufen würde und als Ergebnis auch 12 rauskommen würde.
Oder gibt es einen Sonderfall, in dem die beiden Zeilen vor der Schleife von Bedeutung sind?
- Log in to post comments
Im Prinzip ja
Die while Schleife ist eine abweisende Schleife.
Man kann rein mechanisch den Code im dowhile Block vor die While setzen.
Man muss das natürlich nicht tun, wenn man aus den möglichen EIngaben erkennen kann, dass die Anwendung auf jeden Fall in den while Block kommt.
- Log in to post comments
Aber durch diesen zwang…
Aber durch diesen zwang ermöglichen wir die Multiplikation von a * b (b=0) ist das nicht unpraktisch? Habe ich da was übersehen?
- Log in to post comments
Lösung Aufgabe
ich bin der Meinung, dass Sie einen Fehler in der Lösung der Aufgabe gemacht haben.
Sie haben bei nurFor zwei mal ergebnis initialisiert und deklariert
"int ergebnis = 0;"
"int ergebnis = 0;"
jedoch muss es doch eigentlich
"int i = 0;"
und
"int ergebnis = 0;"
sein, oder nicht?
Falls ja, so stimmt Ihre for Schleife ebenfalls nicht, sie würde, dadurch dass wir i bereits deklariert und initialisiert haben,
for( i = 0; i
statt
for (int i 0 =; i
lauten.
Sind Sie mit meiner Meinung einverstanden oder habe ich einen Denkfehler?
lG
- Log in to post comments
Codetransformation von do-while zu for
Wieso muss ich hier bei der for-Schleife nicht einmal davor ergebnis+=a; implementieren um zu garantieren, dass die Schleife einmal durchläuft, wie bei der do-while Schleife?
- Log in to post comments
forSchleife Falsch
In der for-Schleife muss man i = 1 setzen, sonst zählt es einmal mehr durch.
Übrigens sind ihre Captchas echt schwer zu lesen.
- Log in to post comments
4. Codetransformation (while Schleife)
4. Codetransformation (while Schleife)Die Methode forSchleife(int a) implementiert eine arithmetische Reihe, die für die Eingaben 0 bis 4 die folgenden Ausgaben erzeugt:
Eingabe: 0 1 2 3 4
Ausgabe:
- 0
- 1=1
- 3=1+2
- 6=1+2+3
- 10=1+2+3+4
public class ArithmetischeReihe { public static void main(String[] args) {// nur zum Testen int c; for (int a = 0; a <= 5; a++) { c = forSchleife(a); System.out.println(a + ":" + c); c = whileSchleife(a); System.out.println(a + ":" + c); } // Ende for } // Ende Methode main public static int forSchleife(int a) {//Vorgabe int ergebnis = 0; for (int i = 1; i <= a; i++) { ergebnis += i; } return ergebnis; } }
Transformieren Sie die Methode forSchleife(int a) in eine gleichwertige Methode whileSchleife(int a) die, die gleichen Ergebnisse mit einer while Schleife erzeugt. Nutzen Sie den folgenden Quellcode:
public static int whileSchleife(int a) { int ergebnis = 0; return ergebnis; }
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 5 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 3: Codetransformation switch-case
public class Transformation { public static void main(String[] args) { caseVerzweigung(3); ifVerzweigung(3); } public static void drucke(String st) { System.out.println(st);} public static void caseVerzweigung(int s) { switch (s) { case 2: case 4: drucke("gerade"); break; case 1: drucke("eins"); break; case 3: drucke("drei"); break; default: drucke("unbekannt"); } // End switch } //Ende Methode caseVerzweigung public static void ifVerzweigung(int s) { // Lösung hier eintragen for (s = 0; s < 6; s++) { //for Schleife nur zum Testen if ((s == 2) || (s==4)) drucke("gerade"); else if (s==1) drucke("eins"); else if (s==3) drucke ("drei"); else drucke("unbekannt"); } } // Ende Methode ifVerzweigung }// Ende Klasse Transformation
- 4645 views
5. Codetransformation (do-while Schleife)
5. Codetransformation (do-while Schleife)Die Methode forSchleife(int a) implementiert eine arithmetische Reihe, die für die Eingaben 1 bis 5 die folgenden Ausgaben erzeugt:
Eingabe: 1 2 3 4
Ausgabe:
- 1=1
- 3=1+2
- 6=1+2+3
- 10=1+2+3+4
- 15= 1+2+3+4+5
public class ArithmetischeReihe { public static void main(String[] args) {// nur zum Testen int c; for (int a = 1; a <= 5; a++) { c = forSchleife(a); System.out.println(a + ":" + c); c = doWhileSchleife(a); System.out.println(a + ":" + c); } // Ende for } // Ende Methode main public static int forSchleife(int a) {//Vorgabe int ergebnis = 0; for (int i = 1; i <= a; i++) { ergebnis += i; } return ergebnis; }
Transformieren Sie die Methode forSchleife(int a) in eine gleichwertige Methode doWhileSchleife(int a) die, die gleichen Ergebnisse mit einer dowhile Schleife erzeugt. Nutzen Sie den folgenden Quellcode:
public static int doWhileSchleife(int a) { int ergebnis = 0; // Code hier einfügen return ergebnis; }
} // Ende der Klasse
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 5 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 4: Codetransformation (while Schleife)
public static int whileSchleife(int a) { int ergebnis = 0; int i = 1; while (i <= a) { ergebnis += i; i++; } return ergebnis; }
- 4494 views
6. Codetransformation (switch-case Bedingung)
6. Codetransformation (switch-case Bedingung)Die Methode forSchleife(int a) implementiert eine arithmetische Reihe, die für die Eingaben 0 bis 4 die folgenden Ausgaben erzeugt:
Eingabe | Ausgabe |
---|---|
0 | 0 |
1 | 1=1 |
2 | 3=1+2 |
3 | 6=1+2+3 |
4 | 10=1+2+3+4 |
public class ArithmetischeReihe { public static void main(String[] args) {// nur zum Testen int c; for (int a = 0; a <= 5; a++) { c = forSchleife(a); System.out.println(a + ":" + c); c = caseVerzweigung(a); System.out.println(a + ":" + c); } // Ende for } // Ende Methode main public static int forSchleife(int a) {//Vorgabe int ergebnis = 0;
for (int i = 1; i <= a; i++) {
ergebnis += i;
}
return ergebnis; }
Transformieren Sie die Methode forSchleife(int a) in eine gleichwertige Methode caseVerzeigung(int a) die, die gleichen Ergebnisse mit einer case Verzweigung erzeugt. In der case Verzweigung kann jeweils das Endergebnis aus der Tabelle oben zurückgegeben werden. Nutzen Sie den folgenden Quellcode:
public static int caseVerzweigung(int a) {
int ergebnis = 0;
// Hier Lösung implementieren
return ergebnis;
} // Ende switch } } // Ende der Klasse
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 5 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 5: Codetransformation (do-while Schleife)
public static int doWhileSchleife(int a) {
int ergebnis = 0; int i = 1; do { ergebnis += i; i++; } while (i <= a); return ergebnis; }
- 5081 views
Addierender Verbundoperator
Das ist ein Verbundoperator. Er addiert und führt eine Zuweisung zur gleichen Variable in einem durch. Er wird hier im Skript beschrieben.
Google verrät das auch wenn man nach Java += Operator sucht...
- Log in to post comments
Ist da ein Fehler in der Lösung?
Guten Tag,
müsste in der Lösung von der Codetransformation das int i = 1 sein und nicht int i = 0 ?
Da die Initialisierung in der Aufgabe in der For Schleide int i = 1 ist?
Mit freundlichen Grüßen!
- Log in to post comments
Sehr gut beobachtet
Das ganze mit 1 loslaufen lassen ist der korrekte Ansatz.
Das Ergebnis eines Starts mit i=0 war korrekt, da eine 0 auf das Ergebnis aufaddiert wurde.
Ich habe die Antwort geändert.
- Log in to post comments
Verbesserungsvorschlag Lösung
Wäre der Sinn der do-while-Schleife nicht mit folgendem Methodenrumpf besser getroffen?:
int ergebnis = 0;
do {
ergebnis += a--;
}while(a>0)
return ergebnis;
Die Variable i wirkt etwas konstruiert um mehr an die vorherige for-Schleife anzulehnen.
Oder ist genau das so gedacht?
- Log in to post comments
7. Implementieren einer for-Schleife
7. Implementieren einer for-SchleifeImplementieren Sie eine for-Schleife die eine Variable i vom Wert 10 bis 20 hoch zählt.
Benutzen Sie den Aufruf System.out.println(i); um den Zählvorgang auf der Konsole auszudrucken.
Achten Sie darauf, dass alle benutzen Variablen deklariert sind!
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 6: Codetransformation (switch-case Bedingung)
public static int caseVerzweigung(int a) {
int ergebnis = 0;
switch (a) {
case 0:
ergebnis = 0;
break;
case 1:
ergebnis = 1;
break;
case 2:
ergebnis = 3;
break;
case 3:
ergebnis = 6;
break;
case 4:
ergebnis = 10;
break;
default:
ergebnis = -1;
break; }
return ergebnis; } // Ende switch
- 3435 views
8. Syntax einer for-Schleife
8. Syntax einer for-SchleifeNennen Sie die drei Teile des Kopfs einer for-Schleife in der Reihenfolge des Auftretens. Geben Sie eine kurze Erklärung für jeden Bereich
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 6 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 7: Implementieren einer for-Schleife
for (int i=10;i<=20; i++) { System.out.println(i); }
- 3617 views
9. Unterschiede zwischen do-while-Schleifen und for-, while-Schleifen
9. Unterschiede zwischen do-while-Schleifen und for-, while-SchleifenWas unterscheidet eine do-while Schleifen von while- und for-Schleifen?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 8: Syntax einer for-Schleife
- Identifikation und Initialisierung der (Lauf)variable mit der Möglichkeit zur Deklaration der Laufvariable
- Definition eines Kriterium (logisches Ausdruck) welches bestimmt ob der Schleifenblock ausgeführt
- Ausdruck der in der Regel zur Modifikation der Laufvariable benutzt wird nachdem der Block der for-Schleife einmal durchlaufen wird.
Kommentar: Java erlaubt es in allen drei Teilen des Kopfes Ausdrücke zu programmieren die nichts miteinander zu tun haben! Dies ist exotisch, in der Regel kontraproduktiv aber syntaktisch und semantisch möglich.
- 3403 views
10. Codetransformation (while)
10. Codetransformation (while)Transformieren sie die do-while Schleife der Methode in gleichwertige while-Schleifen und for-Schleifen.
Die main(), nurWhile() und forSchleife() Methoden erlauben Ihnen das Testen der Lösung
public class CodeTrans1 { /** * main Methode ist die Testinfrastruktur. Sie ist nicht direkt relevant zum * lösen der Aufgabe * * @param args Optionen werden nicht benutzt */public static void main(String[] args) {
int b = 3;
System.out.println("Erster Durchlauf");
System.out.println("Vorgabe:");
doWhile(b);
System.out.println("nurWhile():");
nurWhile(b);
System.out.println("forSchleife():");
forSchleife(b);
System.out.println("Zweiter Durchlauf");
b = 0;
System.out.println("Vorgabe:");
doWhile(b);
System.out.println("nurWhile():");
nurWhile(b);
System.out.println("forSchleife():");
forSchleife(b);
}
/**
* Die Vorgabe der Aufgabe
* @param b
*/
public static void doWhile(int b) {
int i = 0;
String s;
if (b >= 0) { // b ist immer gößer Null!
do {
int k = i * 5;
s = (i % 2 == 0) ? "gerade" : "ungerade";
System.out.println("start():" + k + " ist " + s);
i++; // Schleifeninkrement
} while (i < b);
}
}
public static void nurWhile(int b) {
int i = 0;
String s;
if (b >= 0) { // b ist immer gößer Null!
// Hier die while Schleife implementieren
}
}
public static void forSchleife(int b) {
int i = 0;
String s;
if (b >= 0) { // b ist immer gößer Null!
// Hier die for Schleife implementieren
}
}
}
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
12 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 9: Unterschiede zwischen dowhile-Schleifen und for-, while-Schleifen
Eine do-while Schleife wird immer mindestens einmal durchlaufen. Sie ist keine abweisende Schleife.
- 4413 views
For Schleife
Fehlen bei der for-Schleife nicht die geschweiften Klammern {}?
- Log in to post comments
Gute Überlegung...
Eine for Schleife führt immer einen Block aus. Der Block kann aus mehreren Befehlen in geschweiften Klammern bestehen...
... oder aus einem einzigen Befehl. Die zweite Option wurde hier verwendet.
In solchen Fällen ist immer die Java Spezifikation zur for-Schleife als finale Authorität hinzu zuziehen. :-)
- Log in to post comments
Fibunacci Feld
Das Feld wird nicht ganz durch iteriert, oder ?
Das Feld ist k+1 lang, es wird aber nur bis k durchlaufen und Werte zugewiesen.
- Log in to post comments
Naja, schon irgendwie
Das Feld ist k+1 Elemente groß. Das erste Element steht auf Position 0 das letzte auf Position k. k ist dann auch der letzte Durchlauf der Schleife.
Die Überlegung war gut. Die Frage ist aber was geschieht mit dem Element auf Position 0?
- Log in to post comments
11. Programmablauf
11. ProgrammablaufGegeben sei das folgende Programm:
package s1.block3; public class AufgabeSwitchCase { static short k; public static void main(String[] args) { short i, k; short imax = 10; for (i = 1; i < imax; i++) { for (k = 1; k < imax; k++) { if ((k == i) || (k == (imax - i))) { System.out.print("*"); } else { System.out.print(" "); // ein Leerzeichen } } // for k switch (i) { case 1: case 2: case 3: case 4: System.out.print("LINKS"); break; case 6: case 7: case 8: case 9: System.out.print("RECHTS"); break; default: System.out.print("MITTE"); } // switch System.out.println(); //Neue Zeile } // for i } // main }
- Markieren Sie alle Schlüsselwörter
- Arbeiten Sie jetzt das Programm ab und tragen Sie die Konsolenausgaben von oben nach unten auf ein (kariertes) Blatt Papier ein.
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 8+3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu 10: Codetransformation
public class CodeTrans1 { public static void main(String[] args) { int b = 3; System.out.println("Erster Durchlauf"); System.out.println("Vorgabe:"); doWhile(b); System.out.println("nurWhile():"); nurWhile(b); System.out.println("forSchleife():"); forSchleife(b); // Zweite Testrunde System.out.println("Zweiter Durchlauf"); b = 0; System.out.println("Vorgabe:"); doWhile(b); System.out.println("nurWhile():"); nurWhile(b); System.out.println("forSchleife():"); forSchleife(b); } /** * Die Vorgabe der Aufgabe * @param b */ public static void doWhile(int b) { int i = 0; String s; if (b >= 0) { // b ist immer gößer Null! do { int k = i * 5; s = (i % 2 == 0) ? "gerade" : "ungerade"; System.out.println("start():" + k + " ist " + s); i++; // Schleifeninkrement } while (i < b); } } public static void nurWhile(int b) { int i = 0; String s; if (b >= 0) { // b ist immer gößer Null! int k = i * 5; s = (i % 2 == 0) ? "gerade" : "ungerade"; System.out.println("start():" + k + " ist " + s); i++; // Schleifeninkrement while (i < b) { k = i * 5; s = (i % 2 == 0) ? "gerade" : "ungerade"; System.out.println("start():" + k + " ist " + s); i++; // Schleifeninkrement } } } public static void forSchleife(int b) { int i = 0; String s; if (b >= 0) { // b ist immer gößer Null! int k = i * 5; s = (i % 2 == 0) ? "gerade" : "ungerade"; System.out.println("start():" + k + " ist " + s); for (i = 1; i < b; i++) { k = i * 5; s = (i % 2 == 0) ? "gerade" : "ungerade"; System.out.println("start():" + k + " ist " + s); } } } }
Ergibt die folgende Ausgabe:
Erster Durchlauf Vorgabe: start():0 ist gerade start():5 ist ungerade start():10 ist gerade nurWhile(): start():0 ist gerade start():5 ist ungerade start():10 ist gerade forSchleife(): start():0 ist gerade start():5 ist ungerade start():10 ist gerade Zweiter Durchlauf Vorgabe: start():0 ist gerade nurWhile(): start():0 ist gerade forSchleife(): start():0 ist gerade
- 3987 views
Typkonversion
Ist es gewollt, dass in der Antwort zu 1.66 bei der letzten Typkonversion weder ein Downcast, noch "//sichere Typkonversion" steht?
- Log in to post comments
12. Erweiterte (Enhanced) For-Schleife
12. Erweiterte (Enhanced) For-SchleifeWarum kann man nicht so einfach die folgende for-Schleife in eine enhanced-for Schleife umwandeln?
public static int forSchleife(int a) {//Vorgabe int ergebnis = 0; for (int i = 1; i <= a; i++) { ergebnis += i; } return ergebnis; }
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
3 Minuten |
Antwort zu Frage 11: Programmablauf
Schlüsselwörter im Programm:
public class Main2 { static short k; public static void main(String[] args) { short i, k; short imax = 10; for (i = 1; i < imax; i++) { for (k = 1; k < imax; k++) { if ((k == i) || (k == (imax - i))) { System.out.print("*"); } else { System.out.print(" "); // ein Leerzeichen } } // for k switch (i) { case 1: case 2: case 3: case 4: System.out.println("LINKS"); break; case 6: case 7: case 8: case 9: System.out.println("RECHTS"); break; default: System.out.println("MITTE"); } // switch } // for i } // main }
Konsolenausgaben des Programms
* *LINKS * * LINKS * * LINKS * * LINKS * MITTE * * RECHTS * * RECHTS * * RECHTS * *RECHTS
Antwort zu Frage 12:
Die variable i wird im Block der For-Schleife verwendet. In der Enhanced-For-Schleife gibt es aber keine Zählvariable die man verwenden könnte.
- 214 views
Fragen zu Methoden und Konstruktoren
Fragen zu Methoden und Konstruktoren javafrage Sun, 10/21/2018 - 17:44- 1694 views
1. Methoden Implementieren und Dokumentieren
1. Methoden Implementieren und DokumentierenGehen wir von einer öffentlichen Methode rechteck() aus, die a und b als Parameter übergeben bekommt und c als Rückgabewert liefert, wobei die Formel a* b = c verwendet werden soll.
- Geben Sie die Definition und Implementierung der Methode an und wählen Sie hierbei die Datentypen sinnvoll
- Geben Sie an, wie hier ein guter Dokumentationskommentar lauten sollte.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
5 Minuten für Methode 4 Minuten für Dokumentationskommentar |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
- 5745 views
Schreibfehler
Hier ist ein Schreibfehler : "4 Minuten für Dolimentationskommentar"
Sie meinten bestimmt "Dokumentationskommentar"
- Log in to post comments
2. Konstruktoren
2. KonstruktorenWarum kann man in Java nicht mehr den default Konstruktor benutzen nachdem man einen eigenen Konstruktor implementiert hat?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 1: Methoden Implementieren und Dokumentieren
/**
* Diese Methode berechnet die Flaeche eines Rechtecks
* @param a eine Seite des Rechtecks
* @param b eine Seite des Rechtecks
* @return die Fläche des Rechtecks
*/
public float rechteck(float a, float b) {
float c = a* b;
return c;
}
- 6183 views
Klassenmethode
Guten Tag,
bei Frage 1.10 sollte eine Klassenmethode implementiert werden - fehlt in der Antwort dann nicht das static?
LG
- Log in to post comments
3. Lebensdauer lokaler Variablen
3. Lebensdauer lokaler VariablenWodurch wird die Lebensdauer einer lokalen Variablen bestimmt? Was läßt sich über ihren Standard (default) Initialwert sagen?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 2: Konstruktoren
Dies ist eine Implikation des Prinzips der Datenkapselung. Eine Klasse mit einem selbst implementierten Konstruktor soll keine Möglichkeit mehr bieten diesen Konstruktor zum Umgehen. Nur das Sperren des default Konstruktors kann garantieren, dass die Klasse im Sinne des Entwicklers initialisiert wird.
- 4959 views
4. Implementierung einer Methode
4. Implementierung einer MethodeImplementieren Sie eine Methode nach den folgenden Vorgaben:
- Die Methode ist öffentlich und statisch. Sie kann ohne die Existenz eines Objekts aufgerufen werden.
- Methodenname ist „quaderVolumen“
- Eingaben sind die drei Seiten eines Quaders. Wählen Sie die Parameternamen a,b,c
- Ausgabe ist das Volumen des Quaders
- Der Rückgabewert ist das Volumen des Quader. v=a*b*c (Produkt der drei Seitenlängen)
- Geben Sie den Wert 0 zurück, falls eine oder mehrere Seiten negative Eingabewerte besitzen
- Wählen Sie sinnvolle Typen für die Ein- und Ausgabeparameter
Hinweis: Achten Sie auf die Syntax!
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 7 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 3 : Lebensdauer lokaler Variablen
Durch den Block in dem sie definiert sind. Sie werden nach Verlassen des Blocks gelöscht. Die Variablen werden bei der Deklaration auf dem Stack (Stapel) angelegt. Nach Verlassen des Blocks werden alle Variablen des Blocks wieder vom Stack (Stapel) genommen und gelöscht.
Sie müssen vom Entwickler initialisiert werden.
- 4919 views
5. Syntax des Methodenkopf in Java
5. Syntax des Methodenkopf in JavaNennen Sie drei Bestandteile eines Methodenkopfes. Beschreiben Sie die jeweilige Funktion in Stichworten.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 4: Implementierung einer Methode
public static double quaderVolumen(double a, double b, double c) {
double v = 0.0;
if ((a>0) && (b>0) && (c>0))
v = a*b*c;
return v;
}
- 5812 views
or statt and
muss es in der if verzweigung nicht if ((a>0) || (b>0) || (c>0)) heißen, da es in der Aufgabenstellung ja heißt wenn einer der Werte kleiner null ist
- Log in to post comments
Hmm
Interessante Frage. Hier gilt der Satz von de Morgan. Wenn "einer kleiner Null ist, dann nicht" ist eine implizite Oder Verknüpfung. Nach de Morgan habe ich implementiert "alle größer Null, dann". Man kann das also auch mit Oder implementieren,
- Log in to post comments
alle größer Null, dann
Geben Sie den Wert 0 zurück, falls eine oder mehrere Seiten negative Eingabewerte besitzen:
Dann ist in diesem Fall aber die Aufgabenstellung nicht korrekt oder ?
Da mit der Implementierung mit AND davon ausgegangen wird das alle Werte 0 sein müssen.
- Log in to post comments
6. Überladene Methoden
6. Überladene MethodenJava kennt überladene sowie überschriebene Methoden. Woran erkennt man überladene Methoden?
- Geben Sie eine kurze Erklärung
- Geben Sie ein Beispiel zweier überladener Methoden. Wichtig:
- benötigte Klasse bzw. Klassen
- benötigte Methoden (Name, Signatur etc). Methodenrümpfe sind nicht wichtig. Kürzen Sie sie mit {…} ab
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 8 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 5: Bestandteile des Methodenkopfs
- Rückgabewert: Ein Typ oder void (keine Rückgabe) die ein Ergebnis der Methode ausgibt
- Name: gültiger Javabezeichner
- Eingabeparameterliste: Eine Komma separierte Liste von Variablen die einer Methode als Eingabewerte mit gegeben werden können
- Modifizierer: Zugriffsrechte auf eine Methode
- 4919 views
Frage 1.40
Bei der Methode setAtt fehlt zum schließen der Methode noch eine geschweifte Klammer, bevor die getAtt Methode beginnt.
- Log in to post comments
7. Implementieren und Dokumentieren einer Methode einsteigen()
7. Implementieren und Dokumentieren einer Methode einsteigen()Implementieren Sie die Methode einsteigen(int p) für die Klasse Flugzeug.
Die Methode einsteigen() soll die folgenden Eigenschaften haben:
- öffentlich ausserhalb des Pakets zugreifbar
- Angabe der Anzahl der Passagiere die zusteigen als Eingabeparameter
- Prüfung auf nicht negative Passagieranzahl.
- Bei negativem Wert der zusteigenden Passagiere wird die aktuelle Anzahl nicht modifiziert.
- Erhöhen der Objektvariblen passagiere um die Anzahl der zugestiegenen Passagiere
- Rückgabe der neuen Gesamtanzahl aller Passagiere.
Schreiben Sie einen Dokumentationskommentar für die Methode einsteigen().
- Achten Sie auf die Notation von
- Syntax des Dokumentationskommentars
- Beschreibung der Methode mit einem vernünftigen Satz
- Dokumentation der Eingabewerte
- Dokumentation des Ausgabewerts
Tipp: Was kommt zuerst: Methode oder Dokumentation?
public class Flugzeug { private int passagiere; // Ab hier Dokumentationskommentar und Methode implementieren } // Ende der Klasse Flugzeug
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 6 (Methode) +4 (Dokumentation) Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 6: Überladene Methoden
Eine Methode überlädt eine Methode der gleichen Klasse wenn sie den gleichen Namen aber unterschiedliche Eingabeparameter hat. Eingabeparameter sind unterschiedlich wenn sie eine unterschiedliche Anzahl von Parametern oder eine unterschiedliche Reihenfolge der Typen haben. Die Namen der Parameter spielen keine Rolle.
Anmerkung: Das Prinzip gilt auch über Vererbungshierarchien hinweg.
Beispiel
public class Ober {
public void print() {…}
public void print(int i) {...} }
- 4320 views
8. Rekursive Methoden
8. Rekursive MethodenWelche zwei Kommandozeilenausgaben erzeugt das Programm?
Was berechnet das Programm in der Methode?
Das Programm Test nutzt die main() Methode zum Testen der Methode berechneRekursiv() mit den Werten 9 und 89.
public class Test { /** * Hauptprogramm: Nur zum Testen * @param args */ public static void main(String[] args) { int eingabe; int erg; eingabe = 9; erg = berechneRekursiv(eingabe); System.out.println(eingabe + " : " + erg); eingabe = 89; erg = berechneRekursiv(eingabe); System.out.println(eingabe + " : " + erg); } /** * Diese Methode berechnet die/der/das ? der Eingabe * * @param eing : Eingabewert * @return a Ergebnis ist die ? */ static private int berechneRekursiv(int eing) { int a; if (eing == 0) a = 0; //Beende Rekursion else { // a ist größer als Null. Fahre mit Rekursion fort a = eing%10; a= a + berechneRekursiv(eing/10); } return a; } }
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 4+2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 7: Implementieren und Dokumentieren einer Methode einsteigen()
public class Flugzeug { private int passagiere; // Ab hier Dokumentationskommentar und Methode implementieren /** * diese Methode lässt Passagiere einsteigen. Die Anzahl der * Passagiere erhöht sich um den Wert p. Der Wert p muss positiv sein. * @param p Anzahl der Passagiere die zusteigen * @return neue Anzahl der Passagiere */ public int einsteigen(int p) { if (p>0) passagiere += p; return passagiere; } } // Ende der Klasse Flugzeug
- 4371 views
Anforderungen an einen Algorithmus
Beschreiben "2." und "4." nicht die gleichen Anforderungen?
Wenn ein Algorithmus terminiert hat er doch automatisch endlich viele Teilschritte, nicht?
Hätte er unendlich viele Teilschritte, dann würde er doch nicht terminieren.
Oder irre ich mich?
- Log in to post comments
9. Syntax eines Methodenkopf
9. Syntax eines MethodenkopfBeschreiben Sie die Bestandteile des Methodenkopfs der vorherigen Aufgabe:
static private int berechneRekursiv(int eing) {...}
Nennen Sie den Namen des Bestandteils und die Bedeutung für die Methode
- static
- private
- int
- berechneRekursiv
- (int eing)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 10 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 8: Rekursive Methoden
Die Kommandozeilenausgaben sind:
9 : 9 89 : 17
Das Programm berechnet die Quersumme.
- 4320 views
10. Transformation einer rekursiven Methode in eine iterative Methode
10. Transformation einer rekursiven Methode in eine iterative MethodeImplementieren sie die Methode berechne() die das gleiche Ergebnis wie Methode berechneRekursiv() liefert.
Die Methode berechne() soll
- iterativ sein und
- eine while Schleife implementieren
/** * Diese Methode berechnet die Quersumme der Eingabe * * @param eing : Eingabewert * @return a Ergebnis ist die ? */ static private int berechneRekursiv(int eing) { int a; if (eing == 0) a = 0; //Beende Rekursion else { // eing ist größer als Null. Fahre mit Rekursion fort a = eing%10; a= a + berechneRekursiv(eing/10); } return a; }
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 6 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 9: Syntax eines Methodenkopf
Methodenkopf
|
Name des Bestandteils
|
Bedeutung für diese Methode
|
private | Modifier |
Die Methode ist nur innerhalb der Klasse aufrufbar
|
static | Modifier |
Die Methode darf auch ohne Objektkontext verwendet werden
|
int
|
Rückgabewert |
Ergebnis der Methode
|
berechneRekursiv
|
Methodenname |
Name der Methode
|
(int eing) | Formalparameter |
Übergabeparameter für die Methode
|
- 3990 views
11. Vergleich der Syntax von Konstruktoren und normalen Methoden
11. Vergleich der Syntax von Konstruktoren und normalen MethodenWie unterscheidet sich die Syntax eines Konstruktorkopf vom Kopf einer normalen Methode?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 10: Transformation einer rekursiven Methode in eine iterative Methode
/** * Diese Methode berechnet die Quersumme der Eingabe iterativ * * @param eing : Eingabewert * @return a Ergebnis ist die ? */ static private int berechne(int eing) { int a = 0; while (eing != 0) { a = a+ eing%10; eing/= 10; } return a; }
- 4562 views
Fehler?
Ist Ihnen in der while Schleife nicht einiges durcheinander geraten? Warum soll a+eing%10 auf a zugewiesen werden? Das a hat zu diesem Zeitpunkt doch keinen Wert, also bringt es nichts, es zu addieren oder?
der Befehl danach: eing/=10; scheint mir genauso fragwürdig zu sein. Er ändert ja nichts an a und schließlich wird ja a zurück gegeben. Ich bezweifle, dass diese Methode die gleichen Ergebnisse liefert. Müsste es nicht so sein?
while (eing > 0) {
a=eing%10;
a=a+eing/10;
}
return a;
}
Gruß von einem Studenten der sein Leben in Bezug auf Java nicht im Griff hat (hoffentlich hatte).
- Log in to post comments
Antwort
Willkommen im Club derer die Java nicht voll im Griff haben. Ich hatte auch schon Meetings mit Spec. Leads von Java die nicht mehr weiter wussten. Das geht uns allen so.
Der Befehl
eing/=10;
macht das gleiche wie der Befehl
eing = eing/10;
damit funktioniert das hoffentlich
- Log in to post comments
Fehler beim Transformieren ?
Bei der rekursiven Methode muss doch der Wert von eing nicht unbedingt über 0 sein, er darf doch lediglich nicht 0 sein.
Bei der iterativen Methode werden von while(eing>0) aber doch alle negativen Werte ausgeschlossen.
- Log in to post comments
12. Dokumentationskommentare und Datenkapselung
12. Dokumentationskommentare und DatenkapselungDie Klasse Flugzeug besitzt ein Attribute passagiere zur Verwaltung der aktuellen Passagieranzahl und eine Konstante MAX_PASSAGIERE.
- Schützen Sie die aktuelle Anzahl der Passagiere mit einem Modifizierer so, dass man nur noch mit Methoden der Klasse Flugzeug auf dieses Attribut zugreifen kann. Tragen Sie den Modifizierer in den Quellcode an die richtige Stelle ein.
- Die maximale Anzahl der Passagiere soll unveränderlich sein. Wählen Sie einen geeigneten Modifizierer und tragen Sie ihn im Quellcode ein.
- Implementieren Sie eine Methode einsteigen().
- Die Methode soll mit einem Eingabeparameter n Passagiere einsteigen lassen.
- Sie gibt die Anzahl der Passagiere nach dem Einsteigen als Ergebnis zurück.
- Sie verändert die Anzahl der Passagiere nicht, falls nach dem Einstiegen die maximale Kapazität (MAX_PASSAGIERE) überschritten ist.
- Die Methode soll auch aus anderen Paketen aufrufbar sein .
- Erstellen Sie einen Dokumentationskommentar, der die Methode und die Ein- und Ausgabeparameter dokumentiert,
public class Flugzeug { int passagiere; int MAX_PASSAGIERE; // Ab hier Methode und Dokumentationskommentar implementieren } // Ende der Klasse Flugzeug
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 11 Minuten (1+1+5+4) |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 11: Vergleich der Syntax von Konstruktoren und normalen Methoden
- Ein Konstruktor hat keinen Rückgabewert
- Der Name eines Konstruktors ist immer identisch mit dem der Klasse
Antwort zu Frage 12: Dokumentationskommentare und Datenkapselung
public class Flugzeug { private int passagiere; final int MAX_PASSAGIERE; /** * n Passagiere steigen in ein Flugzeug ein. Bei Überschreiten * der maximalen Kapazität wird allen Passagieren der Zutritt * verwehrt * @param n Anzahl der zusteigenden Passagiere * @return Anzahl der Passagiere nach dem Zusteigen */ public int einsteige(int n) { if (MAX_PASSAGIERE>=passagiere+n) passagiere +=n; return passagiere; } }
- 4583 views
Import Befehl
Müsste der Import Befehl in Klasse 1a nicht "import Paket2.*" lauten?
- Log in to post comments
13. Implementieren eine Klasse (Pakete, Konstruktoren, Datenkapselung, Methoden)
13. Implementieren eine Klasse (Pakete, Konstruktoren, Datenkapselung, Methoden)Implementieren Sie unten eine vollständige Javaklasse die den folgenden Bedingungen genügt:
- Die Klasse liegt im Paket Paket1 (1 Min.)
- Der Name der Klasse ist Student (1 Min.)
- Die Klasse Student ist von jeder anderen Klasse benutzbar (1 Min.)
- Die Klasse Student wird aus der Klasse Person spezialisiert (1 Min.)
- Die Klasse Person befindet sich in Paket Paket2
- Die Klasse Student hat die folgenden Attribute:
- universitaet: privater Zeiger auf die Klasse Adresse aus dem Paket Paket2 (1 Min.)
- name: öffentliche Zeichenkette (1 Min.)
- Klasse Student hat einen öffentlichen Konstruktor(1 Min.)
- Der Konstruktor hat keine Argumente
- Das Attribut name wird auf „Rühmann“ im Konstruktor initialisert (1 Min.)
- Die Klasse Student hat öffentliche „Getter“ und eine „Setter“ Methoden zum Pflegen der Adresse (4 Min.)
- Die Klasse Student verfügt über alle Importdeklaration damit sie übersetzt (2 Min.)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 14 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
- 4516 views
14 Unterscheidung überladener Methoden
14 Unterscheidung überladener MethodenErklären Sie, woran überladene Methoden mit gleichem Namen unterschieden werden.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 13: Implementieren eine Klasse (Pakete, Konstruktoren, Datenkapselung, Methoden)
package Paket1; import Paket2.Adresse; import Paket2.Person; public class Student extends Person { private Adresse unversitaet; public String name; public Student() { name = "Rühmann"; } public Adresse getUnversitaet() { return unversitaet; } public void setUnversitaet(Adresse unversitaet) { this.unversitaet = unversitaet; } }
- 4396 views
15. new Operator
15. new OperatorWelche beiden Typen von Datenstrukturen können mit dem new Operator angelegt werden?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 14: Unterscheidung überladener Methoden
Anhand der Anzahl der Parameter und ihrer Typen abhängig von ihrer Reihenfolge. Die Variablennamen der Übergabeparameter spielen keine Rolle bei der Unterscheidung.
Der Typ des Rückgabeparameters wird nicht zur Unterscheidung verwendet.
- 4417 views
16. Wo werden Datenstrukturen mit dem new Operator angelegt?
16. Wo werden Datenstrukturen mit dem new Operator angelegt?In welchem Speicherbereich liegen alle Datenstrukturen, die mit dem new Operator angelegt wurden?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 15: new Operator
- Felder von Basistypen oder Objekten
- Objekte (das heißt Instanzen von Klassen)
- 4039 views
17. Konstruktoraufrufe in Konstruktoren (Abfolge)
17. Konstruktoraufrufe in Konstruktoren (Abfolge)An welcher Stelle im Konstruktor kann man andere Konstruktoren aufrufen und warum müssen andere Konstruktoraufrufe an dieser Stelle aufgerufen werde. Geben Sie eine kurze Begründung.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 16: Wo werden Datenstrukturen mit dem new Operator angelegt?
Auf dem Heap, dem Freispeicher. Sie werden dort solange gehalten wie sie referenziert werden. Anschließend werden sie von einen Garbagekollektor gelöscht.
Antwort zu Frage 17: Konstruktoraufrufe in Konstruktoren (Abfolge)
Man kann andere Konstruktoren nur als ersten Befehl aufrufen.
Damit wird garantiert, dass der aufgerufene Konstruktor auf einem nicht modifizierten Objekt ausgeführt werden kann.
- 3608 views
Fragen zu Konzepten objektorientierter Programmierung
Fragen zu Konzepten objektorientierter Programmierung javafrage Sun, 11/11/2018 - 10:52- 1584 views
1. Der Modifizierer "static" in Javamethoden
1. Der Modifizierer "static" in JavamethodenWarum werden Methoden bei Bedarf mit dem Modifizierer static gekennzeichnet?
Nennen sie eine bekannte static Methode aus dem Java API
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
4 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
- 5578 views
2. Anzahl von Instanzen (Objekte) erkennen
2. Anzahl von Instanzen (Objekte) erkennenEin Javaprogramm wird für die Klasse B gestartet. Die Klasse B verwendet in ihrer main() Methode und methode1() Methode Instanzen der Klasse B:
class B { public static void main(String[] args) { B var1 = new B(); B var2 = methode1(var1); } public static B methode1(B para1) { B var3 = para1; System.out.println(var3); para1 = null; B var4 = para1; return var3; } }
Wieviele Instanzen der Klasse B werden im Verlauf des Programmes erzeugt und woran erkennen Sie das?
Welche Referenzvariablen (Objektvariablen) zeigen im Laufe des Programms (zumindest temporär) auf Instanzen der Klasse B?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
4 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 1: Der Modifizierer "static" in Javamethoden
Damit man sie auch ohne die Existenz von Instanzen (Objekten) der entsprechenden Klasse aufrufen kann.
Die Methode public static void main(String[] args) zum Starten eines Hauptprogramms.
- 6158 views
3. Konstruktoren, Abfolge
3. Konstruktoren, AbfolgeDie main() Methode der Klasse Unterklasse erzeugt eine Instanz der Klasse Unterklasse. Verfolgen Sie den Ablauf des Programms welches mit dem Befehl
java Unterklasse
gestartet wird. Numerieren sie alle aufgerufenen Ausgaben (System.out.println) in der aufgerufenen Reihenfolge durch.
Der erste Aufruf im Befehl:
System.out.println("Start"); // 1
ist bereits als Hilfe dokumentiert. Fahren sie mit „// 2“ etc. hinter dem Quelltext fort
public class Oberklasse { public Oberklasse () { System.out.println("Oberklasse-ohne-parameter"); } public Oberklasse (String text) { this(); System.out.println("Oberklasse-mit-String"); } } public class Unterklasse extends Oberklasse { public Unterklasse (int zahl) { super ("Hallo"); System.out.println("Unterklasse-mit-int"); } public Unterklasse () { System.out.println("Unterklasse-ohne-Parameter"); } public static void main(String[] args) {
System.out.println("Start"); // 1
Unterklasse u = new Unterklasse(8);
}
}
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
4 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 2: Anzahl von Instanzen(Objekten) erkennen
Wieviele Instanzen der Klasse B werden im Verlauf des Programmes erzeugt und woran erkennen Sie das?
- Es wurde ein Objekt erzeugt.
- Man erkennt es am new Operator. Nur durch Aufrufe des new Operators werden Objekte erzeugt,
Welche Referenzvariablen (Objektvariablen) zeigen im Laufe des Programms (zumindest temporär) auf Instanzen der Klasse B?
- var1, para1, var3, var2
- 6148 views
diese Aufgabe ist bei der
diese Aufgabe ist bei der Lernzielkontrolle zu Kapitel 6 aufgeführt.
Ist sie zu diesem Zeitpunkt wirklich schon lösbar? Ohne zu wissen, wie "extends" funktioniert ist der Ablauf doch nicht nachvollziehbar, oder?
- Log in to post comments
4. Schlüsselwort this
4. Schlüsselwort thisWozu verwendet man in Java das Schlüsselwort this? Geben Sie eine kurze Erklärung.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 3: Konstruktoren
public class Oberklasse {
public Oberklasse () {
System.out.println("Oberklasse-ohne-parameter"); // 2
} public Oberklasse (String text) { this(); System.out.println("Oberklasse-mit-String"); // 3 } } public class Unterklasse extends Oberklasse { public Unterklasse (int zahl) { super ("Hallo"); System.out.println("Unterklasse-mit-int"); // 4 } public Unterklasse () { System.out.println("Unterklasse-ohne-Parameter"); } public static void main(String[] args) { System.out.println("Start"); // 1 Unterklasse u = new Unterklasse(8); } }
- 7476 views
Antwort zu Frage
Eine genauere Erläuterung der Antwort der Frage wäre zum Verständnis hilfreich, z.B. wieso der Konstruktor der Oberklasse aufgerufen wird, aber nicht der der Unterklasse.
Ebenso die Ablaufreihenfolge des Programms, ob sich ein Programm immer von oben nach unten durcharbeitet, nachdem die Main-Methode ausgeführt wurde, oder ob es sich danach von Oberklasse nach Unterklasse durcharbeitet.
- Log in to post comments
5. Konstruktoren und Datenkapselung
5. Konstruktoren und DatenkapselungWarum sind Konstruktoren hilfreich wenn man Datenkapselung (Information Hiding) implementieren möchte?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 4: Schlüsselwort this
Zum Referenzieren des Objekts dessen Methode gerade ausgeführt wird oder zum Aufruf eines Konstruktors der gleichen Klasse
- 5660 views
Aufgabe 1.14 Syntaxfehler
Bei der Deklaration von s2 haben sie ein ";" zu viel verwendet.
- Log in to post comments
6. Anwendung der Datenkapselung in Java
6. Anwendung der Datenkapselung in JavaGegeben sei eine Klasse Test mit einem öffentlichen Attribut att vom Typ int.
public class Test { public int att; }
Implementieren Sie die Klasse neu und wenden Sie das Prinzip der Datenkapselung auf das Attribut att an.
Schützen Sie das Attribut att mit denen in Java zur Verfügung stehenden Mitteln. Stellen Sie sicher, dass das Attribut nie eine negative Belegung hat.
Hinweis: Der Benutzer muss bei Fehleingaben nicht benachrichtigt werden. Setzen Sie den Wert bei Fehleingaben nicht. Es muss kein Konstruktor implementiert werden.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 6 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 5: Konstruktoren und Datenkapselung
Mit Konstruktoren kann man eine bestimmte Initialisierung von privaten (d.h. gekapselten) Attributen erzwingen.
- 5439 views
7. Nutzen von Konstruktoren
7. Nutzen von KonstruktorenWozu sind Konstruktoren in Java nützlich?
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 6: Datenkapselung in Java
public class Test { private int att; public int get_att() {return att;} public void set_att(int a) { if (a>=0) att=a; } }
- 4447 views
8. Syntax Konstruktorkopf
8. Syntax KonstruktorkopfWie unterscheidet sich die Syntax eines Konstruktorkopf vom Kopf einer normalen Methode?
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 7.: Nutzen von Konstruktoren
Konstruktoren erlauben das Implementieren von Datenkapselung. Objekte können so mit einem definierten konsistenten Ausgangszustand erzeugt werden.
- 4359 views
9. Schlüsselwort private in Konstruktoren
9. Schlüsselwort private in KonstruktorenWas bedeutet es, wenn man alle Konstruktoren einer Klasse mit dem Modifzierer „private“ versieht?
Wie kann man eine solche Klasse noch nutzen?
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 8.: Syntax Konstruktorkopf
- Konstruktoren haben keinen Platz für Rückgabeparameter in der Syntax.
- Sie haben auch kein void Schlüsselwort als Rückgabeparameter. Der Rückgabeparameter fehlt in der Syntax.
- Der Grund:
- Konstruktoren werden immer nur vom new Operator aufgerufen.
- Der new Operator reicht zwar die Eingabeparameter weiter. Er kann aber nicht eine beliebige Rückgabe auswerten.
- Der Name eines Konstruktors ist immer identisch mit dem Namen der Klasse. Man kann ihn nicht frei wählen wie bei einer Methode.
- 4342 views
10. Aufruf von Konstruktoren der gleichen Klasse
10. Aufruf von Konstruktoren der gleichen KlasseMit welchem Schlüsselwort kann man in Java aus einen Konstruktor einen anderen Konstruktor der gleichen Klasse aufrufen?
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 1 Minute |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 9.: Schlüsselwort private in Konstruktoren
Andere Klassen können keine Objekte dieser Klasse erzeugen. Objekte können nur von der Klasse selbst erzeugt werden.
Man kann die Objekterzeugung einer statischen, öffentlichen Methode der gleichen Klasse überlassen um ein Designpattern wie ein Singleton oder eine Factory zu implementieren.
- 4898 views
11. Implementieren eines Konstruktors der einen anderen Konstruktor der gleichen Klasse aufruft
11. Implementieren eines Konstruktors der einen anderen Konstruktor der gleichen Klasse aufruftImplementieren Sie in Java einen rekursiven Konstruktor zum Erzeugen gleichseitiger Dreiecke in der Klasse Dreieck.
Nutzen Sie den existierenden Konstruktor bei dem drei unterschiedliche Seiten erfasst werden.
Der Kopf des rekursiven Konstruktor für gleichseitige Dreiecke ist gegeben.
Implementieren Sie einen Rumpf der ein gleichseitiges Dreieck implementiert und den existierenden Konstruktor nutzt.
public class Dreieck { double seite1; double seite2; double seite3; /** Erzeugen eines Dreiecks mit drei unterschiedlichen Seiten */ public Dreieck (double a, double b, double c) { seite1= a; seite2= b; seite3= c; } /** Erzeugen eines gleichseitigen Dreiecks */ public Dreieck(double a) { /* Hier die Implementierung eintragen */ }// Ende Konstruktor }// Ende der Klasse
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 10.: Aufruf von Konstruktoren der gleichen Klasse
Das Schlüsselwort this.
- 5938 views
12. Aufrufe von Konstruktoren in Konstruktoren (Schlüsselworte)
12. Aufrufe von Konstruktoren in Konstruktoren (Schlüsselworte)Beim Implementieren von Konstruktoren müssen eventuell andere Konstruktoren aufgerufen werden. Hierzu gibt es zwei Schlüsselwörter. Nennen Sie die Schlüsselwörter und beschreiben Sie ihre Verwendungszwecke in diesem Kontext.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 11: Implementieren eines Konstruktors der einen anderen Konstruktor der gleichen Klasse aufruft
public class Dreieck { double seite1; double seite2; double seite3; /** Erzeugen eines Dreiecks mit drei unterschiedlichen Seiten */ public Dreieck (double a, double b, double c) { seite1= a; seite2= b; seite3= c; } /** Erzeugen eines gleichseitigen Dreiecks */ public Dreieck(double a) { this (a,a,a); }// Ende Konstruktor }// Ende der Klasse
- 3313 views
13. Instanzvariablen und Klassenvariablen
13. Instanzvariablen und KlassenvariablenWie unterscheiden sich die Lebensdauer von Instanzvariablen und Klassenvariablen (Schlüsselwort static)?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 12: Aufrufe von Konstruktoren in Konstruktoren (Schlüsselworte)
- this: Erlaubt den Aufruf anderer Konstruktoren der gleichen Klasse
- super: Erlaubt den Aufruf von Konstruktoren der Oberklasse
Antwort zu Frage 13: Instanzvariablen und Klassenvariablen
Klassenvariablen sind über die gesamte Lebensdauer der Klasse definiert
Instanzvariablen sind von der Lebensdauer der zugehörigen Objekte(Instanzen) abhängig.
- 4611 views
Antwort zu 1.21: Lebensdauer lokaler Variablen
"Sie werden mit Nullwerten belegt." stimmt das so?
lokale Variablen müssen doch normalerweise initialisiert werden, da sie keinen default Wert erhalten?
Habe es in eclipse ausprobiert, der Compiler meckert, wenn ich lokale Variablen nicht initialisere.
Vielen Dank
Viele Grüße
- Log in to post comments
Im Prinzip, ja
Man musse hier zwischen Klassen und lokalen Variablen unterscheiden.
In der Java Spezifikation 4.12.5. Initial Values of Variables steht, dass Klassenvariablen mit einem Defaultwert initialisiert werden. Lokale Variablen müssen vom Entwickler initialisert werden.
Ich werde die Klausuraufgabe genauer spezifizieren.
- Log in to post comments
Fragen zu Paketen
Fragen zu PaketenFragen zu Paketen in anderen Kategorien:
- Implementieren einer Klasse (Pakete, Konstruktoren, Datenkapselung, Methoden) (enthält auch Teilfragen anderer Bereiche)
- 1269 views
1. Pakete und Sichtbarkeit von Klassen und Methoden
1. Pakete und Sichtbarkeit von Klassen und MethodenDie unten aufgeführten Klassen befinden sich in unterschiedlichen Paketen.
- Fügen Sie in die Klassen des Pakets Paket1 die minimal benötigten Modifizierer ein, die für das Paket Paket2 und das Paket Paket3 benötigt werden
- Fügen Sie im Quellcode der Klassen KlasseAC und KlasseABD alle benötigten Befehle zur Benutzung der Klassen im Paket Paket1 ein.
Der Befehl String s = aa.print(); in der Klasse KlasseABD ist auch trotz korrekter Import-kommandos nicht übersetzbar. Änderen Sie einen der gegebenen Methoden-modifizierer so, dass das Kommando übersetzbar wird. Ändern Sie keine Modfizierer von Klassen oder Paketzugehörigkeiten!
Fügen Sie alle Änderungen direkt im Quellcode ein.
Datei: KlasseA.java:
package Paket1; Datei KlasseAA.java: package Paket1; Datei KlasseAB.java: package Paket1; |
|
Datei KlasseAC.java:
package Paket2; |
Datei Klasse KlasseABD.java:
package Paket3; class KlasseABD extends KlasseAB{ |
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 7 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
- 5428 views
Überschreiben
Laut der Oracle Java Documentation überschreibt eine Methode einer Unterklasse die Methode einer Oberklasse, wenn
a) sie die gleiche Signatur (Name und Parameterliste) hat,
b) sie den gleichen Rückgabetyp hat,
c) die überschriebene Methode nicht statisch ist ("hiding"),
d) die Zugriffsmodifikatoren der Methode der Unterklasse nicht beschränkender als die der Oberklasse sind.
Quelle: "Overriding and Hiding Methods", Oracle Java Documentation
- Log in to post comments
2. Pakete und Schutz von Variablen
2. Pakete und Schutz von VariablenErgänzen Sie die folgenden Pakete mit den notwendigen Importkommandos:
Das Paket Paket1 ist gegeben mit der Klasse Klasse1a.
Das Paket Paket2 ist gegeben mit den Klassen Klasse2a und Klasse2b.
- Fügen Sie in der Klasse Klasse1a genau einen expliziten Importbefehl ein, der Ihnen erlaubt alle Klassen des Paket2 zu verwenden.
- Fügen Sie in der Klasse Klasse2a einen expliziten Importbefehle ein, der Ihnen nur die Benutzung der Klasses1a erlaubt.
- Fügen Sie in der Klasse Klasse2b einen impliziten Import ein, der Ihnen nur erlaubt die Klasse Klasse1a im Attribut v1 zu verwenden.
- Fügen Sie in der Klasse2a einen Modifizierer ein, der es erlaubt, das Attribut a in der Klasse Klasse1a zu verwenden. Die geschieht in der Methode test() Fügen Sie alle nötigen Befehle direkt im Quellcode ein.
Klasse1a.java:
package Paket1; public class Klasse1a { Klasse1a v1; Klasse2a v2; Klasse2b v3; void test(Klasse2a obj) { obj.a = 17; } }
Klasse2a.java
package Paket2; class Klasse2a { Klasse1a v1; Klasse2a v2; Klasse2b v3; int a; }
Klasse2b.java
package Paket2; public class Klasse2b { Klasse1a v1; Klasse2a v2; Klasse2b v3; }
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 8 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 1 : Pakete und Sichtbarkeit von Klassen und Methoden
Die notwendigen Änderungen sind fett gedruckt. Bzw. mit horizontaler Linie durchgestrichen.
Datei: KlasseA.java:
package Paket1; Datei KlasseAA.java: package Paket1; Datei KlasseAB.java: package Paket1; |
|
Datei KlasseAC.java:
package Paket2; |
Datei Klasse KlasseABD.java:
package Paket3; import Paket1.KlasseAB; import Paket1.KlasseA; class KlasseABD extends KlasseAB{ |
- 4629 views
Antwort in Aufgabe
Die Antwort für die 4. Teilaufgabe steht schon im Quellcode der Frage.
- Log in to post comments
Lösungen
Zu Punkt 4 der Aufgabe: "Fügen Sie in der Klasse2a einen Modifizierer ein, der es erlaubt, das Attribut a in der Klasse Klasse1a zu verwenden. Die geschieht in der Methode test() Fügen Sie alle nötigen Befehle direkt im Quellcode ein."
Im Quellcode in der Aufgabe ist das Attribut bereits public oder war danach nicht gefragt? Ich erkenne hier keinen Unterschied zur Musterlösung.
- Log in to post comments
Falls ich hier etwas nicht
Falls ich hier etwas nicht komplett missverstehe, ist die Lösung der 4. Teilaufgabe weiterhin bereits vorgegeben: "public int a;"
Außerdem: Nach dem Skript dachte ich, dass die Lösung der erste Teilaufgabe eigentlich "import Paket2.*;" sein müsste (expliziter Import aller Klasse aus Paket2).
In der Lösung heißt es aber nur "import Paket2;" ohne Stern.
Wo ist mein Denkfehler?
Danke
- Log in to post comments
3. Verschiedene Arten der Importdeklaration
3. Verschiedene Arten der ImportdeklarationJava verfügt über zwei Arten Klassen anderer Pakete zu importieren. Nennen Sie die beiden Importverfahren und geben Sie eine Begründung wann der Entwickler welches Verfahren anwenden sollte.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 2.: Pakete und Schutz von Variablen
Klasse1a.java:
package Paket1; import Paket2.*; public class Klasse1a { Klasse1a v1; Klasse2a v2; Klasse2b v3; void test(Klasse2a obj) { obj.a = 17; } }
Klasse2a.java
package Paket2; import Paket1.Klasse1a; public class Klasse2a { Klasse1a v1; Klasse2a v2; Klasse2b v3; public int a; }
Klasse2b.java
package Paket2; public class Klasse2b { Paket1.Klasse1a v1; Klasse2a v2; Klasse2b v3; }
- 3652 views
man kommt zwar auch anders
man kommt zwar auch anders zur Antwort, aber hier fehlt der Direktlink unten rechts
- Log in to post comments
4. Klassen importieren ohne Schlüsselwort
4. Klassen importieren ohne SchlüsselwortBei welchem der beiden Importverfahren benötigt man kein Schlüsselwort und warum?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 3: Verschiedene Arten der Importdeklaration
- Expliziter Import: Zu importierende Klassen werden am Anfang einer Klasse importiert. Die importierten Klassennamen können dann ohne das vorangestellte Paket benutzt werden. Dies ist nützlich wenn man die Klassen an mehreren Stellen verwendet. Es ist weniger Schreibarbeit nötig.
- Impliziter Import: Die Klasse wird mit ihrem Paket vollständig bei der Benutzung genannt. Dies ist weniger Schreibarbeit wenn man die zu importierende Klasse nur einmal benutzen muss. Ein impliziter Import kann auch nötig sein falls zwei Klassen mit dem gleichen Namen aus verschiedenen Paketen benutzt werden müssen. Man kann so beschreiben welche der beiden Klassen benutzt werden soll.
- 3577 views
5. Pakete, Importdeklarationen
5. Pakete, ImportdeklarationenDie Klasse Strecke aus dem Paket Nahe (Datei 3) soll die beiden Referenzvariablen anfang und ende vom Typ Punkt verwenden. Die beiden Referenzvariablen anfang und ende sollen aber die Implementierung eines Punktes aus dem Paket Entfernt (Datei 1) verwenden und nicht die Implementierung aus dem gleichen Paket (Datei 2).
Die genaue Typdeklaration der beiden Variablen anfang und ende fehlt in Datei 3. Fügen Sie die korrekte Typbezeichnung ein.
Es gibt zwei unterschiedliche Möglichkeiten den Import der Klasse Entfernt.Punkt in der Klasse Nahe.Strecke (Datei 3) zu deklarieren.
Fügen Sie in den unten aufgeführten Quellcode die beiden Möglichkeiten des Imports in Datei 3 ein:
Importmöglichkeit 1 | Importmöglichkeit 2 |
Datei 1:
package Entfernt; public class Punkt { ... } Datei 2: package Nahe; public class Punkt { ...} Datei 3: package Nahe; public class Strecke { |
Datei 1:
package Entfernt; public class Punkt { ... } Datei 2: package Nahe; public class Punkt { ...} Datei 3: package Nahe; public class Strecke { |
Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Antwort zu Frage 4: Klassen importieren ohne Schlüsselwort
Beim impliziten Import. Man gibt bei der Benennung des Typs alle Pakete mit an. Bespiel:
Paket1.Person p = new Paket1.Person();
- 4866 views
Fehlender Objektname?
Fehlt hier in der letzten Zeile nicht ein Name für das neue Objekt? Wie referenzieren wir sonst unser Paket1.Person Objekt?
- Log in to post comments
Antwort zu Frage 5.
Antwort zu Frage 5.Erstmal nur eine Antwort
Frage 5: Pakete und Importdeklarationen
Importmöglichkeit 1 | Importmöglichkeit 2 |
Datei 1:
package Entfernt; public class Punkt { ... } Datei 2: package Nahe; public class Punkt { ...} Datei 3: package Nahe; import Entfernt; |
Datei 1:
package Entfernt; public class Punkt { ... } Datei 2: package Nahe; public class Punkt { ...} Datei 3: package Nahe; |
- 2782 views
Fragen zu Referenzen
Fragen zu ReferenzenWeitere Fragen aus anderen Bereichen zu diesem Thema:
- Anzahl von Instanzen (Objekte) erkennen
- Implementieren eine Klasse (Pakete, Konstruktoren, Datenkapselung, Methoden) (enthält auch Teilfragen anderer Bereiche)
- 1355 views
1. Dereferenzieren von Objekten
1. Dereferenzieren von ObjektenWarum soll man Objekte dereferenzieren von denen man sicher ist, dass man sie nicht mehr benötigt. Dereferenzieren bedeutet die Referenzvariable mit einem null Wert zu belegen?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
- 6201 views
2. Referenzieren-Dereferenzieren
2. Referenzieren-Dereferenzierenpublic class Person { public Person vater; public Person mutter; public static void main (String[] args ) { Person p1 = new Person(); Person p2 = new Person(); p1.vater = p2; p2 = null; // Zeitpunkt 1 execute(p1); // Zeitpunkt 3 } // Ende main public static void execute(Person p) { Person[] persFeld = new Person[2]; persFeld[1] = p; persFeld[0] = new Person(); persFeld[0].vater = new Person(); persFeld[0].mutter = new Person(); // Zeitpunkt 2 } // Ende execute() } // Ende Klasse Person
Zum Zeitpunkt 1 ergibt sich das folgende Modell für den Stapel (Stack) und den Objekt-Heap:
- Aufgabe 1: Tragen Sie im Diagramm die zum Zeitpunkt 2 angelegten Objekte auf Heap und Stack ein. Nutzen Sie bitte den Diagrammstil wie vorgegeben.
- Aufgabe 2: Markieren Sie das Objektmodell zum Zeitpunkt 3 im gleichen Diagramm:
- Markieren Sie alle nicht erreichbaren Objekte mit der Bemerkung: „nicht erreichbar“. Diese Objekte sind Kandidaten zum Löschen durch den „Garbagecollector“,
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 6+6 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 1: Dereferenzieren von Objekten
Durch das explizite Dereferenzieren kann man „Memory leaks“ vorbeugen. Die dereferenzierten Objekte können dann wahrscheinlicher vom Garbage-collector gelöscht werden
Antwort zu Frage 2: Referenzieren-Dereferenzieren
public class Person { public Person vater; public Person mutter; public static void main (String[] args ) { Person p1 = new Person(); Person p2 = new Person(); p1.vater = p2; p2 = null; // Zeitpunkt 1 execute(p1); // Zeitpunkt 3 } // Ende main public static void execute(Person p) { Person[] persFeld = new Person[2]; persFeld[1] = p; persFeld[0] = new Person(); persFeld[0].vater = new Person(); persFeld[0].mutter = new Person(); // Zeitpunkt 2 } // Ende aufrufen() } // Ende Klasse Person
Zum Zeitpunkt 3 ergibt sich das folgende Modell für den Stapel (Stack) und den Objekt-Heap:
- 5081 views
Fragen zu Feldern
Fragen zu Feldern javafrage Sat, 11/24/2018 - 13:52- 1400 views
1. Felder, Schleifen, Referenzen
1. Felder, Schleifen, ReferenzenSchreiben Sie eine Methode welche alle Werte eines Felds verdreifacht. Schreiben Sie den Quellcode in den freien Platz der vorgegebenen Methode dreifach(int[] a) der Klasse Feld1.
- Verdreifachen Sie alle Werte des Feldes a welches als Eingabeparameter übergeben wird
- Nicht notwendig:
- Überprüfung auf Überlauf des Wertebereichs von int der einzelnen Feldelemente
- Typprüfungen für a (a sei eine Nullreferenz oder ein Feld von int)
- Für volle Punktzahl notwendig:
- Prüfen, dass die übergebene Variable a nicht eine Nullreferenz ist
- Verdreifachen aller Werte eines beliebig langen Feldes a
- Die Feldgrenzen sollen nicht unter- oder überlaufen werden
Gegeben ist das folgende Javaprogramm:
public class Feld1 { public static void dreifach(int[] a) { // Hier Lösung einfügen } // Ende der Methode. Kein Rückgabewert notwendig } // Ende der Klasse Feld1
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 9 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
- 5264 views
2. Parameterübergaben und Rückgaben von Werten
2. Parameterübergaben und Rückgaben von WertenBei der Methode malDrei(int b) geht das Ergebnis nach dem Verlassen des Methodenrumpf verloren.
Warum geht dieses Ergebnis verloren, aber das Ergebnis der Methode dreifach(int[] a) kann noch vom Aufrufer nach Beenden der Methode verwendet werden?
Geben Sie eine kurze Erklärung der beiden unterschiedlichen Situationen.
public class Feld1 { public static void dreifach(int[] a) { if (a != null) {
for (int i = 0; i<a.length; i++) {
a[i] = 3 * a[i];
}
} } // Ende der Methode. Kein Rückgabewert notwendig public static void malDrei(int b) {int c=3*b;} } // Ende der Klasse Feld1
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 1 : Felder, Schleifen, Referenzen
public class Feld1 { public static void dreifach(int[] a) { if (a != null) {
for (int i = 0; i<a.length; i++) {
a[i] = 3 * a[i];
}
} } // Ende der Methode. Kein Rückgabewert notwendig } // Ende der Klasse Feld1
- 4690 views
3. Implementieren eines Felds (Array)
3. Implementieren eines Felds (Array)Vervollständigen Sie die weiter unten aufgeführte Vorlage einer Klasse Feld.
1. Deklarieren sie ein öffentliches Attribut der Klasse Feld mit
- dem Namen f
- dem Typ eines Feldes von 32 Bit Ganzzahlen
- initialisieren Sie das Attribut mit einer aufzählenden Belegung für 10 Feldelemente
- belegen Sie die Position 0 des Feldes mit dem Wert 9, die Position 1 mit dem Wert 8, die Position 2 mit dem Wert 7 usw.
2. Implementieren Sie eine Methode mit dem Namen verdoppeln
- die Methode verdoppeln soll nur von Unterklassen aufgerufen werden können (1 Minute)
- die Methode hat keine Eingabe oder Ausgabeparameter (1 Minute)
- alle Elemente des Feldes f sollen im Wert verdoppelt werden (2 Minuten)
- die Methode soll für beliebig lange Felder funktionieren (1 Minute)
- wählen Sie eine Schleife und die benötigten Zählvariablen (2 Minuten)
public class Feld { // Ab hier implementieren }// Ende der Klasse Feld
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 3+7 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 2 : Parameterübergaben und Rückgaben von Werten
Bei der Methode dreifach() wird eine Referenz auf ein Feld int[], welches auf dem Heap liegt, übergeben. Das Feld ist solange benutzbar, solange es Referenzen darauf gibt.
Die Methode malDrei() hat einen Basistypen int als Übergabeparameter. Er wird beim Aufruf kopiert und ist nur innerhalb des Methodenblocks gültig. Die Variable b wird am Ende des Methodenblocks gelöscht und ist nicht mehr benutzbar.
- 5028 views
4. Felder aufzählend initialisieren und benutzen
4. Felder aufzählend initialisieren und benutzenVervollständigen Sie die weiter unten aufgeführte Vorlage einer Klasse Prim.
Deklarieren sie ein privates, statisches Attribut der Klasse Prim zur Verwaltung der ersten fünf Primzahlen in aufsteigender Folge. (2 Minuten)
2 ist die erste Primzahl!
- Initialisieren Sie das Attribut mit dem Feld mit einer aufzählenden Belegung (1 Minute)
- das Feld soll nicht veränderbar sein (1Minute)
- an der ersten Stelle soll die 2 im Feld gespeichert sein
- Implementieren Sie den Rumpf der Methode auslesen()
- sie liest die n'te Primzahl aus dem Feld aus.
- Beim Aufruf von 1 gibt erste Primzahl aus.
- Beim Aufruf von 2 die zweite usw.
- Sie müssen nicht die Feldgrenzen überprüfen.
public class Prim { // Hier das Feldattribut deklarieren }// Ende der Klasse Prim
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 7 Minuten (4+3) |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 3 : Implementieren eines Felds (Array)
public class Feld { // Ab hier implementieren public int[] f = {9,8,7,6,5,4,3,2,1,0}; protected void verdoppeln() { for (int i=0;i<f.length;i++) { f[i]=2*f[i]; } }}// Ende der Klasse Feld
- 4620 views
5. Zweidimensionales Feld implementieren
5. Zweidimensionales Feld implementierenEs soll eine Methode
public static int anzahlZellen(int[][] meinFeld)
implementiert werden. Diese Methode zählt die Zellen eines zweidimensionalen Felds.
- Welche Sonderfälle können bei einem Zeiger wie meinFeld bei zweidimensionalen Feldern auftreten? (2 Min.)
- Skizzieren Sie textuell was in der oben genannten Methode programmiert werden muss. ( 4 Min.)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2+4 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 4 : Felder aufzählend initialisieren und benutzen
public class Prim { // Hier das Feldattribut deklarieren private static final int[] feld = {2,3,5,7,11}; public static int auslesen (int pos) { return feld[pos-1]; } }// Ende der Klasse Prim
- 3819 views
6. Aufzählendes Initialisieren von Feldern
6. Aufzählendes Initialisieren von FeldernVervollständigen Sie den unten aufgeführten Code in dem Sie das gegebene Feld von Zweierpotenzen mit den ersten vier Zweierpotenzen (1, 2, 4, 8) aufzählend initialisieren.
int[] zweierpotenzen
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 5.: Zweidimensionales Feld implementieren
Sonderfälle
- Der Zeiger ist leer (null)
- Das Feld ist kürzer als gedacht oder leer.
Vorgehen
- Prüfe ob ein Nullzeiger vorliegt. Gib 0 als Ergebnis aus falls ein Nullzeiger vorliegt und beende das Programm
- Bestimme die Länge des Feldes der ersten Dimension
- Führe die folgenden Operationen für alle Feldelemente der ersten Dimension durch.
- Die einzelnen Elemente der ersten Dimension werden „zweite Dimension“ genannt:
- Ein Zeiger der zweiten Dimension zeigt auf null
- Ja: Setze die Länge des Feldes auf Null
- Nein: Bestimme die Länge der Felder der zweiten Dimension
- Addiere das Ergebnis der Felder der zweiten Dimension zum Gesamtergebnis
- Gibt das Gesamtergebnis zurück
- 3675 views
7. Speicherbereich für Felder
7. Speicherbereich für FelderIn welchem Speicherbereich werden Felder verwaltet (1 Min.) und warum (2 Min.)?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 6 : Aufzählendes Initialisieren von Feldern
int[] zweierpotenzen = {1,2,4,8};
- 3856 views
Antwort zu 1.90 Speicherbeich für Felder fehlt
Die Antwort zu 1.90 Speicherbereich für Felder fehlt, man wird direkt auf 2. Fragen für Fortgeschrittene weitergeleitet.
- Log in to post comments
8. Felder (Implementieren)
8. Felder (Implementieren)Schreiben Sie eine öffentliche Klassenmethode erzeugeFibonacciFeld, der als Parameter eine Ganzzahl größer 2 übergeben wird.
Diese Ganzzahl legt fest, wie groß das Ganzzahlen-Feld sein soll, das in der Methode zuerst eingerichtet und dann mit den Werten der Fibonacci-Folge gefüllt werden soll. Bei einem Übergabeparameter n soll das Feld von der Position 0 bis n mit den Elementen der Fibonaccifolge gefüllt sein
Definition der Fibonacci-Folge
Jeder Wert der Fibonacci-Folge besteht aus der Summe der beiden vorgehenden Werte.Für die ersten beiden Zahlen sind die Werte 0 und 1 vorgegeben. Das bedeutet:
- f0 = 0 ;
- f1 = 1;
- f2 = 1;
- f3 = 2;
- f4 = 3;
- f5 = 5,
- …
oder als Formel
fn = fn-1 + fn-2 für n>= 2
Hinweis für die Methode:
- Es wird kein Wert zurückgeben;
- das Fibonacci-Feld wird lokal in der Methode deklariert;
- Es findet keine Überprüfung auf Unterlauf des Parameter(<2) statt; Es findet keine Überprüfung auf potentiellen Überlauf des Wertebereichs bei der Berechnung der Fibonacciwerte statt.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
12 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 7 : Speicherbereich von Feldern
Felder werden im Freispeicher (Heap) angelegt, da Sie unterschiedlich groß sein können.
- 4820 views
9. Felder in Parameterlisten
9. Felder in ParameterlistenImplementieren sie den Kopf einer Methode die beliebig viele Namen Ihrer Haustiere annehmen kann. Vervollständigen Sie den Methodenkopf. Drucken Sie in der Methode alle Namen der Tiere auf die Konsole:
public static void meineLieblinge ( /* ? */) { // Hier implementieren }
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit |
5 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 8: Felder (Implementieren)
public void erzeugeFibonacciFeld(int k) { int [] fib=new int[k+1]; fib[0] = 0; fib[1] = 1; for (int i=2; i<= k; i++) fib[i] = fib[i-1]+fib[i-2]; }
Antwort zu Frage 9: Felder in Parameterlisten
public static void meineTiere (String … tiernamen ) { // Hier implementieren for ( String t : tierNamen) System.out.println("Haustier: " +t); }
- 87 views
Fragen zur Vererbung
Fragen zur VererbungWeitere Themen zu diesem Thema aus anderen Bereichen:
- Vererbung, Konstruktoren, Verfolgen des Ablauf
- Implementieren eine Klasse (Pakete, Konstruktoren, Datenkapselung, Methoden) (enthält auch Teilfragen anderer Bereiche)
- 1354 views
1. Überschriebene Methoden
1. Überschriebene MethodenJava kennt überladene sowie überschriebene Methoden. Woran erkennt man überschriebene Methoden?
- Geben Sie eine kurze Erklärung
- Geben Sie ein Beispiel zweier überschriebener Methoden. Wichtig:
- benötigte Klasse bzw. Klassen
- benötigte Methoden (Name, Signatur etc). Methodenrümpfe sind nicht wichtig. Kürzen Sie sie mit {…} ab
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 8 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
- 5164 views
2. Vererbung in Javaklassen
2. Vererbung in Javaklassen
- Welche Bestandteile einer Klasse werden in Java vererbt?
- Welche Bestandteile von Klassen werden nicht vererbt?
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2+2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 1 : Überschriebene Methoden
Überschriebene Methoden sind Methoden mit gleichem Namen und gleicher Eingabeparameterliste in einer Unterklasse und der Oberklasse.
Ein Beispiel:
public class Oberklasse { public void drucken() {...} } public class Unterklasse extends Oberklasse { public void drucken() {...} }
- 4684 views
3. Implementieren einer abgeleiteten Klasse
3. Implementieren einer abgeleiteten KlasseVervollständigen die Klasse Punkt3D derart, dass
- sie aus der Klasse Punkt2D abgeleitet wird und die beiden ersten Koordinaten (x,y) von Punkt2D nutzt (1 Minute)
- sie ein privates Attribut für eine dritte Koordinate besitzt (1 Minute)
- sie einen Konstruktor besitzt der alle drei Koordinaten mit initialen Wunschwerten belegt(3 Minuten)
- eine öffentliche Methode drucken() besitzt die eine Zeichenkette mit dem Wert aller drei Koordinaten erzeugt (3 Minuten)
public class Punkt2D { private double x; private double y; public Punkt2D(double xx, double yy) { x = xx; y = yy; } /** * Diese Methode erzeugt eine Zeichenkette der x * und y Koordinate * @return Zeichenketten mit Belegung */ public String drucken() { String s = "x:"+ x + " y: " +y; return s; } }// Ende der Klase Punkt2D public class Punkt3D extends Punkt2D{ // Hier implementieren }// Ende Klasse Punkt3D
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 8 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 2 : Vererbung in Javaklassen
- Welche Bestandteile einer Klasse werden in Java vererbt?
- Public, protected Attribute und Methoden
- Welche Bestandteile von Klassen werden nicht vererbt?
- Private Attribute und Methoden, Konstruktoren
- 4646 views
4. Modifizierer (Modifier): Warum darf eine Klasse nicht "abstract" und "final" gleichzeitig sein?
4. Modifizierer (Modifier): Warum darf eine Klasse nicht "abstract" und "final" gleichzeitig sein?Die Antwort ist auf der Folgeseite (URL rechts unten) zufinden.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Antwort zu Frage 3 : Implementieren einer abgeleiteten Klasse
public class Punkt2D { private double x; private double y; public Punkt2D(double xx, double yy) { x = xx; y = yy; } /** * Diese Methode erzeugt eine Zeichenkette der x * und y Koordinate * @return Zeichenketten mit Belegung */ public String drucken() { String s = "x:"+ x + " y: " +y; return s; } }// Ende der Klase Punkt2D public class Punkt3D extends Punkt2D{ private double z; public Punkt3D(double xx, double yy, double zz) { super(xx,yy);
z = zz;
}
/** * Diese Methode erzeugt eine Zeichenkette der x,y und Z * Koordinate * @return Zeichenketten mit Belegung */ public String drucken() { String s = super.drucken() + "z:" +z; return s; } }// Ende Klasse Punkt3D
Antwort zu Frage 4: Abstrakte und finale Klassen
Die Frage finden Sie auf der vorgehenden Seite (URL links unten klicken)
- Abstrakte Klassen dürfen nicht instanziiert werden. Es können nur Instanzen von abgeleiteten Klassen gebildet werden werden.
- Finale Klassen dürfen nicht abgeleitet werden.
Eine finale, abstrakte Klasse kann weder instanziiert noch spezialisiert werden. Man kann sie nicht benutzen.
- 6226 views
Methode durch Klasse ersetzen in Frage 1.2?
Muss die Frage hier nicht heißen: 1.2 Modifizierer (Modifier): Warum darf eine KLASSE nicht "abstract" und "final" gleichzeitig sein?
Ansonsten past die Antwort nicht ganz?
- Log in to post comments
Fragen zum Polymorphismus
Fragen zum Polymorphismus javafrage Sun, 11/25/2018 - 16:43- 1297 views
1. Polymorphismus (Zuweisungen, Methodenaufrufe)
1. Polymorphismus (Zuweisungen, Methodenaufrufe)Die main() Methode der Klasse Punkt3D arbeitet mit Objekten der Klassen Punkt2D und Punkt3D.
public class Punkt2D { private double x; private double y; public Punkt2D(double xx, double yy) { x = xx; y = yy; } /** * Diese Methode erzeugt eine Zeichenkette der x * und y Koordinate * @return Zeichenketten mit Belegung */ public String drucken() { String s = "x:"+ x + " y: " +y; return s; } }// Ende der Klase Punkt2D public class Punkt3D extends Punkt2D{ private double z; public Punkt3D(double xx, double yy, double zz) { super(xx,yy); z = zz; } /** * Diese Methode erzeugt eine Zeichenkette der x,y und Z * Koordinate * @return Zeichenketten mit Belegung */ public String drucken() { String s = super.drucken() + "z:" +z; return s; } public static void main(String[] args) {
Punkt2D[] feld= new Punkt2D[2];
feld[0] = new Punkt2D(11.1,22.2);
feld[1] = new Punkt3D(11.1,22.2,33.3); Punkt2D p2d0 = feld[0]; Punkt2D p2d1 = feld[1]; // Analyse der Druckenmethode System.out.println(p2d0.drucken()); // Was wird ausgegeben? System.out.println(p2d1.drucken()); // Was wird ausgegeben? // Typkonversionen. Punkt3D p3da = p2d0; Punkt3D p3db = p2d1; Punkt3D p3dc = p3db; Punkt2D p2d3 = p3db; } }// Ende Klasse Punkt3D
- Was schreibt dieses Programm mit den beiden Aufrufen von System.out.println() auf die Konsole? (2 Minuten)
- Warum werden hier zwei unterschiedliche Methoden aufgerufen, obwohl der Variablentyp bei beiden Variablen Punkt2D ist? Nennen Sie den Fachbegriff und erklären Sie ihn kurz. (4 Minuten)
- Analysieren Sie die Zuweisungen nach dem Kommentar „Typkonversionen“ in der Methode main()
- Fügen Sie Typkonversionen an den Stellen ein, an der die Zuweisungen nicht
sicher sind und vom Übersetzer javac als Syntaxfehler beanstandet werden. (2 Minuten) - Obwohl alle Zuweisungen mit den entsprechenden Typkonversionen syntaktisch richtig sind wird es zur Ausführungszeit Fehler geben. Kommentieren Sie diese Zeilen mit „//“ aus. (1 Minute)
- Eine der Zuweisungen hat eine sichere Typkonversion die ohne explizite Typkonversion (cast) erlaubt ist. Markieren Sie diese Zeile mit „sichere Typkonversion“ (1 Minute)
- Fügen Sie Typkonversionen an den Stellen ein, an der die Zuweisungen nicht
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2+4+4 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 1 : Implementieren einer abgeleiteten Klasse
1. Was schreibt dieses Programm mit den beiden Aufrufen von System.out.println() auf die Konsole?
- x:11.1 y: 22.2
- x:11.1 y: 22.2 z:33.3
2. Warum werden hier zwei unterschiedliche Methoden aufgerufen, obwohl der Variablentyp bei beiden Variablen Punkt2D ist? Nennen Sie den Fachbegriff und erklären Sie ihn kurz:
- Die Methode drucken der Klasse Punkt3D überschreibt die Methode der Oberklasse. Durch den Polymorphismus in Java wird die Methode automatisch die speziellste für das gegebene Objekt ausgewählt.
3. Quellcode mit eingefügten Antworten:
public class Punkt2D { private double x; private double y; public Punkt2D(double xx, double yy) { x = xx; y = yy; } /** * Diese Methode erzeugt eine Zeichenkette der x * und y Koordinate * @return Zeichenketten mit Belegung */ public String drucken() { String s = "x:"+ x + " y: " +y; return s; } }// Ende der Klase Punkt2D public class Punkt3D extends Punkt2D{ private double z; public Punkt3D(double xx, double yy, double zz) { super(xx,yy); z = zz; } /** * Diese Methode erzeugt eine Zeichenkette der x,y und Z * Koordinate * @return Zeichenketten mit Belegung */ public String drucken() { String s = super.drucken() + "z:" +z; return s; } public static void main(String[] args) { Punkt2D[] feld= new Punkt2D[2]; feld[0] = new Punkt2D(11.1,22.2); feld[1] = new Punkt3D(11.1,22.2,33.3); Punkt2D p2d0 = feld[0]; Punkt2D p2d1 = feld[1]; // Analyse der Druckenmethode System.out.println(p2d0.drucken()); // Was wird ausgegeben? System.out.println(p2d1.drucken()); // Was wird ausgegeben? // Typkonversionen. //In der nächsten Zeile wurde ein Kommentar eingefügt //Punkt3D p3da = (Punkt3D) p2d0; Punkt3D p3db = (Punkt3D) p2d1; Punkt3D p3dc = p3db; // Sichere Zuweisung Punkt2D p2d3 = p3db; // Upcast -> Sichere Zuweisung } }// Ende Klasse Punkt3D
- 4801 views
Lösungssatz Aufgabe 2
Hallo!
Der Lösungssatz für Aufgabe 2 hat einen Merkwürdigen Satzbau, was meinen sie mit diesem Satz?
Dank für ihre Antwort
- Log in to post comments
Fragen zu Java Schnittstellen (Interfaces)
Fragen zu Java Schnittstellen (Interfaces) javafrage Mon, 03/20/2017 - 15:12- 2768 views
1 Abstrakte Klassen und Schnittstellen
1 Abstrakte Klassen und SchnittstellenImplementieren sie die notwendigen Methodenköpfe für die Klasse Unterklasse. Die Klasse Unterklasse hat die folgenden Eigenschaften:
- Sie wird aus der Klasse Oberklasse abgeleitet
- Sie implementiert die Schnittstelle(Interface) Vergleichbar
Vervollständigen Sie die Klasse Unterklasse mit den notwendigen Methoden um ein Objekt dieser Klasse erzeugen zu können.
Die Methodenrümpfe können mit {…} abgekürzt werden.
public abstract class Oberklasse { public abstract void drucken(); public abstract boolean groesser(Object obj); public int status() {return 1;} } //Ende der Klasse Oberklasse public interface Vergleichbar { public boolean groesser(Object obj); public int zaehler(); } // Ende der Schnittstelle Vergleichbar
Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken)
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
- 4513 views
2 Schnittstellen und Überschreiben von Methoden
2 Schnittstellen und Überschreiben von MethodenWarum kann man in Java Schnittstellenmethoden (Interface-methoden) nicht überschreiben? Warum kann man nur Methoden einer Oberklasse überschreiben?
Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken)
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Antwort zu Frage 1: Abstrakte Klassen und Schnittstellen
public abstract class Oberklasse { public abstract void drucken(); public abstract boolean groesser(Object obj); public int status() {return 1;} } //Ende der Klasse Oberklasse public interface Vergleichbar { public boolean groesser(Object obj); public int zaehler(); } // Ende der Schnittstelle Vergleichbar public class Unterklasse extends Oberklasse implements Vergleichbar{
public void drucken() {System.out.println("drucken");}
public boolean groesser(Object obj) {return true;}
public int zaehler() {return 0;} } // Ende der Klasse Unterklasse
- 5827 views
3 Oberklassen und Schnittstellen in UML
3 Oberklassen und Schnittstellen in UMLModellieren Sie die beiden Klassen Oberklasse, Unterklasse und die Schnittstelle Vergleichbar in UML. Modellieren Sie die Beziehung zwischen den beiden Klassen und der Schnittstelle. Die Methoden müssen nicht aufgeführt werden. Klassenname, Schnittstellenname und korrekte UML Pfeile sind ausreichend.
public abstract class Oberklasse { public abstract void drucken(); public abstract boolean groesser(Object obj); public int status() {return 1;} } //Ende der Klasse Oberklasse public interface Vergleichbar { public boolean groesser(Object obj); public int zaehler(); } // Ende der Schnittstelle Vergleichbar public class Unterklasse extends Oberklasse implements Vergleichbar{
public void drucken() {System.out.println("drucken");}
public boolean groesser(Object obj) {return true;}
public int zaehler() {return 0;}
} // Ende der Klasse Unterklasse
Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken)
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Antwort zu Frage 2: Schnittstellen und Überschreiben von Methoden
Schnittstellen haben keine Implementierung. Ohne eine Implementierung kann man auch nicht die Methode überschreiben. Man kann sie nur implementieren.
- 4512 views
4 Klasse zu gegebenen Schnittstellen implementieren
4 Klasse zu gegebenen Schnittstellen implementierenImplementieren sie die notwendigen Methodenköpfe für die Klasse Schwimmauto. Die Klasse Schwimmauto hat die folgenden Eigenschaften:
- Sie implementiert die Schnittstellen Kfz und Schiff
- Sie implementiert einen Konstruktor der mit dem Parameter (int passagiere) die Anzahl der Passagiere erfassen kann.
Vervollständigen Sie die Klasse Schwimmauto
- mit den notwendigen Methoden und Konstruktoren.
- mit der Deklaration der benötigten Schnittstellen
- bitte alle Methodenrümpfe mit {…} abkürzen (Sie sind hier nicht wichtig).
public interface Kfz { public int motorleistung(); public String kennzeichen(); public int anzahlRaeder(); } //Ende des Interface Auto public interface Schiff { public int motorleistung(); public int wasserVerdraengung(); } // Ende der Schnittstelle Schiff
Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 7 Minuten |
Antwort zu Frage 3: Oberklassen und Schnittstellen in UML
- 4974 views
5 Schnittstellen und Konstruktoren
5 Schnittstellen und KonstruktorenWarum wird bei Schnittstellen nie die Implementierung eines Konstruktors gefordert?
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Antwort zu Frage 4: Klasse zu gegebenen Schnittstellen implementieren
public class Schwimmauto implements Schiff, Kfz { // Bitte Methoden hier eintragen public int motorleistung() {...} public String kennzeichen(){...} public int anzahlRaeder(){...} public int wasserVerdraengung(){...} public Schwimmauto(int passagiere){...} // Der Konstruktor } // Ende der Klasse Schwimmauto
- 4526 views
6 Schnittstellen in UML beschreiben
6 Schnittstellen in UML beschreibenDie Klassen Person und Supplier implementieren die Schnittstelle BankAccount. Zeichnen Sie ein UML Diagramm welches die die beiden Klassen, die Schnittstelle und deren Beziehung zeigt. Nutzen Sie den Diagrammtyp der die Schnittstelle BankAccount als Rechteck zeigt:
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Antwort zu Frage 5: Konstruktoren und Schnittstellen
Schnittstellen können nicht instanziiert werden. Daher muss auch nichts initialisiert werden. Eine Implementierung kann nur den Konstruktor der Oberklasse aufrufen aber nicht den der implementierten Schnittstelle
- 4716 views
7 Java Schnittstellen in alternativer UML Darstellung
7 Java Schnittstellen in alternativer UML DarstellungZeichnen Sie ein UML Diagramm für die Klasse Person welches die Schnittstellenbeziehung von oben in einer alternativen UML Notation zeigt.
Nutzen Sie die Notation, die man benutzt um auf die Schnittstelle
BankAccount als Schnittstelle zu referenzieren wenn man BankAccount nicht als
vollständiges Rechteck im Diagramm zeichnen möchte.
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Antwort zu Frage 6: Schnittstellen in UML beschreiben
- 2994 views
8 Implementieren einer Unterklasse mit einer Schnittstelle
8 Implementieren einer Unterklasse mit einer SchnittstelleImplementieren sie die notwendigen Methodenköpfe für die Klasse Unterklasse.
Die Klasse Unterklasse hat die folgenden Eigenschaften:
- Sie wird aus der Klasse Oberklasse abgeleitet
- Sie implementiert die Schnittstelle(Interface) Vergleichbar
Vervollständigen Sie die Klasse Unterklasse mit den notwendigen Methoden um ein Objekt dieser Klasse erzeugen zu können. Die Methodenrümpfe können mit {…} abgekürzt werden.
public abstract class Oberklasse { public abstract void drucken(); public abstract boolean groesser(Object obj); public int status() {return 1;} } //Ende der Klasse Oberklasse public interface Vergleichbar { public boolean groesser(Object obj); public int zaehler(); } // Ende der Schnittstelle Vergleichbar
public class Unterklasse extends Oberklasse implements Vergleichbar{
// Bitte Methoden hier eintragen
} // Ende der Klasse Unterklasse
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Antwort zu Frage 7: Java Schnittstellen in alternativer UML Darstellung
Stop. Die Antwort zu Frage 8 finden Sie weiter unten!
Antwort zu Frage 8: Implementieren einer Unterklasse mit einer Schnittstelle
public abstract class Oberklasse { public abstract void drucken(); public abstract boolean groesser(Object obj); public int status() {return 1;} } //Ende der Klasse Oberklasse public interface Vergleichbar { public boolean groesser(Object obj); public int zaehler(); } // Ende der Schnittstelle Vergleichbar public class Unterklasse extends Oberklasse implements Vergleichbar{ // Bitte Methoden hier eintragen public void drucken() {System.out.println("drucken");} public boolean groesser(Object obj) {return true;} public int zaehler() {return 0;} } // Ende der Klasse Unterklasse
- 3401 views
Fragen zu Annahmen (Assertions)
Fragen zu Annahmen (Assertions) javafrage Mon, 03/20/2017 - 18:22- 2295 views
1 Assertions (Annahmen, Zusicherungen)
1 Assertions (Annahmen, Zusicherungen)Die Klasse Annahme hat zwei Methoden verkettung() und alterInMonaten(). Die geforderten Randbedingungen sind textuell als Javakommentar in den beiden Methoden eingefügt. Fügen Sie bitte im Quellcode für jede Methode die notwendigen Assertions hinter den Kommentaren ein.
public class Annahme {public static void main(String[] args) {
String s;
// Korrekte Aufrufe
s = verkettung("Liese", "Meitner");
int a = alterInMonaten(19, 2);
// Nicht korrekte Aufrufe.
// Sie sollen von Assertions gefangen werden
s = verkettung(null,"Curie");
a = alterInMonaten(250, 13);
}public static String verkettung(String nachname, String vorname) {
// Es darf keine Nullreferenz
// als Vor- oder Nachname benutzt werden
// Assertions hier einfügen:
return (vorname + nachname);
} // Ende der Methode verkettung
public static int alterInMonaten(int alterJahre, int alterMonate) {
// Das Alter einer Person wird in seinem Alter in Jahren und den
// Monaten als Wert zwischen 1 und 12 übergeben.
// Das Alter muss zwischen 0 und 150 Jahren liegen.
// Die laufenden Monate müssen zwischen 1 und 12 liegen.
// Assertions hier einfügen:
return (alterJahre * 12 + alterMonate);
} // Ende der Methode alterInMonaten
} // Ende der Klasse
Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 6 Minuten |
- 4890 views
Falscher Klassenname als in Beschreibung
Der Klassenname müsste doch "Annahme" und nicht "Zusicherung" lauten oder?
- Log in to post comments
2 Anwendung von Assertions
2 Anwendung von AssertionsIn welchen Situationen soll ein Entwickler Assertions anstatt einer regulären Prüfung bei jedem Aufruf in einer Anwendung nutzen?
Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Antwort zur Frage 1: Assertions
public class Annahme {public static void main(String[] args) {
String s;
// Korrekte Aufrufe
s = verkettung("Liese", "Meitner");
int a = alterInMonaten(19, 2);
// Nicht korrekte Aufrufe.
// Sie sollen von Assertions gefangen werden
s = verkettung(null,"Curie");
a = alterInMonaten(250, 13);
}public static String verkettung(String nachname, String vorname) {
// Es darf keine Nullreferenz
// als Vor- oder Nachname benutzt werden
// Assertions hier einfügen:assert ((nachname != null) && (vorname != null));
return (vorname + nachname);
} // Ende der Methode verkettung
public static int alterInMonaten(int alterJahre, int alterMonate) {
// Das Alter einer Person wird in seinem Alter in Jahren und den
// Monaten als Wert zwischen 1 und 12 übergeben.
// Das Alter muss zwischen 0 und 150 Jahren liegen.
// Die laufenden Monate müssen zwischen 1 und 12 liegen.
// Assertions hier einfügen:
assert ((alterJahre >= 0) &&
(alterJahre <= 150) &&
(alterMonate > 0) &&
(alterMonate <= 12));
return (alterJahre * 12 + alterMonate);
} // Ende der Methode alterInMonaten
} // Ende der Klasse
- 4845 views
3 Implementieren von Assertions (Annahmen)
3 Implementieren von Assertions (Annahmen)Fügen Sie hinter den Kommentaren der drei Methoden Assertions (Annahmen) ein, die die Forderung in den Kommentaren erfüllen:
package Kurs2.Assertion;public class Fragen1 {
public static void main (String[] args) {
int konto = 1000;
konto = kontobuchung(konto,-500);
String s = verkettung("Test",null);
int volumen;
volumen = paketvolumen (100, 50, 60);
volumen = paketvolumen (20, 20, -5);
}
public static int kontobuchung (int konto, int betrag) {
// Es darf kein negative Wert für betrag verwendet werden
return (konto - betrag);
}
public static String verkettung (String a, String b) {
// Weder die Übergabevariable a noch b dürfen null Referenzen sein
return (a + b);
}
public static int paketvolumen(int laenge, int breite, int hoehe) {
// Alle Paketmaße müssen positiv sein
// Die Summe von laenge, breite und hoehe darf 2000 nicht uebersteigen
return (laenge*breite*hoehe);
}
}
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Antwort zur Frage 2: Verwendung von Assertions
Assertions haben im Normalfall keinen Performancenachteil. Da das Assertionchecking nur explizit eingeschaltet wird, muss man für die Assertions nicht unbedingt Qualititätssicherung und keine professionelle Behandlung des Sonderfalls durchführen. Daher sind typische Situationen
- Die durchzuführende Prüfung würde sehr (,sehr ) oft durchgeführt und sollte "eigentlich" nie einen Fehlerfall anzeigen
- Die durchzuführende Prüfung sollte nie einen Fehlerfall produzieren, da z.Bsp. aufrufende Methoden den Fehlerfall schon abfangen. Eine doppelte, reguläre Prüfung wäre im Normalbetrieb redundant. Bei einer zukünftigen Wiederverwendung Ihres Softwarepakets könnte es aber zu zu gänzlich anderen Aufrufabfolgen kommen.
- Sie benötigen ledliglich eine Ausgabe zur Fehleranalyse eines Fehlers der nie vorkommen sollte. Sie möchten aber aus Kostengründen keine Ausnahme werfen. Das Werfen einer Ausnahme müsste dokumentiert werden. Es müsste getestet werden. Es müsste eventuell lokalisiert werden.
- 4153 views
4 Assertions Einsatzbereiche
4 Assertions EinsatzbereicheNennen Sie zwei typische Bereiche in den es guter Stil ist, Java-Assertions zu verwenden.
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 2Minuten |
Antwort zu Frage 3: Implementieren von Assertions (Annahmen, Zusagen)
package Kurs2.Assertion;public class Fragen1 {
public static void main (String[] args) {
int konto = 1000;
konto = kontoBuchung(konto,-500);
String s = verkettung("Test",null);
int volumen;
volumen = paketvolumen (100, 50, 60);
volumen = paketvolumen (20, 20, -5);
}
public static int kontoBuchung (int konto, int betrag) {
// Es darf kein negative Wert für betrag verwendet vorkommen
assert (betrag >=0);
return (konto - betrag);
}
public static String verkettung (String a, String b) {
// Weder die Übergabevariable a noch b dürfen null Referenzen sein
assert (a!=null) && (b!=null);
return (a + b);
}
public static int paketvolumen(int laenge, int breite, int hoehe) {
// Alle Paketmaße müssen positiv sein
// Die Summe von laenge, breite und hoehe darf 2000 nicht uebersteigen
assert (laenge>0);
assert (breite>0);
assert (hoehe>0);
assert (laenge+breite+hoehe<=2000);return (laenge*breite*hoehe);
}
}
- 3782 views
Fehlende Klammern
In "public static String verkettung" fehlen Klammern um die Assertion Bedingung.
- Log in to post comments
5 Erweiterte Form von Assertions
5 Erweiterte Form von AssertionsEine einfache Java-Assertion die die geforderte Volljährigkeit testet ist:
assert (alter >=18);
Implementieren Sie diese Assertion in der erweiterten Form. Wählen Sie eine Erweiterung, die eine Konsolenausgabe erzeugt, die den Benutzer über das falsche Alter sinnvoll informiert.
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Antwort zu Frage 4: Assertions Einsatzbereiche
- Invarianten
- Sonderfälle bei Verzeigungen die nie auftreten sollten.
- Fälle die nie Auftreten dürfen
- 3603 views
6 Einschalten von Assertions
6 Einschalten von AssertionsWas muss ein Anwender einer Javaanwendung tun um die Zusatzüberprüfungen von Java-Assertions in einen Programmlauf nutzen zu können?
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Antwort zu Frage 5: Erweiterte Form von Assertions
assert (alter >=18): alter + " ist zu jung“;
- 3659 views
7 Analyse von Assertions
7 Analyse von AssertionsEine Methode die Personen beim Geburtstag ein Jahr älter macht benutzt eine Assertion:
class AssertionTest { public static int einJahrAelter(int alter) { assert (alter >=0): "Negatives Alter"; alter++; return alter; } public static void main(String[] args) { int a = einJahrAelter( -17); System.out.println(a); } }
Das Programm wird mit dem Kommando: java AssertionTest gestartet.
Was wird auf der Konsole ausgegeben?
Was geschieht bei diesem Programmablauf mit der Assertion?
Wie kann man andere Konsolenausgaben für Assertions erzwingen?
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Antwort zu Frage 6: Einschalten von Assertions
Die Option -ea beim Start des Programms nutzen.
- 3519 views
8 Implementieren einer Assertion (Methode transfer())
8 Implementieren einer Assertion (Methode transfer())Die Methode transfer() führt eine Banküberweisung durch. Es wird ein Betrag von einem Konto1 auf ein Konto2 überwiesen. Schreiben Sie eine Assertion und fügen Sie sie am Anfang der Methode ein.
Die Assertion soll
- bei negativen Beträgen aktiv werden
- aktiv werden wenn Konto1 nicht gedeckt ist. Es soll nach der Überweisung keinen negativen Betrag haben
- Nutzen Sie die erweiterte Form der Assertion die einen Text drucken kann.
- Nutzen sie einen vernünftigen Text.
class Ueberweisung { public static int transfer(int betrag,int kontoVon, int kontoNach) { // Hier Assertion einfügen kontoNach += betrag; kontoVon -= betrag; return kontoNach; } public static void main(String[] args) { int k = transfer( 100, 200, 10); System.out.println(k); k = transfer( 100, 80, 10); // Hier soll Assertion feuern System.out.println(k); } }
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Antwort zu Frage 7: Analyse von Assertions
-16
Sie wird nicht ausgeführt da die Option -ea nicht verwendet wird. Durch Benutzen der Option -ea wird die Assertion benutzt und die Konsolenausgabe ändert sich
- 3018 views
9 Implementieren einer Assertion
9 Implementieren einer AssertionDie Methode drucke(Adresse a) druckt eine Adresse. Schreiben Sie eine Assertion die sicherstellt, dass die Adresse gedruckt werden kann. Sie soll vermeiden, dass die übergebene Addresse-referenz a leer ist.
- Nutzen Sie die erweiterte Form der Assertion die einen Text druckt
- Nutzen sie einen vernünftigen Ausgabetext.
class Demo { public static void drucke(Addresse a) { // Hier Code eintragen System.out.println(a.nachname); System.out.println(a.vorname); } }
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 3 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Antwort zu Frage 8: Implementieren einer Assertion (Methode transfer())
class Ueberweisung { public static int transfer(int betrag,int kontoVon, int kontoNach) { assert ((betrag > 0) && (kontoVon-betrag>= 0)) : "Ueberweisungslimitfehler"; kontoNach += betrag; kontoVon -= betrag; return kontoNach; } public static void main(String[] args) { int k = transfer( 100, 200, 10); System.out.println(k); k = transfer( 100, 80, 10); // Hier soll Assertion feuern System.out.println(k); } }
- 2561 views
10 Assertion versus if-Abfrage
10 Assertion versus if-AbfrageWas ist der Vorteil der Assertion gegenüber einer if-Abfrage die nur drucken würde wenn eine Referenz übergeben wurde? Geben Sie eine kurze Erklärung. Was ist der Vorteil der Assertion gegenüber einer if-Abfrage die nur drucken würde wenn eine Referenz übergeben wurde? Geben Sie eine kurze Erklärung.
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 3+2 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Antwort zu Frage 9: Implementieren einer Assertion
class Demo { public static void drucke(Addresse a) { // Hier Code eintragen assert (a!=null) : ''keine Adresse angegeben''; System.out.println(a.nachname); System.out.println(a.vorname); } }
Stopp! Nicht weiterlesen. Die Antwort zur aktuellen Frage kommt weiter unten!
Antwort zu Frage 10: Assertion versus if-Abfrage
Die Assertion wird im normalen Programmablauf nicht ausgeführt und verbraucht daher keine unnötigen Ressourcen.
- 2920 views
Fragen zu Ausnahmen (Exceptions)
Fragen zu Ausnahmen (Exceptions) javafrage Wed, 03/22/2017 - 17:33- 2313 views
1 Exceptions (Ausnahmen)
1 Exceptions (Ausnahmen)Analysieren den Programmablauf des folgenden Programms. Im Programm tritt eine Division durch Null auf. Diese Division löst eine ArtithmeticException aus.
Zur Hilfe sei die Klassenhierarchie der relevaten Ausnahmeklassen gegeben:
Markieren Sie im Programm die durchlaufenen Konsolenausgaben mit fortlaufenden Nummern. Beginnen Sie mit einer 1 bei der Ausgabe „main:before“. |
public class Ausnahme { public static void main(String[] args) { int a = 5; int b = 0; int c = 0;System.out.println("main:before"); //Aufruf x
c = divAussen(a, b);
System.out.println("main:after"); //Aufruf x
} // Ende von main
static int divAussen(int a, int b) {
int d;
System.out.println("divAussen:beginn"); //Aufruf x
try {
d = 2 * divInnen(a, b);
} catch (RuntimeException e) {
System.out.println("divAussen: Division durch Null"); //Aufruf x
d = -2;
}
System.out.println("divAussen:ende"); //Aufruf x
return d;
} // Ende von divAussen
static int divInnen(int a, int b) {
int d;
System.out.println("divInnen:beginn"); //Aufruf x
try {
d = a / b; // Hier tritt eine Ausnahme auf
} catch (IllegalArgumentException e) {
System.out.println("divInnen: Division durch Null");
d = -1;
}
System.out.println("divInnen:ende");
return d;
} // Ende von divInnen
} // Ende der Klasse
Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 6 Minuten |
- 4763 views
2 Checked Exceptions
2 Checked ExceptionsWas muss ein Entwickler bei einer „Checked Exception“ immer tun? Welche beiden Möglichkeiten hat er?
Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Antwort zur Frage 1: Exceptions (Ausnahmen)
public class Ausnahme { public static void main(String[] args) { int a = 5; int b = 0; int c = 0; System.out.println("main:before"); //Aufruf 1c = divAussen(a, b);
System.out.println("main:after"); //Aufruf 6
} // Ende von main
static int divAussen(int a, int b) {
int d;
System.out.println("divAussen:beginn"); //Aufruf 2
try {
d = 2 * divInnen(a, b);
} catch (RuntimeException e) {
System.out.println("divAussen: Division durch Null"); //Aufruf 4
d = -2;
}
System.out.println("divAussen:ende"); //Aufruf 5
return d;
} // Ende von divAussen
static int divInnen(int a, int b) {
int d;
System.out.println("divInnen:beginn"); //Aufruf 3
try {
d = a / b; // Hier tritt eine Ausnahme auf
} catch (IllegalArgumentException e) {
System.out.println("divInnen: Division durch Null");
d = -1;
}
System.out.println("divInnen:ende");
return d;
} // Ende von divInnen
} // Ende der Klasse
- 4584 views
3 Erkennen von Ausnahmen im Quellcode
3 Erkennen von Ausnahmen im QuellcodeAnalysieren Sie den Programmablauf des folgenden Programms.
Im Programm tritt eine Division durch Null auf. Diese Division löst eine ArithmeticException aus.
Zur Hilfe sei die Klassenhierarchie der relevanten Ausnahmeklassen gegeben:
Markieren Sie im Programm die |
package s1.block10; public class Frage3 { public static void main(String[] args) { int a = 5; int b = 0; int c = 0; System.out.println("main:Anfang"); c = divAussen(a, b); System.out.println("main:Ende"); } // Ende von main static int divAussen(int a, int b) { int d; System.out.println("divAussen:Anfang"); try { d = 2 * divInnen(a, b); } catch (ArithmeticException e) { System.out.println("divAussen: Division durch Null"); d = -2; } System.out.println("divAussen:Ende"); return d; } // Ende von divAussen static int divInnen(int a, int b) { int d; System.out.println("divInnen:Anfang"); try { d = a / b; // Hier tritt eine Ausnahme auf } catch (IllegalArgumentException e) { System.out.println("divInnen: Division durch Null"); d = -1; } catch (RuntimeException e) { System.out.println("divInnen: Division durch Null;" + " RuntimeException"); d = -2; } System.out.println("divInnen:Ende"); return d; } // Ende von divInnen } // Ende der Klasse.
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 6 Minuten |
Antwort zur Frage 2: Checked Exceptions
Der Entwickler muss die Ausnahme immer behandeln. Entweder behandelt er sie direkt oder er reicht sie aus der aktuellen Methode heraus. Das Herausreichen geschieht mit dem Schlüsselwort throws. In diesem Fall muss sich die äussere Methode um das Behandlen der Ausnahme kümmern.
- 4064 views
4 Programmablauf bei Ausnahmen
4 Programmablauf bei AusnahmenDas folgende Javaprogramm wirft eine ArithmeticException wegen einer Division durch Null in der Methode divide().
Welche Konsolenausgaben erzeugt das Programm wegen seiner System.out.println() Aufrufe?
Das Beispielprogramm:
package s1.block10; public class Frage4 { public static void main(String[] args) { int a = 5; int b = 0; int c = 0; System.out.println("main:before"); c = doubleDiv(a, b); System.out.println("main:after"); } static int doubleDiv(int a, int b) { int d; System.out.println("doubleDiv:before"); d = 2 * divide(a, b); System.out.println("doubleDiv:after"); return d; } static int divide(int a, int b) { int d; System.out.println("divide:before"); d = a / b; System.out.println("divide:after"); return b; } }
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Antwort zu Frage 3: Erkennen von Ausnahmen im Quellcode
public class Ausnahme { public static void main(String[] args) { int a = 5; int b = 0; int c = 0; System.out.println("main:Anfang"); // 1 c = divAussen(a, b); System.out.println("main:Ende"); // 7 } // Ende von main static int divAussen(int a, int b) { int d; System.out.println("divAussen:Anfang"); // 2 try { d = 2 * divInnen(a, b); } catch (ArithmeticException e) { System.out.println("divAussen: Division durch Null"); d = -2; } System.out.println("divAussen:Ende"); // 6 return d; } // Ende von divAussen static int divInnen(int a, int b) { int d; System.out.println("divInnen:Anfang"); // 3 try { d = a / b; // Hier tritt eine Ausnahme auf } catch (IllegalArgumentException e) { System.out.println("divInnen: Division durch Null"); d = -1; } catch (RuntimeException e) { System.out.println("divInnen: Division durch Null;" + " RuntimeException"); // 4 d = -2; } System.out.println("divInnen:Ende"); // 5 return d; } // Ende von divInnen } // Ende der Klasse.
- 4594 views
Ablauf
Hallo,
ich bin von dem "feuern" von "IllegalArgumentException" verwirrt.
Laut Definition dürfte es doch bei einer Division durch 0 gar nicht zu einer solchen kommen (4), nur bei einer "ArithmeticException".
Wenn ich das Programm laufen lasse gibt es mir auch folgende Ausgaben:
run:
main:Anfang (1)
divAussen:Anfang (2)
divInnen:Anfang (3)
divInnen: Division durch Null; RuntimeException (4)
divInnen:Ende (5)
divAussen:Ende (6)
main:Ende (7)
BUILD SUCCESSFUL (total time: 0 seconds)
... es kommt also nach (3) zu keiner IllegalArgumentException.
Es fehlt in ihrer Lösung auch "divInnen:Ende (5)"
MfG .. Norman WIBI 12B
- Log in to post comments
5 Assertions versus Exceptions (Annahmen, Zusicherungen versus Ausnahmen)
5 Assertions versus Exceptions (Annahmen, Zusicherungen versus Ausnahmen)Wann soll ein Entwickler eine Java-Assertion (Annahme, Zusicherung) verwenden und nicht eine Ausnahme (Exception)?
Geben Sie eine kurze Erklärung.
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Antwort zu Frage 4: Programmablauf bei Ausnahmen
main:before
doubleDiv:before
divide:before
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Kurs2.Exception.Frage1.divide(Frage1.java:25)
at Kurs2.Exception.Frage1.doubleDiv(Frage1.java:17)
at Kurs2.Exception.Frage1.main(Frage1.java:10)
- 4579 views
6 Benutzung verschiedener Ausnahmen (Exception) und Zusicherungen, Annahmen (Assertions)
6 Benutzung verschiedener Ausnahmen (Exception) und Zusicherungen, Annahmen (Assertions)In einer Methode A können
- checked Exceptions (Ausnahmen)
- unchecked Exceptions (Ausnahmen) und
- Assertions (Annahmen)
ausgelöst werden.
Ein Entwickler nutzt diese Methode A. Er kennt aber nicht die Implementierung der Methode A.
Fragen:
- Bei welcher der drei Konstrukte, kann er zur Laufzeit das Auslösen durch eine Konfiguration des Laufzeitsystems unterdrücken?
- Auf welche der drei Möglichkeiten muss er beim Aufruf, durch eine entsprechende Implementierung reagieren.
- Warum ist es nicht sinnvoll für alle Ausnahmen die in einer Methode auftreten können eine Behandlung zu implementier)? Nennen Sie eine Beispiel.
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 5 Minuten |
Antwort zu Frage 5: Assertions versus Exceptions (Annahmen, Zusicherungen versus Ausnahmen)
Man verwendet Assertions zum Abfragen von Invarianten/Zuständen die im normalen Programmbetrieb nie vorkommen sollten
Man verwendet Ausnahmen/Exceptions für Zustände/Fehlerfälle die im normalen Progammbetrieb vorkommen können, jedoch eher selten sind.
Man verwendet Ausnahmen insbesondere für Sonderfälle die nicht unter dem direkten Einfluß des Entwicklers stehen. Zum Bsp.: Kein freier Hauptspeicher, keine Netzwerkverbindung.
- 4698 views
7 Programmablauf bei mehrern try-catch-Blöcken
7 Programmablauf bei mehrern try-catch-BlöckenWelche der beiden catch Blöcke werden im folgenden Programm durchlaufen? Welche Ausgaben erzeugt das folgende Programm?
Hinweis: Division durch 0 führen zu einer ArithmeticException.
package s1.block10; public class Frage7 public static void main(String[] args) { int a = 5; int b = 0; int c = 0; System.out.println("main:before"); c = doubleDiv(a, b); System.out.println("main:after"); } static int doubleDiv(int a, int b) { int d; System.out.println("doubleDiv:before"); try { d = 2 * divide(a, b); } catch (ArithmeticException e) { System.out.println("doubleDiv: Division durch Null"); d=-20; } System.out.println("doubleDiv:after"); return d; } static int divide(int a, int b) { int d; System.out.println("divide:before"); try { d = a / b; } catch (ArithmeticException e) { System.out.println("divide: Division durch Null"); d = -1; } System.out.println("divide:after"); return d; } // Ende main() } // Ende Klasse
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 6 Minuten |
Antwort zu Frage 6: Benutzung verschiedener Ausnahmen (Exception) und Zusicherungen, Annahmen (Assertions)
Bei welcher der drei Konstrukte, kann der Entwickler zur Laufzeit das Auslösen durch eine Konfiguration des Laufzeitsystems unterdrücken?
- Das Prüfen von Assertions kann man zur Laufzeit unterdrücken.
Auf welche der drei Möglichkeiten muss er beim Aufruf, durch eine entsprechende Implementierung reagieren.?
- Checked Exceptions
Warum ist es nicht sinnvoll für alle Ausnahmen die in einer Methode auftreten können eine Behandlung zu implementieren? Nennen Sie eine Beispiel.
- Es können in jedem Befehl Ausnahmen auftreten. Die Ausnahme kann durch ein externes Ereignis ausgelöst werden.(Netzwerkfehler, kein Hauptspeicher etc.)
- Beispiel: Eine Out-of-Memory-Ausnahme kann bei fast jedem Aufruf ausgelöst werden.
- 5806 views
Alternative?
Kann man bei der dritten Assertion die einzelnen Prüfungen auch mit && voneinander trennen?
- Log in to post comments
8 Programmablauf bei unterschiedlichen try-catch Blöcken
8 Programmablauf bei unterschiedlichen try-catch BlöckenHinweis: Die Implementierung der Frage 2 unterscheidet sich nur in den benutzten Ausnahmen von der Frage 2.52!
Welche der beiden catch Blöcke werden im folgenden Programm durchlaufen? Welche Ausgaben erzeugt das folgende Programm?
package s1.block10; public class Frage7 { public static void main(String[] args) { int a = 5; int b = 0; int c = 0; System.out.println("main:before"); c = doubleDiv(a, b); System.out.println("main:after"); } static int doubleDiv(int a, int b) { int d; System.out.println("doubleDiv:before"); try { d = 2 * divide(a, b); } catch (RuntimeException e) { System.out.println("doubleDiv: Division durch Null"); d=-2; } System.out.println("doubleDiv:after"); return d; } static int divide(int a, int b) { int d; System.out.println("divide:before"); try { d = a / b; } catch (IllegalArgumentException e) { System.out.println("divide: Division durch Null"); d = -1; } System.out.println("divide:after"); return d; } // Ende main() } // Ende der Klasse
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 6 Minuten |
Antwort zu Frage 7: Programmablauf bei mehrern try-catch-Blöcken
Es wird nur der try-catch Block in divide() aufgerufen:
main:before doubleDiv:before divide:before divide: Division durch Null divide:after doubleDiv:after main:after
- 4545 views
9 Programmablauf bei mehreren catch Blöcken
9 Programmablauf bei mehreren catch BlöckenHier werden in der Methode divide() mehrere Ausnahmebehandlungen (catch Blöcke) zu dem gegebenen try Block angeboten. Welche Blöcke werden ausgeführt und warum? Wie sieht die Konsolenausgabe aus?
package s1.block10; public class Frage9{ public static void main(String[] args) { int a = 5; int b = 0; int c = 0; System.out.println("main:before"); c = doubleDiv(a, b); System.out.println("main:after"); } static int doubleDiv(int a, int b) { int d; System.out.println("doubleDiv:before"); try { d = 2 * divide(a, b); } catch (RuntimeException e) { System.out.println("doubleDiv: RuntimeException"); d = -2; } System.out.println("doubleDiv:after"); return d; } static int divide(int a, int b) { int d; System.out.println("divide:before"); try { d = a / b; } catch (IllegalArgumentException e) { System.out.println("divide: IllegalArgumentException"); d = -1; } catch (ArithmeticException e) { System.out.println("divide: ArithmeticException"); d = -2; } catch (RuntimeException e) { System.out.println("divide: RuntimeException"); d = -3; } finally { System.out.println("divide: geschafft"); } System.out.println("divide:after"); return d; } // ende main() } // Ende Klasse
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 6 Minuten |
Antwort zu Frage 8: Programmablauf bei mehrern try-catch-Blöcken
Der try-catch Block in divide() wird nicht ausgeführt da keine IllegalArgumentException vorliegt. Erst der try-catch Block in der äusseren Methode doubleDiv() kommt zum Zug. Der letzte Dokumentationsaufruf in divide() wird daher nicht aufgerufen.
main:before doubleDiv:before divide:before doubleDiv: Division durch Null doubleDiv:after main:after
- 4624 views
10 Behandeln und Weiterreichen einer Ausnahme
10 Behandeln und Weiterreichen einer AusnahmeIn der folgenden Implementierung wird eine Ausnahme behandelt und dann eine neue erzeugt. Welche Blöcke werden ausgeführt und warum? Wie sieht die Konsolenausgabe aus?
Hinweis: Der Code der im Vergleich zur Frage 9 geändert wurde, ist fett markiert:
package s1.block10; public class Frage10{ public static void main(String[] args) { int a = 5; int b = 0; int c = 0; System.out.println("main:before"); c = doubleDiv(a, b); System.out.println("main:after"); } static int doubleDiv(int a, int b) { int d; System.out.println("doubleDiv:before"); try { d = 2 * divide(a, b); } catch (IllegalArgumentException e) { System.out.println("doubleDiv: IllegalArgumentException: " + e.getMessage()); d = -2; } System.out.println("doubleDiv:after"); return d; } static int divide(int a, int b) { int d; System.out.println("divide:before"); try { d = a / b; } catch (IllegalArgumentException e) { System.out.println("divide: IllegalArgumentException"); d = -1; } catch (ArithmeticException e) { System.out.println("divide: ArithmeticException"); throw new IllegalArgumentException("Ich kann nicht mehr"); } catch (RuntimeException e) { System.out.println("divide: RuntimeException"); d = -3; } finally { System.out.println("divide: geschafft"); } System.out.println("divide:after"); return d; } // Ende main() } // Ende der Klasse
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 6 Minuten |
Antwort zu Frage 9: Programmablauf bei mehreren catch Blöcken
Der erste Catch Block in divide() wird nicht aufgerufen weil die entsprechende Ausnahme nicht vorliegt.
Der zweite Catch Block wird aufgerufen da die Ausnahme die passende ArithmeticExpetion ist.
Der dritte Catch Block wird nicht mehr aufgerufen obwohl eine ArtithmeticException auch eine RuntimeException ist. Die Ausnahme wurde schon im vorhergehenden Block behandelt.
Der finally Block wird immer durchlaufen.
main:before doubleDiv:before divide:before divide: ArithmeticException divide: geschafft divide:after doubleDiv:after main:after
- 4377 views
11 Zwei Arten von Ausnahmen
11 Zwei Arten von AusnahmenBei der Behandlung von auftretenden Ausnahmen muss der Entwickler zwei Arten von Ausnahmen unterscheiden.
Nennen Sie die englischen Namen und charakterisieren Sie die beiden Arten:
- Erste Art (englischer Name): ?
- Was muss der Entwickler hier beachten?
- Zweite Art (englischer Name): ?
- Was muss der Entwickler hier beachten?
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Antwort zu Frage 10: Behandeln und Weiterreichen einer Ausnahme
Interessant: der finally Block wird trotz des Werfens der neuen Ausnahme durchlaufen:
main:before doubleDiv:before divide:before divide: ArithmeticException divide: geschafft doubleDiv: IllegalArgumentException: Ich kann nicht mehr doubleDiv:after main:after
- 3436 views
Frage zur Lösung hier auf der Seite
Warum wird hier in der Lösung nicht die Konsolenausgabe divide:after ausgegeben? Der finally-Block wird ja auch ausgegeben?
- Log in to post comments
12 Syntax und Bedeutung von try-catch Blöcken
12 Syntax und Bedeutung von try-catch BlöckenIn Javacode können Ausnahmen auftreten. Man kann die Ausnahmen in Java mit einer besonderen Sprachkonstruktion behandeln. Sie umfasst das Programmieren von bis zu drei bestimmten Blöcken. Nennen und beschreiben Sie die drei Blöcke in der Reihenfolge des Auftretens. Vervollständigen Sie die Tabelle:
Abfolge | Schlüsselwort des Blocks | Optionaler Block ? [Ja|Nein] |
Kann mehrfach vorkommen? [Ja|Nein] |
Was implementiert man in diesem Block? |
---|---|---|---|---|
1. Block (Anfang) | ||||
2. Block (Mitte) | ||||
3. Block (Ende) |
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 9 Minuten |
Antwort zu Frage 11 Zwei Arten von Ausnahmen
- Erste Art (englischer Name): Unchecked Exceptions
- Was muss der Entwickler hier beachten? Sie müssen nicht mit einem try-catch Block gefangen werden.
- Zweite Art (englischer Name): Checked Exceptions
- Was muss der Entwickler hier beachten? Sie müssen immer mit einem try-catch Block ummantelt werden oder die Ausnahme muss im Methodenkopf deklariert werden
- Was muss der Entwickler hier beachten? Sie müssen immer mit einem try-catch Block ummantelt werden oder die Ausnahme muss im Methodenkopf deklariert werden
Die Antwort zu Frage dieser Seite finden Sie viel weiter unten:
Antwort zu Frage 12: Syntax und Bedeutung von try-catch Blöcken
Abfolge | Schlüsselwort des Blocks | Optionaler Block ? [Ja|Nein] |
Kann mehrfach vorkommen? [Ja|Nein] |
Was implementiert man in diesem Block? |
---|---|---|---|---|
1. Block (Anfang) | try | Nein | Nein | Der Code der eine Ausnahme auslösen kann. |
2. Block (Mitte) | catch | Nein | Ja | Der Code der ausgeführt wird wenn eine Ausnahme aufgetreten ist. |
3. Block (Ende) | finally | Ja | Nein | Zusätzlich: Was ist besonders an diesem Block? Dieser Block wird immer ausgeführt, gleich ob eine Ausnahme aufgetreten ist oder nicht |
- 3482 views
Fragen zu javadoc
Fragen zu javadoc Stefan Schneider Sat, 11/17/2018 - 17:05- 1593 views
1. Dokumentationskommentare
1. DokumentationskommentareDokumentieren Sie die Methode mult. Sie implementiert die Multiplikation zweier Zahle und gibt das Ergebnis aus. Als Dokumentationstext für die Sematik der Methode genügt ein Text wie „multipliziert zwei Werte“.
Achten Sie auf die Notation von:
- Syntax des Dokumentationskommentars
- Dokumentation der Methode mit „multipliziert zwei Werte“
- Dokumentation der Eingabewerte
- Dokumentation des Ausgabewerts
public double mult(double a, double b) { double c = a* b; return c; }
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
- 4395 views
2. Eigenschaften von Dokumentationskommentaren
2. Eigenschaften von DokumentationskommentarenNennen Sie mindesten zwei Eigenschaften der Dokumentationskommentare die man beim Generieren der Kommentare mit javadoc wahlweise Erzeugen oder Unterdrücken kann.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 1: Dokumentationskommentare
/** * multipliziert zwei Werte * @param a erster Faktor * @param b zweiter faktor * @return Ergebnis der Multiplikation */ public double mult(double a, double b) { double c = a* b; return c; }
- 4278 views
3. Kommentieren von Javaprogrammen
3. Kommentieren von JavaprogrammenEin gutes Programm sollte sinnvolle Kommentare enthalten.
Welche 2 Arten von Kommentaren gibt es in Java-Programmen?
Geben Sie jeweils einekurze Erklärung mit einem kleinen Beispiel und unter Angabe eines angemessenen Einsatzzweckes! (Hier ist nicht nach Dokumentationskommentaren für Schnittstellen gefragt)
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 2: Eigenschaften von Dokumentationskommentaren
- Autorinformation
- Versionsinformation
- private Attribute und Methoden
- 4236 views
4. javadoc
4. javadocWas ist an Dokumentationskommentaren besonders im Vergleich zu normalen Kommentaren?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 3: Kommentieren von Javaprogrammen
Zeilenkommentare
// Dies ist ein Zeilenkommentar
Mehrzeilige Kommentare
/* Dies ist ein mehrzeiliger Kommentar */
Antwort zu Frage 4.: javadoc
Sie werden von javadoc aus dem Quellcode ausgelesen und für eine automatisch generierte Dokumentation verwendet.
- 5110 views
Fragen zu Archivieren mit jar
Fragen zu Archivieren mit jar javafrage Sat, 11/17/2018 - 17:22- 1535 views
1. java -jar Option
1. java -jar OptionEin jar Archiv test.jar welches ein Hauptprogramm enthält, lässt sich nicht von der Laufzeitumgebung mit dem Befehl:
java -jar test.jar
starten obwohl alle benötigten Klassen im Archiv gepackt sind.
Das Programm funktioniert jedoch im entpackten Zustand. Was fehlt? – Kurze Erklärung!
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort finden Sie auf der Seite der nächsten Frage (URL rechts unten).
- 5809 views
2. jar versus zip
2. jar versus zipIn Ihrer Entwicklungsgruppe schlägt ein Entwickler vor, eine Anwendung aus mehreren Klassen und Dateien mit dem zip Kommando zu bündeln und auf den Systemen der Endanwender alle benötigten Klassen mit unzip wieder auszupacken. Warum ist ein jar Archiv die bessere Lösung?
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 1: java -jar Option
Ein Eintrag im jar Manifest mit dem Namen der Klasse mit der das Programm gestartet werden soll.
Optional: Der Eintrag muss Main-Class: klassenname lauten
- 5480 views
3. Manifestdatei in jar Archiven
3. Manifestdatei in jar ArchivenWozu dient die Manifestdatei in einem jar Archiv?
Geben Sie eine kurze Erklärung.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 2: jar versus zip
- Es ist nicht garantiert, dass auf allen Zielsystemen das zip Kommando zur Verfügung steht
- jar Archive erlauben es dem Entwickler die Integrität der Anwendung durch eine digitale Signatur zu garantieren,
die Anwendung als einzelne jar Datei auszuliefern und damit potentielle Installationsfehler auszuschließen,
den Namen der Klasse mit der das Programm gestartet werden soll zu definieren
- 4743 views
4. Inspektion einer jar Datei
4. Inspektion einer jar DateiSie erhalten eine Datei unbekannt.jar. Geben Sie den Kommanozeilenbefehl des JDK an mit dem Sie erkennen können was diese Datei enthält.
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zur Frage 3: Manifestdatei in jar Archiven
- zur Deklaration der zum Start zu benutzenden Klasse
- zur Signierung der Datei
- zum Verwalten von Hilfsinformationen wie verwendete JDK version etc
- Copyright und Lizenzinformationen
Antwort zur Frage 4: Inspektion einer jar Datei
jar -tvf unbekannt.jar
- 790 views