Problem mit Methoden

Guten Tag,

Ich bin gerade dabei Java zu verstehen und mache daher gerade eine Aufgabe in der man ein Auto programmieren soll.
So sieht das ganze jetzt bei mir aus:

public class auto
{
// Anfang Variablen
private String besitzer;
private String marke;
private String farbe;
private double kw;
private double kmStand;
private double geschwindigkeit;
private double tankInhalt;
private double tankVoll;
// Ende Variablen

//Konstruktor
public auto(String b, String m, String f,double kk, double km, double g, double ti, double tv)
{
this.besitzer=b;
this.marke=m;
this.farbe=f;
this.kw=kk;
this.kmStand=km;
this.geschwindigkeit=g;
this.tankInhalt=ti;
this.tankVoll=tv;
}

// Anfang Ereignisprozeduren
.
.
.

Jetzt bin ich jedenfalls dabei die Methoden „fahren“ und „tanken“ zu erstellen und genau hier habe ich Probleme…

„Beim Tanken wird eine Zahl, die den Tankinhalt erhöht, als Integerwert übergeben. Hierbei ist auf das Fassungsvermögen des Tanks zu achten. Wenn die getankte Literzahl das Fassungsvermögen des Tanks übersteigt, ist ensprechend zu handeln.“

Ich dachte mir erst sowas wie

public void tanken(int liter)
{
if(tankInhalt

Moin,

Deine Ansätze sind schon richtig, nur fehlt noch etwas.
Zum Tank: Du musst überprüfen ob der Tankinhalt + Literzahl den Tank zum Überlaufen bringen
würden…

Das würde ich so machen:

public void tanken(double liter)
{
if((tankInhalt + liter)

Auch für das fahren musst Du abfragen, ob die Geschwindigkeit unterhalb der Maximalen ist.

public void fahren(double geschw, double zeit)
{
if(geschw

So ungefähr sollte das funktionieren, Verbesserungen sind natürlich möglich.

Ich denke, das habe ich soweit verstanden!
Nun bin ich gerade am überlegen wie ich das Ganze in einer Bildschirmausgabe einbringe…
System.out.println(„Tankinhalt nach dem Tanken:“+ )

Nun weiß ich eben leider nicht, wie man Methoden am besten ausgibt…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Ich nehme an Du hast die Grundzüge der einzelnen Klassenbestandteile erlernt.
Es existieren nämlich mehrere Arten von Methoden.
In dem vorherigen Beispiel hast Du sogenannte Setter-Methoden verwendet, um einfach einer
existierenden Variable einen neuen Wert zu geben.
Um das Ganze in eine Textausgabe zu packen, benötigst Du nun eine Getter-Methode - die den Wert
„zurückgibt“.
Als Beispiel für Deinen Tankinhalt:

public double getTankInhalt(){
return tankInhalt;
}

Der Aufruf dieser Methode würde so erfolgen:

System.out.println("Tankinhalt nach dem Tanken: " + getTankInhalt() + „Liter“);

Dasselbe Prinzip kannst Du auch auf die anderen Variablen (kmStand, Geschwindigkeit etc.) anwenden.

Danke für deine Antwort!
Hmmm… aber würde ich damit nicht den normalen tankInhalt ausgeben ?
Ich habe in dem Konstruktor ja einen Wert für diesen angelegt, also komplett unberührt von Tanken , etc. …
Ich habe eine System.out.-Anweisung in der ich diesen Wert ausgebe…
Jetzt wollte ich in einer anderen System.out.-Anweisung eben den Wert ausgeben, der herauskommt, wenn die Methode, also das Tanken, durchgeführt wird…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin,

Es ist richtig, dass die Methode die den Tankinhalt zurückgibt, der als letztes definiert wurde.
Um den Tankinhalt also nach dem Füllen ausgeben zu lassen, muss die tanken-Methode vorher
aufgerufen werden.

Beispiel für die Main-Methode:

public static void main (String[] args) {
Auto auo = new Auto(…); // Konstruktor noch befüllen
auto.tanken(…); // Liter angeben, dadurch wird der Tankinhalt ja geändert
System.out.println(„Tankinhalt: " + auto.getTankInhalt() + " Liter“); // geänderter Tankinhalt wird
angezeigt
}

Ahhh, alles klar,danke… jetzt ist mir nur gerade aufgefallen, dass, wenn ich z.B eine Zahl eingebe, die das Tankmaximum übersteigen würde, die Zahl wieder auf den normalen Tankinhalt zurückgesetzt wird…
Also müsste ich eigentlich, wenn zu viel getankt werden soll, so etwas ausgeben wie „Tank ist voll!“

Ich hab das unter „else“ in der if-anweisung der methode tanken versucht, das hat aber nicht funktioniert…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Also die Sache mit dem „Tank voll“ muss extra geregelt werden ODER aber Du editierst die tanken-
Methode.
Wäre empfehlenswert, denn so bekommst Du nach jedem Tanken den aktuellen Stand bzw. gesagt, ob
der Tank voll ist.

Beispiel:

public void tanken(double liter)
{
if((tankInhalt + liter)

Aber müssten die System.out-Anweisungen nicht in die Applikation ? Dort habe ich die anderen System.out-Anweisungen (z.B ""Autotyp: "+a1.getMarke()):wink: auch untergebracht.
Wenn ich die System.out Anweisungen in der Klasse auto lasse, dann stehen diese Anweisungen über den System.Out-Anweisungen der Applikation…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Logisch, das war ja auch nur ein simples Beispiel wie es ebenso funktioniert.

Wenn Du es in Deiner Applikation durchführen willst, musst Du halt dementsprechende Getter-Methoden in Deiner Auto-Klasse nutzen:

public double getTankInhalt(){
return tankInhalt;
}

Und in Deiner main-Klasse rufst Du diesen Wert dann halt auf mit:

Auto auto = new Auto(…);
auto.tanken(…);
System.out.println(„Tankinhalt beträgt: „+auto.getTankInhalt()+“ Liter.“);

Sofern der Tank bereits voll ist, musst Du es halt mit einer if-else-Anweisung umschließen.