Auslagerung von Abschnitten in Methoden

Status
Nicht offen für weitere Antworten.

ChinChan

Mitglied
Hallo Miteinander,

ich habe eine Übungsaufgabe gemacht, die aus einigen Methoden besteht. Leider wusste ich nicht, wie ich Aufgabe C3 und Aufgabe C4 in Methoden auslagere. Mir fällt es noch schwer Methoden zu schreiben, denen ich Objektvariablen übergebe bzw. die Methoden sollen auch Objekte als Ergebnis zurückliefern.

Da es sich um ein Programm handelt, welches nicht so umfangreich ist, würde ich mich freuen, wenn jemand so nett sei und die Kommentierten Abschnitte in die jeweiligen Methoden auslagern könnte. Vielen lieben Dank. Dies wäre für mich sehr hilfreich

Viele Grüß
Verena

Code:
/* KFZ-Programm */
public class AufgabeC {
	
	// Aufgabe C1
	public static double errechneVerbrauch(int gefahrenekm, int liter) {
		return (liter * 100.0) / gefahrenekm;	
	}
	
	// Aufgabe C2
	public static class Pkw {
		public String kennzeichen;
		public int tachoAnfang;
		public int tachoEnde;
		public int benzinGesamt;
		public double verbrauch;
	}
	
	// Aufgabe C3
	public static void liesPkw() {

	}
	
	
	// Aufgabe C4
	public static void druckePkwTabelle() {
		
	}
	

	// Aufgabe C5
	public static void main(String[] args) {
		Pkw liste[] = new Pkw[2];
		
		// Müsste ausgelager werden -> Aufgabe C3
		for (int i = 0; i < liste.length; i++) {
			liste[i] = new Pkw();
			System.out.println("Eingabe " + (i + 1) + ".KFZ");
			liste[i].kennzeichen = Tastatur.liesString("Kennzeichen: ");
			liste[i].tachoAnfang = Tastatur.liesInt("Tacho Jahresanfang: ");
			liste[i].tachoEnde = Tastatur.liesInt("Tacho Jahresende: ");
			liste[i].benzinGesamt = Tastatur.liesInt("Benzin gesamt: ");
			liste[i].verbrauch = errechneVerbrauch(liste[i].tachoEnde - liste[i].tachoAnfang, liste[i].benzinGesamt);
			System.out.println();
		}
		
		// Müsste ausgelagert werden > Aufgabe C4
		System.out.println();
		System.out.println("------------------------------");
		System.out.println("Kennzeichen    Liter/100 km");
		System.out.println("------------------------------");
		
		for (int i = 0; i < liste.length; i++) {
			System.out.println(liste[i].kennzeichen + "          " + liste[i].verbrauch);
		}
		System.out.println("------------------------------");
		
	}	
}
 

hdi

Top Contributor
Eine Methode schreibt man in Java, indem man nacheinander folgende Dinge definiert:

1) Sichtbarkeit
2) statisch oder nicht-statisch?
3) Rückgabewert
4) Name
5) Parameter
6) Code im Rumpf

Also zB:

Code:
public (1) static (2) void (3) druckePkwTabelle (4) ( (5) ) 
{ (6) }

Aufrufen tut man die Methode, indem man den Namen der Methode schreibt, gefolgt von
einer Klammer indem die Parameter übergeben werden (wie jede Anweisung gefolgt von einem ";")

Code:
druckePkwTabell();

In diesem Fall ist die Klammer leer, weil die Methode keine Parameter annimmt, siehe oben. Auch in
der Definition ist ihre Klammer leer. Und es gilt immer:

Das, was in der Klammer bei der Definition der Methode steht, muss auch bei jedem Aufruf in den
Klammern übergeben werden!

Noch ein Bsp:

Code:
public static void summiere( int a, int b){...}

Aufruf:

Code:
summiere(5,2); // richtig! Zwei int-Werte
summiere(8);  // falsch
summiere(); // falsch
summiere("Hallo"); // falsch

Der Rückgabewert ist das, was die Methode zurückgibt *surprise*. Und das geben wir ja bei der Definition
der Methode an (den Rückgabewert). "void" bedeutet "nichts", d.h. deine Methode druckePkwTabelle() gibt
nichts zurück.

Rückgabe heisst lediglich, dass bei einer Anweisung:

Code:
Variable = methodeDieEtwasZurückGibt();

das Zurückgegebene in "Variable" drin steht. Wenn du sowas nicht brauchst, es also nicht abspeichern
musst, was eine Methode zurückgibt, brauchst du das nicht und nimmst eben "void".

Nachdem du jetzt weisst, wie man eine Methode aufruft, und wie man Parameter einer Methode
definiert sowie auch so eine Methode aufruft (das summiere-Beispiel), sollte es dir gelingen, die
2 Dinge auszulagern.

C4 solltest du ohne Probleme hinkriegen.

C3 ist in sofern anders, als dass du den Code nicht einfach an eine andere Stelle verschieben kannst,
weil du an dieser Stelle bestimmte Informationen nicht mehr hast. Hier wäre es "liste", da du dieses Objekt
nur lokal in der main-Methode hast und nicht in der liesPkw() Methode.

Aber es gibt ja Parameter, die man übergeben kann, d.h. du musst bei der Definition der liesPkw() Methode
in die Klammer etwas reinschreiben, was man der Methode mitgeben kann, und das dann auch beim Aufruf
machen.

Wenn du alle Infos, die du brauchst, in deine liesPkw() Methode stecken kannst, kannst du dann auch
wie zB bei C4 ganz easy den Code verschieben.
 

ChinChan

Mitglied
hdi hat gesagt.:
C4 solltest du ohne Probleme hinkriegen.

C3 ist in sofern anders, als dass du den Code nicht einfach an eine andere Stelle verschieben kannst,
weil du an dieser Stelle bestimmte Informationen nicht mehr hast. Hier wäre es "liste", da du dieses Objekt
nur lokal in der main-Methode hast und nicht in der liesPkw() Methode.

Aber es gibt ja Parameter, die man übergeben kann, d.h. du musst bei der Definition der liesPkw() Methode
in die Klammer etwas reinschreiben, was man der Methode mitgeben kann, und das dann auch beim Aufruf
machen.

Wenn du alle Infos, die du brauchst, in deine liesPkw() Methode stecken kannst, kannst du dann auch
wie zB bei C4 ganz easy den Code verschieben.
Vielen lieben Dank für die schnelle Antwort mit Erklärung.

Aufgabe C4 habe ich folgendermaßen gelöst
Code:
     // Aufgabe C4
      public static void druckePkwTabelle(Pkw[] liste) {
			System.out.println();
		System.out.println("------------------------------");
		System.out.println("Kennzeichen    Liter/100 km");
		System.out.println("------------------------------");
		
		for (int i = 0; i < liste.length; i++) {
			System.out.println(liste[i].kennzeichen + "          " + liste[i].verbrauch);
		}
		System.out.println("------------------------------");
	}

       // Methodenaufruf
      druckePkwTabelle(liste);
Es funktioniert, aber ich verstehe nicht, warum ich als Übergabe liste eintrage ohne Klammern. Wird das nicht benötigt?

Ich gehe davon aus, dass ich bei Aufgabe C die Methode folgendermaßen schreiben muss:
Code:
	// Aufgabe C3
	public static Pkw liesPkw() {
	
	}
Halt die große Frage für mich, wie gestaltet sich der Methodenaufruf bzw. welche Parameter muss ich übergeben.
Aber danke für Deine Hilfe schonmal. ;)

Viele Grüße
Verena
 

hdi

Top Contributor
Also liesPKW braucht doch auch die Liste oder? D.h. du gibst ihm den gleichen Parameter wie druckeListe(),
nämlich ein PKW-Array.

Es funktioniert, aber ich verstehe nicht, warum ich als Übergabe liste eintrage ohne Klammern. Wird das nicht benötigt?
Wo sollten denn da Klammern hin? Versteh ich grad nicht, was du meinst. Was hättest du denn erwartet,
wie du die Methode aufrufen musst?
 

Phenix

Bekanntes Mitglied
ups da warst du schneller :)

Ich glaube dir ist der Unterschied zwischen einer Methode und dem Array nicht so ganz klar, kann das sein?
 

ChinChan

Mitglied
hdi hat gesagt.:
Also liesPKW braucht doch auch die Liste oder? D.h. du gibst ihm den gleichen Parameter wie druckeListe(),
nämlich ein PKW-Array.

Es funktioniert, aber ich verstehe nicht, warum ich als Übergabe liste eintrage ohne Klammern. Wird das nicht benötigt?
Wo sollten denn da Klammern hin? Versteh ich grad nicht, was du meinst. Was hättest du denn erwartet,
wie du die Methode aufrufen musst?
Thx. Habe darüber halt nachgedacht, warum keine Klammern dahinter müssen. liste beinhaltet ja nur die Referenz auf Pkw. Damit die Methode liesPkw und druckePkwTabelle damit arbeiten, muss man halt nur die Referenz übergeben.
Und zurückgegeben muss ja eigentlich auch nichts bei dieser Aufgabe. Ergibt ja auch keinen Sinn. ;)

Code:
/* KFZ-Programm */
public class AufgabeC {
	
	// Aufgabe C1
	public static double errechneVerbrauch(int gefahrenekm, int liter) {
		return (liter * 100.0) / gefahrenekm;	
	}
	
	// Aufgabe C2
	public static class Pkw {
		public String kennzeichen;
		public int tachoAnfang;
		public int tachoEnde;
		public int benzinGesamt;
		public double verbrauch;
	}
	
	// Aufgabe C3
	public static void liesPkw(Pkw[] liste) {
			for (int i = 0; i < liste.length; i++) {
			liste[i] = new Pkw();
			System.out.println("Eingabe " + (i + 1) + ".KFZ");
			liste[i].kennzeichen = Tastatur.liesString("Kennzeichen: ");
			liste[i].tachoAnfang = Tastatur.liesInt("Tacho Jahresanfang: ");
			liste[i].tachoEnde = Tastatur.liesInt("Tacho Jahresende: ");
			liste[i].benzinGesamt = Tastatur.liesInt("Benzin gesamt: ");
			liste[i].verbrauch = errechneVerbrauch(liste[i].tachoEnde - liste[i].tachoAnfang, liste[i].benzinGesamt);
			System.out.println();
		}
	}
	
	// Aufgabe C4
	public static void druckePkwTabelle(Pkw[] liste) {
		System.out.println();
		System.out.println("------------------------------");
		System.out.println("Kennzeichen    Liter/100 km");
		System.out.println("------------------------------");
		
		for (int i = 0; i < liste.length; i++) {
			System.out.println(liste[i].kennzeichen + "          " + liste[i].verbrauch);
		}
		System.out.println("------------------------------");
	}
	

	// Aufgabe C5
	public static void main(String[] args) {
		// Eigentlich 15 Elemente, aber zu Testzwecken reichen 2 ;)
		Pkw liste[] = new Pkw[2];
		liesPkw(liste);
		druckePkwTabelle(liste);
	}	
}
Problem gelöst. :)
 

Templon

Bekanntes Mitglied
hdi hat gesagt.:
Ist soweit schon richtig, aber in Java gibt es keine Referenzen. Du übergibst wirklich das Objekt,
nicht einen Pointer darauf! Siehe dazu:

http://www.java-forum.org/de/viewtopic.php?t=5390

Moment mal, du hast da glaube ich etwas falsch verstanden =)

Code:
Object obj = new Object();
void test(Object o) { o = new Object() }

In deinem Link wird nur erklärt, dass es in java kein call by reference gibt sondern nur call by value (Darum funktioniert auch die swap Methode nicht).

Wenn du jetzt test(obj) aufrufts übergibst du die REFERENZ by value, soll heissen o = new Object() hat keinen einfluss auf die obj Referenz, obj zeigt immernoch auf das originale Object.

Hoffe das war verständlich, oder ich irre mich nicht irgendwie =)
 

Ebenius

Top Contributor
hdi hat gesagt.:
1) Sichtbarkeit
2) statisch oder nicht-statisch?
3) Rückgabewert
4) Name
5) Parameter
6) Code im Rumpf

Nur um es nicht falsch/unvollständig da stehen zu lassen: 1. und 2. sind Modifier die in beliebiger Reihenfolge auftreten können. Außerdem hast Du final, synchronized, native und abstract vergessen. Für JLS3 kommen dann noch Type Parameters hinzu (vor 3.).

Mir war langweilig, sorry. :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
TheMenox Methoden Auslagerung von Code aus der "main" Methode sinnvoll? Java Basics - Anfänger-Themen 70
B Laufzeitverschlechterung durch Auslagerung in einzelne Threads Java Basics - Anfänger-Themen 8
F probleme mit classpath/auslagerung von klassen Java Basics - Anfänger-Themen 5
J Fragen zu synrchonized und kritischen Abschnitten Java Basics - Anfänger-Themen 5
B String in in bestimmten abschnitten splitten Java Basics - Anfänger-Themen 2
emreiu Methoden Rekursive Methoden Runter- & Hochzählen Java Basics - Anfänger-Themen 2
U Funktionale Interfaces mit mehreren abstrakten Methoden? Java Basics - Anfänger-Themen 8
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
J Argumente in Methoden übergeben Java Basics - Anfänger-Themen 1
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
Say Class scope und Instance scope und Getter nur selbstgeschrieben Methoden Java Basics - Anfänger-Themen 11
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
Renjiroo Java Bmi Rechner mit Methoden Java Basics - Anfänger-Themen 4
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
Alen123 Erstes Arbeiten mit Methoden. Java Basics - Anfänger-Themen 5
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Gerade oder ungerade Zahl mittels Methoden Java Basics - Anfänger-Themen 13
M Erklärung von Ausnahmebehandlung in Methoden Java Basics - Anfänger-Themen 13
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
L Rekursive Methoden Java Basics - Anfänger-Themen 14
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
W Methoden aufrufen - auch klassenübergreifend? Java Basics - Anfänger-Themen 9
Kotelettklopfer Methoden nicht aufrufbar Java Basics - Anfänger-Themen 34
R Schulaufgabe, Bruache Hilfe mit non-static Methoden Java Basics - Anfänger-Themen 2
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
S abstrakte methoden in subclass? Java Basics - Anfänger-Themen 7
S Methoden - Warum int wenn auch void? Java Basics - Anfänger-Themen 3
H Kann man Methoden öfter aufrufen? Java Basics - Anfänger-Themen 2
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
M Aufruf von statischen Methoden einer anderen Klasse Java Basics - Anfänger-Themen 15
lougoldi Verkettung von Methoden und Konstruktoren Java Basics - Anfänger-Themen 4
Zeppi OOP Methoden mit einander Verknüpfen Java Basics - Anfänger-Themen 6
A Löschen von Leerzeichen in einem char array ohne methoden Java Basics - Anfänger-Themen 6
A Parametar übergabe zwischen Methoden Java Basics - Anfänger-Themen 26
D Methoden nach einer bestimmten Reihenfolge ausführen. Java Basics - Anfänger-Themen 20
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
O Attribute die Methoden zählen Java Basics - Anfänger-Themen 5
M Bräuchte Hilfe bei diesen Methoden Java Basics - Anfänger-Themen 4
G Methoden Methoden mit versch. Datentypen Java Basics - Anfänger-Themen 1
T Ich habe eine Variabel die nicht Methoden übergreifend ist. Kann mir jemand Helfen :) Java Basics - Anfänger-Themen 5
Junger_Basileus Celsius -> Fahrenheit / Strukturierung in statischen Methoden Java Basics - Anfänger-Themen 7
J Verschachtelte Methoden Java Basics - Anfänger-Themen 9
H Methoden in anderen Methoden aufrufen Java Basics - Anfänger-Themen 6
Kawastori Hilfe bei Methoden Übung Java Basics - Anfänger-Themen 6
veryck Methoden Rekursive Methoden mit Rückgabeparameter Java Basics - Anfänger-Themen 9
C Methoden können nicht auf Instanzvariable der Klasse zugreifen Java Basics - Anfänger-Themen 3
P Methoden aufrufen - Fehler Java Basics - Anfänger-Themen 20
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
C Taschenrechner (switch) in Taschenrechner mit Methoden umwandeln Java Basics - Anfänger-Themen 115
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Generics Methoden Java Basics - Anfänger-Themen 7
L Test-Methoden schreiben Java Basics - Anfänger-Themen 13
S throws bei Methoden Java Basics - Anfänger-Themen 4
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6
I Greedy Methode Methoden nutzen Java Basics - Anfänger-Themen 3
C Methoden-Parameter ist Interface Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
S Übergabe von Arrays an Methoden Java Basics - Anfänger-Themen 20
L Methoden Wie Löse ich ext Methoden Aufruf Fehler? Java Basics - Anfänger-Themen 3
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
B Methoden Ausgeben Aufgabe Java Basics - Anfänger-Themen 15
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
T Methoden Verständnis Java Basics - Anfänger-Themen 14
M Feste Reihenfolge von dem Ablauf von Methoden Java Basics - Anfänger-Themen 7
G Java Abstrakte Methoden Java Basics - Anfänger-Themen 2
N Klassen Warum kann meine Klasse nicht auf Methoden der anderen Klasse zugreifen? Java Basics - Anfänger-Themen 6
Ich lerne Java. Methoden Mehrere Methoden mit Punkt Java Basics - Anfänger-Themen 45
Kirby.exe Methoden Aufrufe Java Basics - Anfänger-Themen 4
G Objekte in Methoden? Java Basics - Anfänger-Themen 13
W OOP Warenlager mit Array(Konstruktor, Methoden) Java Basics - Anfänger-Themen 39
B Variablen von Methoden übertragen Java Basics - Anfänger-Themen 2
M Unterklasse soll nicht alle Methoden erben Java Basics - Anfänger-Themen 3
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
H Aufruf von Methoden durch Methoden Java Basics - Anfänger-Themen 3
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
H Wie kann ich durch Methoden definiren? Java Basics - Anfänger-Themen 8
D Methoden Scannervariablen in static Methoden Java Basics - Anfänger-Themen 5
P Verzweigungen und Methoden Java Basics - Anfänger-Themen 10
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
B Methoden Mehrere ähnliche Methoden zusammenfassen Java Basics - Anfänger-Themen 24
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
C Java Methoden "Parameter" Problem Java Basics - Anfänger-Themen 16
B Polymorphie Warum funktionieren polymorphe Referenzvariablen bei überschriebenen Methoden und bei nicht überschriebenen nicht? Java Basics - Anfänger-Themen 3
B Methoden Java Basics - Anfänger-Themen 1
T Körper Brechnung - Lokale Variablen in Methoden übergeben Java Basics - Anfänger-Themen 10
P Methoden richtig anwenden Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben