Variablen Abbruchbedingung: Dezimalzahl

Bitte aktiviere JavaScript!
Hi,
ich wollte grade eine do while Schleife erstellen die solange läuft wie Variable x keine Kommazahl ist. Ich hatte die Idee den Restwertoperator zu nutzen und das sah dann wie folgt aus: while (x%2==0); .
Das Problem ist allerdings, dass dadurch ungerade Zahlen die Schleife auch stoppen was nicht sein sollte.
Habt ihr Ideen wie ich das Problem lösen kann?
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
do while Schleife erstellen die solange läuft wie Variable x keine Kommazahl ist
Was hast du vor? Typischerweise erhält man wegen der Fließkommaarithmetik so gut wie nie exakte ganze Zahlen. (Meintest du x%1==0 ? )

Bsp:
Java:
System.out.println(5.3%1); // liefert 0.2999999999999998
 
Zuletzt bearbeitet:
Kennst du dich zufällig aus mit Wirtschaft bzw. alternativen Bestellmengen? :)
Sagt mir noch nichts. Google spuckt nur was von optimaler Bestellmenge aus... Ich vermute hier kann man auch einfach auf-, abrunden oder zur vorherigen bzw nächsten ganzen Zahl gehen? Die letzten beiden Operationen gibt's in der Math-Klasse unter dem Namen floor und ceil.
Erläutere mal was (genau) das Problem ist und was die Schleife tun soll, vielleicht gibt es da einen besseren Ansatz.
 
Ja, der richtige Name hierzu ist die Optimale Bestellmenge. Es geht darum die billigsten Gesamtkosten zu ermitteln. Dazu muss man auch gucken wie oft man Ware bestellen muss damit die Kosten am niedrigsten sind. Wenn du zum Beispiel zu oft Waren bestellst gehen die Kosten in die Höhe und genau das selbe wenn du zu selten bestellst. Ich hoffe du kannst meine grobe Beschreibung der Problematik verstehen. Hier ist mein Code:

Java:
public class Class_optimaleBestellmenge
{
  // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
  private double gesamtbedarf_im_jahr;
  private double einstandspreis;
  private double lagerkostensatz;
  private double bestellfixekosten;
  private double alternativeBestellmenge;
  private double Anzahl_der_Bestellungen_imJahr;
  private double durchschnittlicher_Lagerbestand;
  private double Lagerkosten_im_jahr;
  private double BFK;
  private double gesamtkosten;
  private double kleinstmöglicheBestellmenge;
  private String ausgabeText;
  /**
  * Konstruktor für Objekte der Klasse Class_optimaleBestellmenge
  */
  public Class_optimaleBestellmenge()
  {
    gesamtbedarf_im_jahr=0;
    einstandspreis=0;
    lagerkostensatz=0;
    bestellfixekosten=0;
    alternativeBestellmenge=0;
    Anzahl_der_Bestellungen_imJahr=0;
    durchschnittlicher_Lagerbestand=0;
    Lagerkosten_im_jahr=0;
    BFK=0;
    gesamtkosten=0;
    kleinstmöglicheBestellmenge=1;
    ausgabeText="";
  }
  
  public void erfasse(double gesamtbedarf_im_jahr, double einstandspreis, double lagerkostensatz, double bestellfixekosten){
    this.gesamtbedarf_im_jahr=gesamtbedarf_im_jahr;
    this.einstandspreis=einstandspreis;
    this.lagerkostensatz=lagerkostensatz;
    this.bestellfixekosten=bestellfixekosten;
  }
  
  public void berechne() {
    alternativeBestellmenge=gesamtbedarf_im_jahr;
    
    do{
      
      Anzahl_der_Bestellungen_imJahr=gesamtbedarf_im_jahr/alternativeBestellmenge;
      
      durchschnittlicher_Lagerbestand=(alternativeBestellmenge/2)*einstandspreis;
      Lagerkosten_im_jahr= durchschnittlicher_Lagerbestand/100*lagerkostensatz;
      BFK=Anzahl_der_Bestellungen_imJahr*bestellfixekosten;
      gesamtkosten=Lagerkosten_im_jahr+BFK;
      
      
      ausgabeText+=(alternativeBestellmenge+"\t"+ Anzahl_der_Bestellungen_imJahr+"\t"+durchschnittlicher_Lagerbestand
      +"\t"+Lagerkosten_im_jahr+"\t"+BFK+ "\t"+gesamtkosten)+"\n"; 
      alternativeBestellmenge=alternativeBestellmenge/2;
      
    }while (alternativeBestellmenge%1==0);
  }
  public String toString(){
    
    return(ausgabeText);
  }
}
 
