Ersten Wert eines Intervalls bei Berechnung einschließen

Semox

Bekanntes Mitglied
Hallo Java Gemeinde

Ich habe meinen Code weitgehend mathematisch debugged, aber bei einer kleinen Sache, die das Javaianische betrifft, bleibe ich hängen. Es handelt sich um die Berechnung von Intervallwerten für eine Parabel. Dabei werden alle Ordinatenwerte korrekt berechnet, jedoch wird der erste Wert nicht berechnet, dafür aber am Ende an die Liste angehängt.

Beispiel: Intervall von -3 über 0 bis +3. Leider wird dann aber bei -2 berechnet und dann am Ende bei +4 aufgehört.

Anbei ist der komplette Code meiner Funktionen:
Java:
import java.util.ArrayList;

public class Functions {

	/*
	 * Teilklasse fuer My totally very own Function-Plotta
	 * 
	 * Die Methode parableValues liefert innerhalb eines zu definierenden
	 * Intervalls Koordinatenwerte fuer eine Parabel. Die Genauuigkeit wird
	 * durch die Anzahl der anzugebenden Schritte festgelegt. Die Ergebnisse
	 * werden in einer ArrayList vom Typ Float gespeichert.
	 * 
	 * @param low float, Untere Grenze eines Intervalls
	 * 
	 * @param upp float, Obere Grenze eines Intervalls
	 * 
	 * @param step int, Anzahl der Berechnungsschritte innerhalb des definierten
	 * Intervalls
	 * 
	 * @param a float, Stauchung oder Streckung einer Parabel
	 * 
	 * @param b float, Verschiebung auf der Abzisse
	 * 
	 * @param c float, Verschiebung auf der Ordinate
	 * 
	 * @returns ArrayList
	 */
	private static ArrayList<Float> parableValues(float low, float upp,
			int step, float a, float b, float c) {
		ArrayList<Float> arr = new ArrayList<Float>(10);

		float range = Math.abs(upp) + Math.abs(low);
		float smallStep = range / step;

		for (int i = 0; i <= step; i++) {

			float xCoord = (low += smallStep);
			System.out.println(xCoord);
			float value = (float) (a * Math.pow(xCoord, 2) + b * xCoord + c);
			arr.add(i, value);
		}

		return arr;
	}

	public static void main(String[] args) {
		System.out
				.println("Testlauf: Funktionswerte generieren und auswerfen.");
		System.out.println(parableValues((float) -3.0, 3.0f, 6, 1.0f, 0.0f,
				0.0f));

	}
}

Über Eure Hilfestellung würde ich mich ergebendst freuen... :noe:

Herzlichen Dank,
Semo
 

lumo

Top Contributor
Code:
float xCoord = low;
        float value;
 
        for (int i = 0; i <= step; i++) {
            System.out.println(xCoord);
            value = (float) (a * Math.pow(xCoord, 2) + b * xCoord + c);
            arr.add(i, value);
            xCoord = (low += smallStep);
        }

1) variablen ausserhalb von schleifen erstellen
2) wenn du in der schleife den wert erhöhst ohne dass du ihn vorher schon mal verwendest...
bsp; x=0
schleife
x=x+1; // jetzt ist x schon nicht mehr 0 sondern schon 1
x verwenden

also entweder den wert erst danach um eins vergrößern oder davor -1 machen damits dann wieder stimmt... :bae:
 

Landei

Top Contributor
1) variablen ausserhalb von schleifen erstellen
Mit Verlaub, das ist Käse! Sichtbarkeitsbereiche immer so klein wie möglich machen, also je weniger Variablen außerhalb der Schleife sichtbar sind, umso besser.

(ungetestet)
Java:
    private static ArrayList<Float> parableValues(float low, float upp,
            int step, float a, float b, float c) {
        if(low >= upp) { 
           throw new IllegalArgumentException("Invalid range"); //alternativ: Werte tauschen
        }
        List<Float> arr = new ArrayList<Float>(step+1);
 
        float smallStep = (upp - low) / step;
 
        for (int i = 0; i <= step; i++) {
            float xCoord = low + i*smallStep;
            System.out.println(xCoord);
            float value = a * xCoord * xCoord + b * xCoord + c;
            arr.add(value); //kein Index nötig, add hängt automatisch "hinten" an
        }
        return arr;
    }

Übrigens:
Java:
float range = Math.abs(upp) + Math.abs(low);
funktioniert nur, wenn low kleiner 0 und upp größer 0 ist, ist also im allgemeinen Fall falsch.

Falls es keine gewichtigen Gründe (etwa Geschwindigkeit bei Grafikanwendungen) dagegen gibt, würde ich immer alle Berechnungen komplett in double machen. In deinem Fall dürfte der Geschwindigkeitsunterschied faktisch null sein, aber bei besserer Präzision.
 

Semox

Bekanntes Mitglied
Hallo lumo

Danke für Deine Antwort. Sie hat mich schoneinmal auf den Weg gebracht zwei Fehler auszumerzen...

@Landei

Übrigens:
Java:
float range = Math.abs(upp) + Math.abs(low);
funktioniert nur, wenn low kleiner 0 und upp größer 0 ist, ist also im allgemeinen Fall falsch.

Danke für die guten Hinweise. Ich habe bei der Ausführung mehrere Testläufe gemacht und nur im speziellen Fall, wenn die untere Grenze gegen die obere Grenze vertauscht wird einen Fehler erhalten, bzw. wenn es schlicht keinen Abstand gibt. Die Fehlerwerferei ist da sehr nützlich =).

Zu Deinem anderen Hinweis: Der Code scheint aber in jedem Fall zu funktionieren und anständige Werte auszugeben. Mir ging es in der Zeile nur darum sicherzustellen, daß ich keine Vorzeichen habe, die mich bei der Abstandsberechnung stören würden.

Hier ein Beispiel, was ich mir dachte:

uG -9; oG 9 --> Abstand = 9 +9 = 18
uG 2; oG 5 --> Abstand = 2 + 5 = 3 .... hmmmm, OK... ist aber richtig für sehr kleine Werte von 7.... :D

Ok... Ich glaube ich hab's verstanden. Ich muß vorher eine Fallunterscheidung machen, war es das worauf Du mich hinweisen wolltest?

Viele Grüße,
Semo
 

Semox

Bekanntes Mitglied
Ich habe den Code mal aktualisiert und korrigiert. Das ist die letzte Fassung:

Java:
import java.util.ArrayList;

public class Functions {

	/*
	 * Teilklasse fuer My totally very own Function-Plotta
	 * 
	 * Die Methode parableValues liefert innerhalb eines zu definierenden
	 * Intervalls Koordinatenwerte fuer eine Parabel. Die Genauuigkeit wird
	 * durch die Anzahl der anzugebenden Schritte festgelegt. Die Ergebnisse
	 * werden in einer ArrayList vom Typ Float gespeichert.
	 * 
	 * @param low double, Untere Grenze eines Intervalls
	 * 
	 * @param upp double, Obere Grenze eines Intervalls
	 * 
	 * @param step int, Anzahl der Berechnungsschritte innerhalb des definierten
	 * Intervalls
	 * 
	 * @param a double, Stauchung oder Streckung einer Parabel
	 * 
	 * @param b double, Verschiebung auf der Abzisse
	 * 
	 * @param c double, Verschiebung auf der Ordinate
	 * 
	 * @returns ArrayList
	 */
	private static ArrayList<Double> parableValues(double low, double upp,
			int steps, double a, double b, double c) {

		if (low >= upp) {
			throw new IllegalArgumentException("Invalid range");
		}

		ArrayList<Double> arr = new ArrayList<Double>(steps + 1);

		double xCoord = low;
		double range = 0;

		if (low < 0) {
			range = Math.abs(upp) + Math.abs(low);
		} else {
			range = upp - low;
		}

		double smallStep = range / steps;

		for (int i = 0; i <= steps; i++) {

			double value = (a * Math.pow(xCoord, 2) + b * xCoord + c);
			arr.add(value);
			xCoord = (low += smallStep);
		}

		return arr;
	}

	public static void main(String[] args) {
		System.out
				.println("Testlauf: Funktionswerte generieren und auswerfen.");
		System.out.println(parableValues(-3.0, 3.0, 6, 1.0, 0.0, 0.0));

	}
}

Mal nur eine Frage... Ist das simpel genug, oder kann man da noch etwas zusammenfassen? Ich möchte ja nicht nur Code schreiben, sondern auch noch schön... Kritik erwünscht...

Viele Grüße,
Semo

EDIT: Javadoc korrigiert.
 

Landei

Top Contributor
Tja, wer lesen kann ist klar im Vorteil! Lass den Blödsinn mit abs und der Fallunterscheidung, upp - low liefert immer das richtige Ergebnis (sofern die Grenzen nicht vertauscht sind, aber das habe ich ja weiter oben schon getestet)
 

Semox

Bekanntes Mitglied
Ja. Lese ist die eine Sache verstehen eine andere... Hab's nun verstanden...

Bsp.
upp = 9
low = -3

range = 9 - (-3) = 12

Danke!

Viele Grüße,
Semo
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
M Stream mit den ersten n natürlichen Zahlen Java Basics - Anfänger-Themen 4
H Erste Schritte Warum misslingt die Auswertung des ersten Aufrufparameters? Java Basics - Anfänger-Themen 4
J Mein Programm läuft bei der ersten Eingabe nicht mehr weiter, woran liegt das? Java Basics - Anfänger-Themen 6
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
M Ersten Index von Array bestimmen Java Basics - Anfänger-Themen 14
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
KogoroMori21 Vorbereitung auf die Programmieren Klausur vom ersten Semester Java Basics - Anfänger-Themen 4
1 Erste Schritte Was denkt ihr über eines meiner ersten Javaprogramme? Java Basics - Anfänger-Themen 2
H Ersten Zug bestimmen Java Basics - Anfänger-Themen 12
Java The Hutt Primzahlen - die ersten 100 Java Basics - Anfänger-Themen 17
M JComboBox ersten Eintrag leerlassen bzw. Platzhalter Java Basics - Anfänger-Themen 1
J Erste Schritte Feedback zum ersten Anfängerprogramm Java Basics - Anfänger-Themen 6
Z Ersten Buchstaben eines Elements eines String-Arrays auslesen Java Basics - Anfänger-Themen 5
M Methoden while liefert nur den ersten Datensatz Java Basics - Anfänger-Themen 12
C Entfernen des ersten String-Elements Java Basics - Anfänger-Themen 6
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
K Frage zu meinem ersten Programm Java Basics - Anfänger-Themen 5
K OOP Die ersten Schritte bei der Programierung Java Basics - Anfänger-Themen 1
S Die ersten vier perfekte Zahlen. Java Basics - Anfänger-Themen 30
Z Meine ersten Gehversuche Java Basics - Anfänger-Themen 11
D Problem mit meinem ersten JOptionPane - Fatal exception occurred. Program will exit. Java Basics - Anfänger-Themen 6
M Ausführen des ersten Java Programms Java Basics - Anfänger-Themen 2
S Problem beim ersten compilieren überhaubt Java Basics - Anfänger-Themen 43
T gebe mir den ersten eltern knoten Java Basics - Anfänger-Themen 3
C ArrayIndexOutOfBoundsException bei meinem ersten objektiorientierten Programm Java Basics - Anfänger-Themen 4
X SAX die ersten Schritte Java Basics - Anfänger-Themen 5
T Datenbank automatisch erzeugen beim ersten Start Java Basics - Anfänger-Themen 6
I Problem beim Schreiben eines ersten Programms Java Basics - Anfänger-Themen 3
B Ersten Eintrag aus einer Map bekommen Java Basics - Anfänger-Themen 11
A Die Werte der ersten beiden markierten Check-Boxen registrieren Java Basics - Anfänger-Themen 11
T zweiter Timer überschreibt den ersten Timer ? Java Basics - Anfänger-Themen 5
D Suche in JList nach dem ersten Buchstaben Java Basics - Anfänger-Themen 2
T zweiter thread killt den ersten Java Basics - Anfänger-Themen 2
T Ersten Buchstaben in einem Wort groß schreiben. Java Basics - Anfänger-Themen 6
L beim ersten compilen schon erste probleme Java Basics - Anfänger-Themen 8
K Programmieren von den ersten 70 Fibonacci-Zahlen Java Basics - Anfänger-Themen 2
S Tomcat Error mit meiner ersten JSF Seite Java Basics - Anfänger-Themen 17
M Problem beim Löschen des ersten Eintrags einer TreeSet Java Basics - Anfänger-Themen 3
G die ersten Zeichen eines Strings Vergleichen mit String Java Basics - Anfänger-Themen 6
G ersten Tag des Monats ermitteln Java Basics - Anfänger-Themen 3
N die ersten drei buchstaben eines Strings ausgeben Java Basics - Anfänger-Themen 2
J Überprüfung ersten Zeichens Java Basics - Anfänger-Themen 7
L Probleme beim ersten JavaProgramm! Java Basics - Anfänger-Themen 4
M meine ersten versuche Java Basics - Anfänger-Themen 8
N Kleines Problem mit meiner ersten Klasse Java Basics - Anfänger-Themen 5
S ersten schritte in Java lernen! Java Basics - Anfänger-Themen 3
thE_29 Vor dem ersten Posten bitte lesen! Java Basics - Anfänger-Themen 1
L Kompletter Neuling: Hilfe beim ersten Java Versuchen Java Basics - Anfänger-Themen 12
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
A Negativ-Wert Java Basics - Anfänger-Themen 4
R finaler Wert in outerMethod von method in InnerMethodClass Java Basics - Anfänger-Themen 2
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Datum als Variable wert Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
T Mit jedem Wert in der for-Schleife weiter arbeiten Java Basics - Anfänger-Themen 3
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
I Historisierung - Alter Wert, Neuer Wert... wie speichern? Java Basics - Anfänger-Themen 44
J Wert in Dropdown Menü kursiv schrieben Java Basics - Anfänger-Themen 19
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
M Wie kann ich festlegen, dass ein Attribut maximal den Wert 0 erreicht, also nicht in den negativen Bereich fällt? Java Basics - Anfänger-Themen 4
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
U Ascii wert verschieben, wie möglich? Java Basics - Anfänger-Themen 3
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
B in einem Array den nächstgelegenen Wert zu einem eingabewert finden Java Basics - Anfänger-Themen 8
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
E Slider - Wert übergeben und überschreiben Java Basics - Anfänger-Themen 5
G Input/Output getText() gibt keinen Wert! Java Basics - Anfänger-Themen 13
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
I Validation, ob String ein Wert aus einem Enum enthält Java Basics - Anfänger-Themen 3
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
T Feststellen, dass Wert zu groß; Caesar Chiffre Java Basics - Anfänger-Themen 3
J maximaler Wert eines Integers Java Basics - Anfänger-Themen 14
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben