Vor jeder Multiplikation den linken Multiplikator abrunden

Vampire

Mitglied
Hallo zusammen,

ich habe folgendes Problem: Die Formel (Methode berechneStat) dient dazu, Statuswerte wie Angriff oder Verteidigung zu berechnen. Aber im Spiel ist es so programmiert worden, dass vor jeder Multiplikation der linke Multiplikator auf eine ganze Zahl(Integer) abgerundet wird.

Beispiel: (2*basiswert+pDV+fp/4) -> (2*20.5+25+10/4)=68,5
Wichtig: Egal ob dort 68,9465 oder 68,0001 rauskommen würde es soll immer abgerundet werden(auf 68 bzw. wenn dort 59,87 rauskommt auf 59). Also sozusagen alles nach dem Komma weglassen.

Erst dann wird weiter gerechnet mit (68*level/100+5)*wesen. Hier wieder genau das gleiche, bevor mit wesen multipliziert wird, wird das Zwischenergebnis auf eine ganze Zahl abrunden.


Java:
    //Attribute
	private int level;
	private double basiswert;
	private double statuswert;
	private double wesen;
	private int fp;

    public double berechneStat(int pDV)
	{
		return ((2*basiswert+pDV+fp/4)*level/100+5)*wesen;
	}

Ich hoffe, dass meine Erklärung schlüssig ist.

Vielen Dank für Euere Hilfe

Lg Vampire
 

darkeye2