Ja, der richtige Name hierzu ist die Optimale Bestellmenge. Es geht darum die billigsten Gesamtkosten zu ermitteln. Dazu muss man auch gucken wie oft man Ware bestellen muss damit die Kosten am niedrigsten sind. Wenn du zum Beispiel zu oft Waren bestellst gehen die Kosten in die Höhe und genau das selbe wenn du zu selten bestellst. Ich hoffe du kannst meine grobe Beschreibung der Problematik verstehen. Hier ist mein Code:

Java:
public class Class_optimaleBestellmenge
{
  // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
  private double gesamtbedarf_im_jahr;
  private double einstandspreis;
  private double lagerkostensatz;
  private double bestellfixekosten;
  private double alternativeBestellmenge;
  private double Anzahl_der_Bestellungen_imJahr;
  private double durchschnittlicher_Lagerbestand;
  private double Lagerkosten_im_jahr;
  private double BFK;
  private double gesamtkosten;
  private double kleinstmöglicheBestellmenge;
  private String ausgabeText;
  /**
  * Konstruktor für Objekte der Klasse Class_optimaleBestellmenge
  */
  public Class_optimaleBestellmenge()
  {
    gesamtbedarf_im_jahr=0;
    einstandspreis=0;
    lagerkostensatz=0;
    bestellfixekosten=0;
    alternativeBestellmenge=0;
    Anzahl_der_Bestellungen_imJahr=0;
    durchschnittlicher_Lagerbestand=0;
    Lagerkosten_im_jahr=0;
    BFK=0;
    gesamtkosten=0;
    kleinstmöglicheBestellmenge=1;
    ausgabeText="";
  }
 
  public void erfasse(double gesamtbedarf_im_jahr, double einstandspreis, double lagerkostensatz, double bestellfixekosten){
    this.gesamtbedarf_im_jahr=gesamtbedarf_im_jahr;
    this.einstandspreis=einstandspreis;
    this.lagerkostensatz=lagerkostensatz;
    this.bestellfixekosten=bestellfixekosten;
  }
 
  public void berechne() {
    alternativeBestellmenge=gesamtbedarf_im_jahr;
   
    do{
     
      Anzahl_der_Bestellungen_imJahr=gesamtbedarf_im_jahr/alternativeBestellmenge;
     
      durchschnittlicher_Lagerbestand=(alternativeBestellmenge/2)*einstandspreis;
      Lagerkosten_im_jahr= durchschnittlicher_Lagerbestand/100*lagerkostensatz;
      BFK=Anzahl_der_Bestellungen_imJahr*bestellfixekosten;
      gesamtkosten=Lagerkosten_im_jahr+BFK;
     
     
      ausgabeText+=(alternativeBestellmenge+"\t"+ Anzahl_der_Bestellungen_imJahr+"\t"+durchschnittlicher_Lagerbestand
      +"\t"+Lagerkosten_im_jahr+"\t"+BFK+ "\t"+gesamtkosten)+"\n";
      alternativeBestellmenge=alternativeBestellmenge/2;
     
    }while (alternativeBestellmenge%1==0);
  }
  public String toString(){
   
    return(ausgabeText);
  }
}
Die Variable ausgabeText ist nur für die GUI :)
 
Okay, vermutlich gehört das zum Algorithmus, aber ich frage trotzdem mal nach:
Warum wird die Bestellmenge immer halbiert?
ich hab das Gefühl Du willst gar nicht solange wiederholen, bis du eine ganze Zahl erwischst, sondern einfach solange alternative Bestellmenge >= 1 ist?
Zusätzlich suchst du, wenn ich das richtig verstehe, hier nicht direkt die optimale Bestellmenge, sondern erzeugst eine Art Tabelle. (Es scheint ja auch Formeln für die opt. Menge zu geben, etwa hier )
 
Das ist ein Optimierungsproblem, bei dem du doch einfach versuchst, das Minimum der Gesamtkostenfunktion zu finden. Wenn man schon Analysis in der 11./12.? Klasse hatte, weiß man, dass man dies durch das Lösen der ersten Ableitung der Kostenfunktion analytisch finden kann. Außerdem: Was hat das denn damit zu tun, ob nun eine Variable ganzzahlig wird?
Ich würde also erstmal die Kostenfunktion und ihre Ableitung analytisch ermitteln. Dann die Ableitung null setzen und zur Bestellmenge auflösen. Theoretisch müsste man noch die zweite Ableitung bilden, um zu gucken, ob es ein Minimum und kein Maximum ist, aber die Kostenfunktion wird nur ein Minimum und kein Maximum haben.
 
Okay, vermutlich gehört das zum Algorithmus, aber ich frage trotzdem mal nach:
Warum wird die Bestellmenge immer halbiert?
ich hab das Gefühl Du willst gar nicht solange wiederholen, bis du eine ganze Zahl erwischst, sondern einfach solange alternative Bestellmenge >= 1 ist?
Zusätzlich suchst du, wenn ich das richtig verstehe, hier nicht direkt die optimale Bestellmenge, sondern erzeugst eine Art Tabelle. (Es scheint ja auch Formeln für die opt. Menge zu geben, etwa hier )
Ich will einfach das Programm so lange laufen lassen wie alternative Bestellmenge keine Kommazahl ist, weil wenn alternative Bestellmenge eine Kommazahl ist dann wird die Anzahl der Bestellungen die man im Jahr machen muss auch zu einer Kommazahl. Das darf ja nicht sein, da man keine halben Bestellungen machen sondern nur ganze.
 
Okay, vermutlich gehört das zum Algorithmus, aber ich frage trotzdem mal nach:
Warum wird die Bestellmenge immer halbiert?
ich hab das Gefühl Du willst gar nicht solange wiederholen, bis du eine ganze Zahl erwischst, sondern einfach solange alternative Bestellmenge >= 1 ist?
Zusätzlich suchst du, wenn ich das richtig verstehe, hier nicht direkt die optimale Bestellmenge, sondern erzeugst eine Art Tabelle. (Es scheint ja auch Formeln für die opt. Menge zu geben, etwa hier )
Aber du hast schon Recht, dass mit dem halbieren ist manchmal echt doof. Es funktioniert mit manchen Werten ganz gut, allerdings nicht immer.
 
Ich will einfach das Programm so lange laufen lassen wie alternative Bestellmenge keine Kommazahl ist, weil wenn alternative Bestellmenge eine Kommazahl ist dann wird die Anzahl der Bestellungen die man im Jahr machen muss auch zu einer Kommazahl. Das darf ja nicht sein, da man keine halben Bestellungen machen sondern nur ganze.
Aber das kannst du ja durch Auf/Ab-runden erreichen, ansonsten sind ganze Zahlen sehr selten. Genauer gesagt, falls du exakt rechnen würdest, kommen nur ganze Zahlen raus, wenn du bereits mit einer Zahl startest, die eine Zweiterpotenz beinhaltet.
 
Das Beispiel im Link gefällt mir - wir vergleichen mal zwei Methoden; ah, eine Abweichung von "nur" ca. 20 % -> ist also gleich *ROFL*
Oh, das hatte ich gekonnt ignoriert! Sind halt Wirtschaftler :D. Die Formel ist aber das richtige Ergebnis. Die Tabelle ist einfach nicht genau genug aufgelöst, wegen den 1000er Schritten. Hätte man 100er Schritte genommen, käme man wohl auch so auf ein genaueres Ergebnis.
 
Nein, das ist nicht die optimale Bestellmenge! Bei dir wären es aktuell immer eine Bestellung mit einer Menge von gesamtbedarf_im_jahr.
 
Oh, das hatte ich gekonnt ignoriert! Sind halt Wirtschaftler :D. Die Formel ist aber das richtige Ergebnis. Die Tabelle ist einfach nicht genau genug aufgelöst, wegen den 1000er Schritten. Hätte man 100er Schritte genommen, käme man wohl auch so auf ein genaueres Ergebnis.
Ja, aber man hätte das Beispiel auch etwas "passender" wählen können :)
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben