Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Bei der Methode liefereSieger muss ich die Methode so ändern, dass das Auto, das eine längere Strecke als andere gefahren ist, ist Sieger.
Jetzt ist hier fahre1 Sieger, aber wie ändert sich die Methode?
fahrer1= 10,2
fahrer2=10,1
fahrer3=10,05
Streckenlänge=10, 00
[CODE lang="java" title="Code"] public Rennauto liefereSieger()
{
if(fahrer1.gibGefahreneStrecke()>= streckenLaenge)
{
sieger = fahrer1;
return sieger;
}
else if(fahrer2.gibGefahreneStrecke()>= streckenLaenge)
{
sieger = fahrer2;
return sieger;
}
else if(fahrer3.gibGefahreneStrecke()>= streckenLaenge)
{
sieger = fahrer3;
return sieger;
}
else
{
return null;
}
}[/CODE]
a) Du kennst den && Operator noch nicht gut genug und solltest Ihn Dir noch einmal im Detail und in Ruhe ansehen.
b) Du solltest Dir genau überlegen, was du vergleichen willst.
Vergleiche macht man mit == nicht mit = als Anmerkung.
Spielen wir das Beispiel doch mal mit ein paar Zahlen durch. Wo kommt streckenLaenge her? Wenn Streckenlaenge 100 ist und fahrer1 101 gefahren ist und fahrer2 100, wer ist dann nach deinem Code der Sieger?
Edit: Du hast ja im Startbeitrag sogar Zahlen - spiel es damit mal Schritt für Schritt durch.
Vergleiche macht man mit == nicht mit = als Anmerkung.
Spielen wir das Beispiel doch mal mit ein paar Zahlen durch. Wo kommt streckenLaenge her? Wenn Streckenlaenge 100 ist und fahrer1 101 gefahren ist und fahrer2 100, wer ist dann nach deinem Code der Sieger?
Edit: Du hast ja im Startbeitrag sogar Zahlen - spiel es damit mal Schritt für Schritt durch.
Vergleiche macht man mit == nicht mit = als Anmerkung.
Spielen wir das Beispiel doch mal mit ein paar Zahlen durch. Wo kommt streckenLaenge her? Wenn Streckenlaenge 100 ist und fahrer1 101 gefahren ist und fahrer2 100, wer ist dann nach deinem Code der Sieger?
Edit: Du hast ja im Startbeitrag sogar Zahlen - spiel es damit mal Schritt für Schritt durch.
Anstelle wild, nicht funktionierenden Code rein zu werfen, erkläre doch mal Schritt für Schritt wer bei den von dir gelieferten Zahlen wer der Sieger ist:
Anstelle wild, nicht funktionierenden Code rein zu werfen, erkläre doch mal Schritt für Schritt wer bei den von dir gelieferten Zahlen wer der Sieger ist:
Gefahrene Strecke von Fahrer 1 ist größer als gefahrene Strecke von Fahrer 2 und gefahrene Strecke von Fahrer 1 ist größer als gefahrene Strecke von Fahrer 3
Gefahrene Strecke von Fahrer 1 ist größer als gefahrene Strecke von Fahrer 2 und gefahrene Strecke von Fahrer 1 ist größer als gefahrene Strecke von Fahrer 3
Er ist mehr Strecke als die anderen nach dem Zielpunkt gefahren ist und das bedeutet, dass er das Ziel schneller als die anderen erreicht hat, dann ist er der erste Sieger.
Er ist mehr Strecke als die anderen nach dem Zielpunkt gefahren ist und das bedeutet, dass er das Ziel schneller als die anderen erreicht hat, dann ist er der erste Sieger.
Ich denke du solltest die Frage nach der benötigten Zeit hinten anstellen, weil sie hier irrelevant ist. Achte einfach in Zukunft darauf dich präzise auszudrücken. Wenn du Strecke meinst, dann sage Strecke und nicht Zeit.
EDIT: Gottseidank studierst du nicht Physik, du würdest uns vermutlich ins Chaos stürzen
Gefahrene Strecke von Fahrer 1 ist größer als gefahrene Strecke von Fahrer 2 und gefahrene Strecke von Fahrer 1 ist größer als gefahrene Strecke von Fahrer 3
Das Problem, das ich hier etwas sehe ist einfach nur: Die Lösung zu präsentieren wird dem TE nicht helfen. Die Ermittlung genau dieser Aussagen ist ja der wichtige Punkt, der geleistet werden muss. Die "Übersetzung" in Java ist dann ja fast nebensächlich.
Wie vermittelt man dies aber? Die Frage stellt sich ja regelmäßig hier im Forum und mein Ansatz mit dem "Stift und Papier" wird ja selten wirklich aufgegriffen und ist daher nicht so effektiv, wie ich es mir erhoffen würde.
Da wären andere Ansätze evtl. gut. Aber ich sehe da bisher keine Alternativen.
- Lösungen präsentieren sehe ich problematisch
- Irgendwelche Formalismen wie von mir in dem Thread sehe ich auch nicht wirklich als hilfreich an. Das ist zwar ein formaler, valider weg, aber das hilft einem Anfänger vermutlich weniger.
/*
* Setzt das übergebene Auto auf eine freie Spur.
* @param das Rennauto, welches am Rennen teilnehmen möchte.
*/
public void setzeAufSpur(Rennauto auto)
{
if(auto != null && fahrer1 == null)
{
fahrer1 = auto;
}
else if(auto != null && fahrer2 == null)
{
fahrer2 = auto;
}
else if(auto != null && fahrer3 == null)
{
fahrer3 = auto;
}
else
{
throw new IllegalArgumentException("Tut mir Leid. Versuche es später erneut.");
}
}
/*
* Jeder Fahrer simuliert eine Fahrt für einen festgelegten Zeitraum.
*/
public void simuliereZeitabschnitt()
{
fahrer1.fahre();
fahrer2.fahre();
fahrer3.fahre();
}
/*
* Überprüft, ob eines der Autos das Ende der Strecke erreicht hat.
* @return das Auto, welches das Ziel erreicht,
*/
public Rennauto liefereSieger()
{
if(fahrer1.gibGefahreneStrecke() >= fahrer2.gibGefahreneStrecke() && fahrer1.gibGefahreneStrecke() >= fahrer3.gibGefahreneStrecke())
{
sieger = fahrer1;
return sieger;
}
else if(fahrer2.gibGefahreneStrecke() >= fahrer1.gibGefahreneStrecke() && fahrer2.gibGefahreneStrecke() >= fahrer3.gibGefahreneStrecke())
{
sieger = fahrer2;
return sieger;
}
else if(fahrer3.gibGefahreneStrecke() >= fahrer2.gibGefahreneStrecke() && fahrer3.gibGefahreneStrecke() >= fahrer1.gibGefahreneStrecke())
{
sieger = fahrer3;
return sieger;
}
else
{
return null;
}
}
/*
* Das Rennen wird gestartet.
*/
public void rennenDurchfuehren()
{
while(liefereSieger() == null)
{
simuliereZeitabschnitt();
if(liefereSieger() != null)
{
System.out.println("Der Fahrer " + liefereSieger().gibFahrer() + " hat gewonnen");
}
}
}
/*
* Ein Fahrer wird von seiner Strecke disqualifiziert.
* @param das Rennauto, welches nicht mehr am Rennen teilnehmen darf.
*/
public void entferne(Rennauto auto)
{
if(fahrer1 == auto)
{
fahrer1 = null;
}
else if(fahrer2 == auto)
{
fahrer2 = null;
}
else if(fahrer3 == auto)
{
fahrer3 = null;
}
else
{
throw new IllegalArgumentException("Das übergebene Auto wurde nicht für das Rennen angemeldet.");
}
}
}
[CODE lang="java" title="Code"]public class Rennauto
{
private String name;
private String fahrzeugTyp;
private int maxSpeed;
private int gefahreneStrecke;
/**
* Initialisiere die Eigenschaften in einem geeigneten Konstruktor.
* @param String nameFahrer, String fahrzeugTyp, int maxSpeed
*/
public Rennauto(String nameFahrer, String fahrzeugTyp, int maxSpeed)
{
name = nameFahrer;
this.maxSpeed = maxSpeed;
this.fahrzeugTyp = fahrzeugTyp;
gefahreneStrecke = 0;
}
/**
* Definiere einen Konstruktor, indem der Name der Fahrerin übergeben wird.
*/
public Rennauto(String nameFahrer)
{
name = nameFahrer;
maxSpeed = 120;
fahrzeugTyp = "GTR";
gefahreneStrecke = 0;
}
/**
* Führe die Methode fahre, dass sie für einen festen Zeitabschnitt fährt, aus.
* Aufruf ist nur möglich, wenn die Geschwindigkeiz zwischen 0 und Maxgeswindigkeit liegt.
* Benutze die Methode Math.rondom
*/
public void fahre()
{
int time = 9;
int currentSpeed = (int)(Math.random() * maxSpeed);
gefahreneStrecke += currentSpeed * time;
}
/**
* Gib die gefahrene Strecke an.
* @return gefahrene Strecke
*/
public int gibGefahreneStrecke()
{
return gefahreneStrecke;
}
/**
* Gib der Name des Fahrer an.
* @return Name
*/
public String gibFahrer()
{
return name;
}
}
[/CODE]
Das sind ja alles nur Klassen. Klassen sind die Baupläne für Objekte. Irgendwo musst du das jetzt "zusammenbauen". Eine Rennbahn erzeugen, Rennautos hinzufügen, das Rennen starten usw.
Beispiel:
Java:
// Klasse ist der Bauplan eines Autos
class Auto {
// viel mehr Code
public void fahre() {
// irgendwelcher Code zum Fahren
}
}
// dann z. B. in der main()
Auto bmw = new Auto(); // hier wird ein konkretes Auto erzeugt
Auto audi = new Auto(); // und noch eines
bmw.fahre(); // das Auto fährt jetzt
audi.fahre();
Dann schaue dir doch mal an welchen Datentyp deine Methode gibGefahreneStrecke() zurück gibt.
Das ist nur ein int. Was sind deine Ausgangs Werte Kommazahken.
Dann schaue dir doch mal an welchen Datentyp deine Methode gibGefahreneStrecke() zurück gibt.
Das ist nur ein int. Was sind deine Ausgangs Werte Kommazahken.
fahrer1= 10,2
fahrer2=10,1
fahrer3=10,05
Dann schaue dir doch mal an welchen Datentyp deine Methode gibGefahreneStrecke() zurück gibt.
Das ist nur ein int. Was sind deine Ausgangs Werte Kommazahken.
Dann schaue dir doch mal an welchen Datentyp deine Methode gibGefahreneStrecke() zurück gibt.
Das ist nur ein int. Was sind deine Ausgangs Werte Kommazahken.
Also soweit ich das sehe, ergibt sich die gefahrene Strecke, wenn man mit dem Auto "fährt". Die wird nicht direkt gesetzt. Keine Ahnung ob die am Anfang gezeigten Werte überhaupt relevant sind oder nur Beispiele des TE.