System.out.println("Das Auto ist "+if(zeit<zeit2){zeit2-=zeit;}else{zeit-=zeit2;}+" zu schnell gefahren.");
ich das nicht machen kann.
Bitte keine Lösungen sondern eher Tipps, da ich erst seid kurzem Java lerne.
Java:
package auto;publicclassAuto{publicint benzienstand =100;publicint benzienstand2;publicint geschwindigkeit =100;publicint geschwindigkeit2;publicint zeit =60;publicint zeit2;publicint geschwindigkeit_;publicAuto(int benzienstand_,int geschwindigkeit_,int zeit_){
benzienstand2 = benzienstand_;
zeit2 = zeit_;
geschwindigkeit2 = geschwindigkeit_;}publicvoidauswertung(){System.out.println("Das Auto hat für 100 km "+ zeit2 +" min gebraucht");System.out.println("Das Auto hat für 100 km "+(benzienstand-benzienstand2)+"Liter gebraucht");System.out.println("Das Auto ist "+if(zeit<zeit2){zeit2-=zeit;}else{zeit-=zeit2;}+" zu schnell gefahren.");}}
Fehlermeldung
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Syntax error on token(s), misplaced construct(s)
Syntax error on token "}", ( expected after this token
The left-hand side of an assignment must be a variable
Syntax error, insert "AssignmentOperator Expression" to complete Expression
at auto.Auto.auswertung(Auto.java:22)
at auto.Hauptklasse.main(Hauptklasse.java:15)
Naja, überleg doch mal... wenn du was zurückgeben willst, brauchst du eine Methode. if ist aber keine Funktion, sondern ein Statement. Wenn du ´nen Rückgabewert haben willst, such mal nach dem sogenannten ternären Operator...
oder teile deine Ausgabe halt auf i
warum rechnest du anzahlDim++? Rein logisch betrachtet passt das nicht zu deinem Input befehl:
Ein Array mit 5 Elementen läuft von Index 0-4. beeinhaltet also trotz das es bei 0 anfängt 5 Elemente.
Bei deiner Rechnung wird dein Array immer 1 grösser als Eingegeben wurde, ist das gewollt?
Ansonsten kommt es bei
Java:
for(int i =1; i < anzahlDim; i++){System.out.println(anzahl +". Auto");
autos[i].auswertung();
anzahl++;}
auf den Rückgabewert der Methode Auswertung an, wenn es sich um einen String handelt kannst du ihn auch bei System.out mit unterbringen. Mir fällt hier gerade auf das du bei i=1 anfängst zu zählen. Ich nehm also mal an das mit dem Array von oben war tatsächlich gewollt.
Java:
for(int i =1; i < anzahlDim; i++){System.out.println(i +". Auto"+ autos[i].auswertung());// Ich habe "anzahl" durch i ersetzt, da du in deiner main Methode die variable anzahl überhaupt nicht benutzt ausser in der Ausgabeschleife und der Wert identisch mit i ist;)}
EDIT// Bei der Erzeugung der Autos hingegen fängst du mit Laufindex 0 an. Du Erzeugst ein Auto im Index 0 was du nie Ausgibst da du in der Ausgabe erst bei 1 anfängt, ist dir das bewusst?
EDIT// Bei der Erzeugung der Autos hingegen fängst du mit Laufindex 0 an. Du Erzeugst ein Auto im Index 0 was du nie Ausgibst da du in der Ausgabe erst bei 1 anfängt, ist dir das bewusst?
Ja, war ein denkfehler ^^ in der letzten Aufgabe sollte ich Array 0/0 nicht ausgeben.
In der Klasse Auto (code weiter unten), habe ich das Problem dass er mir nicht die ganze Ausgabe gibt, falls die Variable Zeit2 (wie lange braucht das Auto für 100 km), grösser ist als Zeit (was wäre zulässig).
Die Ausgabe sieht dann so aus:
1. Auto
Variable:Zeit47.0
Das Auto hat für 100 km 47.0 min gebraucht.
Das Auto hat für 100 km 55 Liter verbraucht.
Das Auto ist 27
Variable:Zeit47.0
Ich glaube entweder hat es mit (int) zu tun oder mit den Klammern, aber es ist nicht möglich zu sehen wie er die Klammer auflöst und ein Fehler vom Programm gibt es auch nicht.
Java:
package auto;publicclassAuto{publicint benzienstand =100;publicint benzienstand2;publicdouble geschwindigkeit =100.00;publicdouble zeit =60.00;publicdouble zeit2;publicAuto(int benzienstand_,int zeit_){
benzienstand2 = benzienstand_;
zeit2 = zeit_;}publicvoidauswertung(){System.out.println("Variable:Zeit"+zeit2);System.out.println("Das Auto hat für 100 km "+ zeit2
+" min gebraucht.");System.out.println("Das Auto hat für 100 km "+(benzienstand - benzienstand2)+" Liter verbraucht.");System.out
.printf("Das Auto ist "+((zeit > zeit2)?(int)((100/((zeit2 /60)))-geschwindigkeit):((int)(geschwindigkeit-(100/((zeit2 /60)))))+" km"+((zeit < zeit2)?" zu schnell ":" längsamer als erlaubt ")+"gefahren.\n\n"));System.out.println("\nVariable:Zeit 2 "+zeit2+"\n\n");}}
Genauer:
Java:
+(benzienstand - benzienstand2)+" Liter verbraucht.");System.out
.printf("Das Auto ist "+((zeit > zeit2)?(int)((100/((zeit2 /60)))-geschwindigkeit):((int)(geschwindigkeit-(100/((zeit2 /60)))))+" km"+((zeit < zeit2)?" zu schnell ":" längsamer als erlaubt ")+"gefahren.\n\n"));
Prüfe mal deine "()" Setzung dann kommst auch auf das richtige raus, würde da eh bei sovielen Klammern auf varibalen zurückgreifen
Java:
int schnell =(int)Math.round((100/(zeit2/60))- geschwindigkeit);int langsam =(int)Math.round(geschwindigkeit -(100/(zeit2 /60)));System.out.printf("Das Auto ist "+(zeit > zeit2 ? schnell : langsam)+" km"+(zeit < zeit2 ?" zu schnell ":" längsamer als erlaubt ")+"gefahren.\n\n");
EDIT: Kannst auch gleich anstatt überall double float benutzen wenn du den double adressraum nicht brauchst das würde auch das cast auf int ersparen im fall von Math.round :rtfm:
Prüfe mal deine "()" Setzung dann kommst auch auf das richtige raus, würde da eh bei sovielen Klammern auf varibalen zurückgreifen
Java:
int schnell =(int)Math.round((100/(zeit2/60))- geschwindigkeit);int langsam =(int)Math.round(geschwindigkeit -(100/(zeit2 /60)));System.out.printf("Das Auto ist "+(zeit > zeit2 ? schnell : langsam)+" km"+(zeit < zeit2 ?" zu schnell ":" längsamer als erlaubt ")+"gefahren.\n\n");
EDIT: Kannst auch gleich anstatt überall double float benutzen wenn du den double adressraum nicht brauchst das würde auch das cast auf int ersparen im fall von Math.round :rtfm: