Nach Fehler und schlechtem Programmierstiel suchen:

sh33p

Bekanntes Mitglied
Wir im Titel schon gesagt. Hier die Klassen. Vielleicht findet ihr ja noch mehr

Java:
0 // Datei: Fahrzeug.java
1
2 import java.util.*;
3 abstract final class Fahrzeug {
4 protected static String fahrzeugtyp = "";
5 private float preis;
6 private String herstellerName;
7 protected static Scanner scanner = new Scanner (System.in);
8 public Fahrzeug() {
9 System.out.print("\nGeben Sie den Herstellernamen ein: ");
10 herstellerName = scanner.next();
11 System.out.print("Geben Sie den Preis ein: ");
12 try {
13 preis = scanner.nextFloat();
14 } catch (InputMismatchException e) {
15 System.out.println ("Keine gueltige Preisangabe!");
16 System.exit(1);
17 }
18 }
19 public void print() {
20 System.out.println();
21 System.out.println("Herstellername : " + herstellerName);
22 System.out.println("Preis : " + preis);
23 }
24 }
0 // Datei: Pkw.java
1 class Pkw extends Fahrzeug {
2 private String modellBezeichnung;
3 public Pkw() {
4 fahrzeugtyp = "Pkw";
5 super();
6 System.out.print("Geben Sie die Modellbezeichnung ein: ");
7 modellBezeichnung = scanner.next();
8 }
9 public void print() {
10 System.out.println ("Typ : " + fahrzeugtyp);
11 System.out.println ("Modellbezeichnung: " + modellBezeichnung);
12 }
13 }
0 // Datei: Motorrad.java
1 class Motorrad extends Fahrzeug {
2 public Motorrad() {
3 fahrzeugtyp = "Motorrad";
4 }
5
5 public print() {
6 System.out.println ("Typ : " + fahrzeugtyp);
7 }
8 }
0 // Datei: FahrzeugTest.java
1
2 public class FahrzeugTest {
3 public static void main (String args[]) {
4 System.out.println ("Start des Programms");
5 // Anlegen eines Arrays aus 6 Fahrzeugen
6 Fahrzeug[] fahrzeuge;
7 // Die ersten 3 Elemente des Arrays sollen mit Pkws gefuellt werden
8 System.out.println();
9 System.out.println ("3 Pkws");
10 fahrzeuge [0] = new Pkw();
11 fahrzeuge [1] = new Pkw();
12 fahrzeuge [2] = new Pkw();
13 // Die drei letzten Elemente mit Motorraedern fuellen
14 System.out.println();
15 System.out.println ("3 Motorraeder");
16 fahrzeuge [3] = new Motorrad();
17 fahrzeuge [4] = new Motorrad();
18 fahrzeuge [5] = new Motorrad();
19 // Geben Sie in einer Schleife fuer alle Array-Elemente die
20 // entsprechenden Datenfelder aus
21 for (int i = 0; i < 6; i++) {
22 fahrzeuge [i].print();
23 }
24 // Ermittlung des Gesamtwerts aller Fahrzeuge
25 float summe = 0;
26 for (int i = 0; i < 6; i++) {
27 summe += fahrzeuge [i].getPreis();
28 }
29 System.out.println ("\n\nGesamtwert aller Fahrzeuge: " + summe);
30 }
31 }

Hier meine Lösung:

Klasse Fahrzeug:

Zeile 12.

Erstens kann man keine 2 modifier hintereinander schreiben,
desweiteren passt hier weder abstract noch final zum Aufbau der Klasse.

Wir können von Final Klassen keine Klassen ableiten.
Wenn die Klasse abstract sein sollen, dann dürfen keine Methoden
wie print() genauer implementiert sein. Dann das entspricht nicht
dem Zweck von Abstrakten Klassen. Abstrakte Klassen definieren
Methode sozusagen "roh" und werden in den Kindklassen
überschrieben.Die Methoden sind deklariert aber nicht defniert
Desweiteren ist hier keine Methode abstract,so
dass wir gar nicht den modifier abstract verwenden könnten,weil
Abstrakte Klassen mindestens eine Abstrakte Methode enthalten müssen,
damit sie abstrakt sein können.
Ich schlage als modifier public für die Klasse vor.

Die Klasse enhält private Attribute. Diese können bei
Vererbung nicht vererbt werden. Es müssten müssten public get und
setmethoden implementiert werden,damit wir auf die attribute
der Oberklasse zugreifen können.
Ansonsten sind die Attribute nur in der Klasse selber sichtbar
und das nützt,wenn wir Vererbung realisieren wollen gar nichts.





Klasse PKW:

Hier gilt das gleiche mit den Private attributen wie in der Klasse
Fahrzeug.
Zeile 16: super() muss der erste Aufruf im Konstruktor sein:

public Pkw(){
super();
fahrzeugtyp = "PKW";
....
}

Klasse Motorrad:

Die Oberklasse von Motorrad besitzt einen parametrisierten Konstruktor.
Und nur diesen.Keinen parameterlosen. Da die Klasse Motorrad
keinen Konstruktoraufruf tätigt,generiert der compiler super(), aber dieser
Aufruf schlägt fehlt, da kein parameterloser konstruktor vorhanden ist.

Desweiteren hat die Methode print keinen Rückgabewert in dieser Klasse.
Wenn die Methode print aus der Oberklasse überschrieben werden soll,
dann muss sie auch denselben Rückgabewert haben (hier: void).

Klasse Fahrzeugtest:

Zeile 27:

Die Summe ist vom Typ Float,so dass wir ihr überhaupt keinen Wert von int zuweisen können.
Die Methode getPreis existiert gar nicht.
 

eRaaaa

Top Contributor
desweiteren passt hier weder abstract noch final zum Aufbau der Klasse.

Wir können von Final Klassen keine Klassen ableiten.
Wenn die Klasse abstract sein sollen, dann dürfen keine Methoden
wie print() genauer implementiert sein. Dann das entspricht nicht
dem Zweck von Abstrakten Klassen. Abstrakte Klassen definieren
Methode sozusagen "roh" und werden in den Kindklassen
überschrieben.Die Methoden sind deklariert aber nicht defniert

Das stimmt so nicht. Der erste Teil mit final ist korrekt, das würde hier keinen Sinn machen, der Teil mit abstract stimmt so nicht ganz.
....
Desweiteren ist hier keine Methode abstract,so
dass wir gar nicht den modifier abstract verwenden könnten,weil
Abstrakte Klassen mindestens eine Abstrakte Methode enthalten müssen,
damit sie abstrakt sein können.

Nicht korrekt. Andersherum würde es stimmen: Wenn eine Klasse eine abstrakte Methode hat, muss die Klasse selbst auch abstrakt sein.

Also imo würde es hier Sinn machen, die Klasse Fahrzeug abstrakt zu machen, denn es gibt nunmal in der realen Welt kein "Fahrzeug", sondern nur konkrete Fahrzeuge, wie eben PKW oder Motorrad. Wenn du die Klasse NICHT abstrakt machst, kannst du von ihr Objekte erstellen, was meinem letzten Satz widersprechen würde !

/edit
Klasse Motorrad:

Die Oberklasse von Motorrad besitzt einen parametrisierten Konstruktor.
Und nur diesen.Keinen parameterlosen. Da die Klasse Motorrad
keinen Konstruktoraufruf tätigt,generiert der compiler super(), aber dieser
Aufruf schlägt fehlt, da kein parameterloser konstruktor vorhanden ist.

Da scheinst du eine andere Klasse zu haben, als du hier gepostet hast
Java:
public Fahrzeug(){...
 
Zuletzt bearbeitet:

Landei

Top Contributor
Eine Methode wie print ist schlecht, denn sie verstößt gegen das SoC-Prinzip. Die Methode tut zwei Dinge: Einen String zusammenbasteln, der das Objekt beschreibt, und diesen String ausgeben. Aber was ist, wenn du das Objekt in einer Log-Meldung ausgeben willst, oder in einem Unit-Test testen willst? Du kommst nicht ohne weiteres an den String ran. Deshalb: Implementiere lieber die toString()-Methode (die ist genau dafür gedacht) und mach das System.out.println(meinObjekt) [dabei brauchst du das toString nicht einmal aufzurufen, das passiert automatisch] beim Aufruf.
 
J

JohannisderKaeufer

Gast
Das Array von Fahrzeugen wird nicht initialisiert

Für den Fahrzeugtyp könnte man sich unter umständen Enums verwenden.

über print() und toString() wurde ja schon geschrieben. Dennoch bleibt hier zu erwähnen, das ein zusätzliches super.toString() in den toString-Methoden von Motorrad und PKW Sinn machen kann.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Eclipse Nach Export einer .jar Fehler: Hauptklasse konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 5
I Nach Neuinstallation fehler im Quelltext Allgemeine Java-Themen 7
B Regex-Fehler nach lib-Update Allgemeine Java-Themen 2
kodela Von C++ nach Java Allgemeine Java-Themen 1
G WSDL-Aufruf funktioniert nicht mehr nach Umstieg auf Maven Allgemeine Java-Themen 4
Zrebna Tipps für Organisation von Code-Reviews nach einem Pull Request. Allgemeine Java-Themen 5
Ernesto95 HTTP Mit JavaScript erzeugte dynamische Webseite auslesen und nach einem Schlüsselwort durchsuchen Allgemeine Java-Themen 6
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
I 2D-Grafik Vektor-Grafik über die Zwischenablage nach Adobe Illustrator transferieren Allgemeine Java-Themen 8
M Suche nach String mit unbekannten characters Allgemeine Java-Themen 53
L 2 Dimensionale ListArray Abfrage nach einem Wert suchen Allgemeine Java-Themen 5
torresbig Url nach Webseiten-Login auslesen & Daten an Webseite senden Allgemeine Java-Themen 9
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
OnDemand Ram Freigabe erfolgt nicht nach Prozessende Allgemeine Java-Themen 18
G Geotools Probleme nach PC-Wechsel Allgemeine Java-Themen 6
K Verbesserung der Laufzeit beim Sortieren von Einwohnern nach ihrem Geburtsjahr Allgemeine Java-Themen 0
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
I In Java geschriebene Software nach Mac OS portieren Allgemeine Java-Themen 7
M TicTacToe Sound nach jedem Zug Allgemeine Java-Themen 21
I HTML / XHTML Seite nach Excel exportieren. Suche Lib Allgemeine Java-Themen 12
G Methoden Website-URL im Browser öffnen nach erfolgreicher Basisauthentifizierung in Java Allgemeine Java-Themen 12
pkm Frage nach eventuellem syntaktischen Zucker bei der Konkatenation von ArrayLists Allgemeine Java-Themen 4
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
H Collections Aktuellen Index generell und nach Sortierung ausgeben Allgemeine Java-Themen 6
Kirby.exe Filename nach bestimmtem Pattern durchsuchen Allgemeine Java-Themen 5
J Wörterliste nach Wörtern mit u durchsuchen und diese auf der Konsole ausgeben lassen Allgemeine Java-Themen 33
W Pdf verwerfen, weil Checkbox nach Unterschrift geaendert wurde Allgemeine Java-Themen 5
G File not found - nach dem Kompilieren Allgemeine Java-Themen 6
S Swing Speichern nach Button-Klick Allgemeine Java-Themen 5
Meeresgott Effizientester Weg um nach der Value einer verschachtelten Map aufzulösen Allgemeine Java-Themen 5
M Java 8 nach Java 6 konvertieren Allgemeine Java-Themen 7
N Neustarten des Codes nach der Fehlermeldung Allgemeine Java-Themen 17
L Nach dem Login // Java Desktop Software Allgemeine Java-Themen 7
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
F Java Code ausführen direkt nach Anmelden in Windows Allgemeine Java-Themen 2
J Jasper Reports - Compilerproblem nach Umstellung von Groovy auf Java Allgemeine Java-Themen 7
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
S Apache POI Filtern nach bestimmten Kriterium Allgemeine Java-Themen 1
L Korrektur nach der Berechnung vornehmen, aber wie? Allgemeine Java-Themen 11
C Config nach bestimmten Wertdurchsuchen. Allgemeine Java-Themen 2
B Suche nach einem Testprogramm für meine BA Allgemeine Java-Themen 0
B Maven Keycloak library wirft exceptions nach maven package Allgemeine Java-Themen 1
D BufferedReader bricht nach 1248 Iterationen ab Allgemeine Java-Themen 14
G Eclipse Java findet MySQL Driver nach export nicht mehr Allgemeine Java-Themen 2
H IDEA IntelliJ Java Mail funktioniert nach Export nicht mehr! Allgemeine Java-Themen 1
F Zurnung nach Buchstaben und deren Prüfung Allgemeine Java-Themen 9
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
MiMa Sortieren nach Stellenangaben Allgemeine Java-Themen 7
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
J Ausgabe von Links nach Rechts ausgeben? Allgemeine Java-Themen 2
K JAR Datei Corrupt nach Kopieren Allgemeine Java-Themen 4
The Pi 2D-Grafik Tic Tac Toe nach Gewinn rot Allgemeine Java-Themen 1
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
C PDFBox: Nach RegEx ganze Zeile Allgemeine Java-Themen 4
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
L Suche nach CalDav Server API Allgemeine Java-Themen 0
K Java ruft Methoden nicht der Reihe nach auf Allgemeine Java-Themen 14
T Textarea nach nur 1 wort durchsuchen Allgemeine Java-Themen 3
D Methoden Buttons erscheinen doppelt nach Wiederholung in Schleife Allgemeine Java-Themen 1
I nach Image Load in ListView, kann Ordner nicht mehr gelöscht werden Allgemeine Java-Themen 1
K Auf einer Website nach einem String suchen Allgemeine Java-Themen 5
C Eclipse OutOfMemory nach dem exportieren Allgemeine Java-Themen 4
D Erste Schritte Array von einer forschleife nach ausserhalb trasferieren Allgemeine Java-Themen 3
VfL_Freak Große und seltsame Probleme nach Java-Update auf V1.8.0_91 Allgemeine Java-Themen 3
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
D Java Datei nach Eclipse Export funktioniert nicht Allgemeine Java-Themen 0
B Bild aus Jar kann nach Export nicht mehr gefunden werden Allgemeine Java-Themen 13
B Umgebungsvariable Anpassen der Umgebungsvariablen nach Java-Update ? Allgemeine Java-Themen 14
H jid3lib nach schreiben keine Tags im Folder angezeigt Allgemeine Java-Themen 1
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
KilledByCheese Dezimal nach Hexadezimal rechner wirft seltsame exception Allgemeine Java-Themen 4
J Programm meldet "Keine Rückmeldung" nach Verbindung zum Server Allgemeine Java-Themen 4
E Java wird beendet nach paar Sekunden Allgemeine Java-Themen 14
H Best Practice setHeader in jsp nach RequestDispatcher.include Allgemeine Java-Themen 0
L Nach Button drücken den Text festspeichern Allgemeine Java-Themen 9
M .jar nach Datei prüfen Allgemeine Java-Themen 2
F String nach Schlüsselwörtern durchsuchen und ganze Zeile ausgeben Allgemeine Java-Themen 4
HarleyDavidson Input/Output Heruntergeladene Datei direkt nach dem Download öffnen ohne zu speichern Allgemeine Java-Themen 1
J Swing Cursor.WAIT funktioniert nicht nach JFileChooser Allgemeine Java-Themen 1
VfL_Freak JDK installieren Problem mit Erstellungspfad nach Wechsel von Java7 auf Java8 Allgemeine Java-Themen 1
thet1983 nach teilen eines Dateinamens suchen Allgemeine Java-Themen 6
F JLabel nach 5 Sekunden wieder leeren Allgemeine Java-Themen 7
M Fasta nach Mustern durchsuchen dauert zu lange Allgemeine Java-Themen 2
J Bilder halb in falscher Farbe nach kopieren aus Web Allgemeine Java-Themen 3
Thallius Neuen Prozess starten, der auch nach Beedingung des Starter-Prozesses weiterläuft? Allgemeine Java-Themen 5
T Nach Java Update: Jar Datein öffnen sich nicht mehr mit doppelklick Allgemeine Java-Themen 3
S Start des zweiten Threads erst nach Beenden des ersten Threads Allgemeine Java-Themen 13
A Funktionen aufrufen nach Schema x Allgemeine Java-Themen 2
G JavaFX Problem nach Update auf Java 8 Allgemeine Java-Themen 0
AssELAss String jeweils nach x Zeichen Zeilenumbruch Allgemeine Java-Themen 1
F E-Mail aus JAVA senden nach Umstellung auf Netbean 7.4 mit Java 7U45 nicht mehr möglich Allgemeine Java-Themen 4
J Ausgabe nach Excel Allgemeine Java-Themen 1
K PCM_UNSIGNED nach PCM_SIGNED Allgemeine Java-Themen 0
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
AssELAss Zeilenumbruch immer nach bestimmtem Zeichen Allgemeine Java-Themen 1
L Strings nach sortiertem String zurück ordnen Allgemeine Java-Themen 0
A Java - Suche nach Datensatz mit DateChooser Allgemeine Java-Themen 0
L Strings nach gleichem Muster ordnen Allgemeine Java-Themen 4
F Nach Export wird PDF Datei nicht mehr gefunden Allgemeine Java-Themen 0

Ähnliche Java Themen

Neue Themen


Oben