Bekanntes Mitglied
öm, was genau ist das problem, wenn du deine rechnung machst:
(2*basiswert+pDV+fp/4)
und diese dann in einen int cast, passiert genau dass, was du willst (wird einfach abgeschnitten:
(int)(2*basiswert+pDV+fp/4)
somit würde das bei dir so aussehen (notfalls musst du anpassen, wo genau du runden willst:
Java:
    public double berechneStat(int pDV)
    {
        return (double) ( ((int)((2*basiswert+pDV+fp/4)*level/100+5))*(int)wesen );
    }

sollte doch das tun, was du willst, ansonsten hab ich dein problem nicht ganz verstanden
 

Vampire

Mitglied
Danke für den Tipp mit (int)(...)

Da ich mit den ganzen Klammern und so durcheinander gekommen bin hab ichs jetzt einfach so gemacht:

Java:
    public double berechneStatusAusLevel(int pLevel)
    {
    	int mZE1=(int)(2*basiswert+dvWert+fp/4);
    	int mZE2=(int)(mZE1*pLevel/100+5);
    	return mZE2*wesen;    	
    }
 
Zuletzt bearbeitet:

darkeye2

Bekanntes Mitglied
also:
du kannst in java erzwingen, das ein datentyp zu einem anderen datentyp wird, durch sogenanntes casten:
Java:
double i = 0.123;  //hier ist es ein double und wenn ich jetzt ne methode hab, die einen int zurückgibt, kann sie nicht i zurückgeben
                 //weil es der false datentyp ist.
int t = (int) i; //somit erzwinge ich, dass aus dem double ein int wird, da int aber keine komma hat und somit keinen wert von
               //0.123 haben kann wird einfach beim komma abgeschnitten, und der integer hat den wert 0

das funktioniert mit vielen datentypen, du kannst grundsätzlich aus jedem kleineren datentyp einen größeren machen:
Java:
short i = 1;
int t = i; //kein problem, da short nur 2 byte hat und diese problemlos in ein int passen
short f = t; // dies würde NICHT einfach so gehen, auch wenn der wert  von t garantiert in einen short passen würde
          //(war ja ursprünglich unser i)
//um das jetzt zu machen müssen wir casten:
short  f= (short) t; // das klappt jetzt problemlos

das sollte man nur dann machen, wenn man weiß, dass der wert da auch wirklich rein passt, oder es wie in deinem fall erwünscht ist, dass informationen verloren gehen.

Der genau aufbau ist folgender
datentyp2 varialbenName = (datentyp2) varialbe; // wobei varialbe vom varialbentyp1 ist
da bei dir mehrere werte verrechnet werden machst du eine klammer drum rum:
Java:
double i = 0.123;
double j = 2.345;
int r = (int) (i*j); //nun wird erst ausmultipliziert und dann erst gecastet (also die nachkommastellen abgeschnitten
                    //das ergebniss sieht hier nun so aus: 0, weil i*j = 0,288435 und die nachkommastellen werden beim
                    //casten einfach abgeschnitten.

hier hat es jetzt keine rolle gespielt, ob ich davor oder danach caste:
0.123*2.345 = 0.288 somit als int 0;
(int) i*(int) j => 0*0 = 0 somit schon wieder 0.
ganz anders sieht es aus, wenn man andere werte hat, z.b.:
i = 0.9;
j = 5;
i*j = 4.5 somit als int 4;
(int) i*(int) j= 0 * 5 = 0 somit völlig anderer wert, weil jede zahl einzelne gecastet wurde, und somit aus 0.9 bereits vor dem multiplizieren 0 wurde.

hoffe du hast es verstanden
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
B Array bei jeder Eingabe um eins erweitern Java Basics - Anfänger-Themen 3
B Erste Schritte Guice Injection nicht in jeder Klasse möglich Java Basics - Anfänger-Themen 2
G if Abfrage: Nicht jeder Fall berücksichtigt Java Basics - Anfänger-Themen 2
Xentox501 keyevent.VK_LEFT wird beim drücken jeder belibigen Taste aktiv. Java Basics - Anfänger-Themen 3
C Compiler-Fehler Wird eine if Bedingung nach einer for-Schleife nach jeder Iteration überprüft? Java Basics - Anfänger-Themen 1
J Durchschnitt jeder Zeile und und Spalte in einem 2D Arrays berechnen Java Basics - Anfänger-Themen 6
L OOP Neues Objekt bei jeder Eingabe erstellen (Objekte speichern?) Java Basics - Anfänger-Themen 10
Tom299 Log4j in jeder Klasse definieren? Java Basics - Anfänger-Themen 12
B Zweidimensionales Array Elemente jeder Spalte zählen Java Basics - Anfänger-Themen 9
K Regex - Jeder buchstabe nur einmal Java Basics - Anfänger-Themen 7
S JTabbedPane jeder Tab in einer eigenen java Datei? Java Basics - Anfänger-Themen 3
Binary.Coder Vor und nach jeder Codezeile etwas einfügen Java Basics - Anfänger-Themen 3
L Array von Buttons, jeder soll MouseListener haben Java Basics - Anfänger-Themen 5
K JDBC - Typ Connection in jeder Klasse neu öffnen? Java Basics - Anfänger-Themen 4
K in jeder klasse SQLExceptions??? Java Basics - Anfänger-Themen 2
G HILFE!!! JEDER MONAT HAT 31 TAGE Java Basics - Anfänger-Themen 2
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7
S Multiplikation von zwei Labels Java Basics - Anfänger-Themen 7
F Matrix Multiplikation Java Basics - Anfänger-Themen 3
G Java Bruchrechner Addition, Multiplikation... Java Basics - Anfänger-Themen 12
Z Matrix Klasse mit Mehrdimensionalen Array (Addition, Multiplikation, to String) Java Basics - Anfänger-Themen 57
O Erstes Programm: Matrizen Multiplikation Java Basics - Anfänger-Themen 10
H Variablen Multiplikation einer inkrementierten Variablen Java Basics - Anfänger-Themen 5
D Methoden Matrix Multiplikation Java Basics - Anfänger-Themen 27
J Funktionsaufrufe Multiplikation von Arrays Java Basics - Anfänger-Themen 3
Joker4632 Klassen BigDecimal Multiplikation liefert nicht erwarteten Wert Java Basics - Anfänger-Themen 6
TomatenBrot447 Adapter für eine optimierte Multiplikation Java Basics - Anfänger-Themen 5
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
K Multiplikation zweier Matrizen Java Basics - Anfänger-Themen 23
P Variablen Negatives Ergebnis bei Multiplikation von großen Zahlen Java Basics - Anfänger-Themen 2
R Matrix-Vektor-Multiplikation Java Basics - Anfänger-Themen 13
K Seltsames Ergebnis in Netbeans bei einfacher Multiplikation Java Basics - Anfänger-Themen 5
T Operatoren Multiplikation nur mit Addition, Subtraktion und Vergleich Java Basics - Anfänger-Themen 29
S Multiplikation durch Addition, Subtraktion und Vergleich von Zahlen Java Basics - Anfänger-Themen 14
M Matrix Matrix Multiplikation Java Basics - Anfänger-Themen 6
W Multiplikation mit rekursivem Aufruf Java Basics - Anfänger-Themen 17
S Multiplikation von großen Zahlen, ohne BigInt uä Java Basics - Anfänger-Themen 7
F.S.WhiTeY Multiplikation nach der Schulmethode Java Basics - Anfänger-Themen 6
K Matrizen Multiplikation Java Basics - Anfänger-Themen 3
B Multiplikation bei Generics Java Basics - Anfänger-Themen 9
G Multiplikation falsches Ergebnis Java Basics - Anfänger-Themen 5
K double Multiplikation Java Basics - Anfänger-Themen 2
K einfache Multiplikation Java Basics - Anfänger-Themen 6
2 Variablenüberlauf bei Addition, Multiplikation Java Basics - Anfänger-Themen 2
O Überlauf durch Multiplikation Java Basics - Anfänger-Themen 7
M Zufallszahl generieren mit einer linken und rechten Grenze Java Basics - Anfänger-Themen 3
K (JTable) Text einer Zelle auf der linken Seite kürzel Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben