minimum eines Arrays?

Obesjana

Mitglied
Da ich keine Vorkenntnisse habe und ich jetzt wirklich 1 Tag dran sitze, versuche ich mir Hilfe zu holen. Ich hab noch so ein bisschen das Problem mit der Syntax, mir fällt es schwer zu verstehen von wo, ich was nehmen kann usw.
Also folgendes Problem:
Ich soll das Minimum der Produkte ermitteln, die im Warenkorb sind.

Quellcode vom "Warenkorb":
Java:
public class Basket {
    private String username;
    private Product[] products;

    public Basket(String username) {
        this.username = username;
        this.products = new Product[0];
    }

    public void addProduct(Product product) {
        Product[] newProdcuts = new Product[products.length + 1];

        for (int i = 0; i < products.length; i++) {
            newProdcuts[i] = products[i];
        }

        newProdcuts[newProdcuts.length - 1] = product;

        products = newProdcuts;
    }

    public void print() {
        System.out.format("Warenkorb für %s", username);

        if (products.length == 0) {
            System.out.println(" ist leer.");

            return;
        } else {
            System.out.println(":");
        }

        Price sum = new Price(0);
        Product product;
        for (int i = 0; i < products.length; i++) {
            product = products[i];

            System.out.format("%s\t%s%n", product.getName(), product.getPrice().getFormatted());

            sum = sum.add(product.getPrice());
        }

        System.out.format("Gesamtwert: %s%n", sum.getFormatted());
    }

Quellcode vom "Produkt":
Java:
public class Product {

    /**
     * Die Bezeichnung dieses Produktes.
     */
    private final String name;

    /**
     * Der Preis dieses Produktes.
     */
    private final Price price;

    /**
     * Erzeugt ein neues Produkt mit dem gegebenen Namen und dem
     * gegebenen Preis in Cent.
     *
     * Sollte der gegebene Name den Wert {@code null}
     * haben oder leer sein, so wird der Name des erzeugten Produktes
     * auf {@code unbekannt} gesetzt.
     *
     * Sollte der gegebene Preis kleiner als 10 sein, so wird der Preis
     * des erzeugten Produktes auf 10 Cent gesetzt.
     *
     * @param pName Der Name für das zu erzeugende Produkt.
     * @param pPrice Der Preis für das zu erzeugende Produkt in Cent.
     */
    public Product(final String pName, final int pPrice) {
        if (pName == null) {
            name = "unbekannt";
        } else if (pName.isEmpty()) {
            name = "unbekannt";
        } else {
            name = pName;
        }
        if (pPrice > 10){
        price = new Price(pPrice);
    }     else {
        price = new Price(10);
    }
    }

    /**
     * Gibt den Namen dieses Produktes zurück.
     *
     * @return Den Namen dieses Produktes.
     */
    public String getName() {
        return name;
    }

    /**
     * Gibt den Preis dieses Produktes zurück.
     *
     * @return Den Preis dieses Produktes.
     */
    public Price getPrice() {
        return price;
    }

    /**
     * Gibt die Informationen zu diesem Produkt auf der Konsole aus.
     * Dabei wird zunächst der Name und dann der Preis gefolgt von
     * einer Zeilenschaltung ausgegeben. (Nocht nicht fertig).
     */
    public void print() {
    }
 
}

Quellcode vom "Preis":
Java:
public class Price {
    private int cents;

    /**
     * Price Konstruktor.
     *
     * @param int cents Wert in Cent. Darf auch negative Werte annehmen.
     */
    public Price(int cents) {
        this.cents = cents;
    }

    /**
     * Gibt den Wert dieses Preises in Euro auf der Konsole aus.
     *
     * Für einen Wert von 100 Cent gibt diese Funktion "1,0 Euro" aus.
     */
    public void print() {
        System.out.println(this.getFormatted());
    }

    /**
     * Gibt einen String zurück, der den Preis in lesbarer Form
     * wiederspiegelt.
     *
     * @return Den Preis in lesbarer Form.
     */
    public String getFormatted() {
        int euro = cents / 100;
        int cent = Math.abs(cents % 100);

        return String.format("%d,%d Euro", euro, cent);
    }

    /**
     * Addiert den Wert des Price-Objekts mit dem Wert dieses
     * Price-Objekts und gibt ein neues Price-Objekt mit der Summe
     * zurück.
     *
     * @param Price price Das Price-Objekt, dessen Wert als Summand dient.
     *
     * @return Ein neues Price-Objekt, welches den Wert der Summe hat.
     */
    public Price add(Price price) {
        return new Price(price.cents + this.cents);
    }

    /**
     * Addiert das Attribut "cents" mit dem Wert dieses Price-Objekts und
     * gibt ein neues Price-Objekt mit dem Wert der Summe zurück.
     *
     * @param int cents Die Anzahl an Cents, die als Summand dienen.
     *
     * @return Ein neues Price-Objekt, welches den Wert der Summe hat.
     */
    public Price add(int cents) {
        return new Price(this.cents + cents);
    }

    /**
     * Gibt den Wert dieses Price-Objektes in Cent zurück.
     *
     * @return Den Wert dieses Price-Objektes in Cent.
     */
    public int getCent() {
        return cents;
    }
}
Ich soll also eine neue private Hilfsmethode erstellen, wo ich das billigste Produkt ermittle.

Es ist natürlich Hausaufgabe, aber ich komme bei diesem Schritt nicht weiter, und bräuchte einen Ansatz oder ähnliches. Würde mich echt freuen wenn ich so etwas bekommen könnte^^.
 

Javinner

Top Contributor
Ich soll also eine neue private Hilfsmethode erstellen, wo ich das billigste Produkt ermittle
im private Product[] products;
nach kleinstem Preis suchen, benutze Methode
Java:
public Price getPrice() {
   return price;
}
mittels einer For-Schleife
 

Javinner

Top Contributor
Sorry, war eine schöne Aufgabe, ich konnte es mir nicht verkneifen.
Methode print() habe ich ebenso angepasst.
Java:
Product productA = new Product("Butter", 129);
Product productB = new Product("Milch", 79);
Product productC = new Product("Kaffee", 479);
Product productD = new Product("Zucker", 179);
Product productE = new Product("Apfel", 59);
Product productF = new Product("Tee", 169);
      
Basket basket = new Basket("Obesjana");
basket.addProduct(productA);
basket.addProduct(productB);
basket.addProduct(productC);
basket.addProduct(productD);
basket.addProduct(productE);
basket.addProduct(productF);
basket.print();
basket.getSmallestPrice().print();

/** Konsolenausgabe */
Warenkorb für Obesjana:
Butter    1,29 Euro
Milch    0,79 Euro
Kaffee    4,79 Euro
Zucker    1,79 Euro
Apfel    0,59 Euro
Tee    1,69 Euro
Gesamtwert: 10,94 Euro
[Name: Apfel][Preis: 0,59 Euro]
 

Obesjana

Mitglied
Wow :D. Ich komme aber leider nicht weiter bei der Methode getPrice. Also ich muss ja den Array von products absuchen, aber ich verstehe nicht genau wie ich das getPrice da reinbringen soll.
Die Syntax macht mich zu schaffen :oops:.
 

Flown

Administrator
Mitarbeiter
Beschreibe es mal in Prosaform wie du es im echten Leben machen würdest, wenn du Produkte mit Preisen in einem Warenkorb hättest.
 

Obesjana

Mitglied
Naja, also wenn mir jemand sagt ich soll im Warenkorb das Produkt aussuchen, was am billigsten ist, dann würde ich jedes Produkt nehmen und den Preis erstmal angucken. Jeden Preis vergleichen und das billigste halt aufschreiben.
Ich kann mir halt eine for schleife mit einer if Anweisung vorstellen.
 

Obesjana

Mitglied
Ich hab halt rumprobiert aber z.b. wenn ich product.getPrice() nehme, steht dass "product" nicht deklariert wurde. Ich bin irgendwie verloren.
 

Javinner

Top Contributor
Schau dir das hier an und versuche es nachzuvollziehen.
Java:
public class Test
{

    public static void main(String[] args)
    {
        int[] number = {6, 1, 23, 43, 645, 2, 33};
        System.out.println(getSmallestNumber(number));
    }

    static int getSmallestNumber(int[] array)
    {
        int smallestNumber = array[0];
        for (int i = 0; i < array.length; i++) {
            if (array[i] < smallestNumber) {
                smallestNumber = array[i];
            }
        }
        return smallestNumber;
    }

}
/** Konsolenausgabe */
1
 

Obesjana

Mitglied
vor ab, in der Aufgabe steht auch, das die Methode keine Argumente erwartet, ich glaube das wäre noch wichtig zu erwähnen
Ok.
Also wir haben einen Array (number) deklariert und initialisieren ihn mit bestimmten Ziffern (6,1,23...). Dann eine Methode die eben die kleinste Ziffer ermittelt. Dabei eine Variable (smallestNumber) initialisiert array[0]. eine for schleife wo die länge überprüft wird und bei jedem gang um 1 erhöht wird. in der for-schleife eine if anweisung die besagt, wenn array kleiner als die Variable smallestNumber ist, die Variable eine neue Zuweisung bekommt (in dem Fall array. Am ende soll die Mehtode die Variable eben zurückgeben.
Müsste der Array nicht "number" heißen?
Jedenfalls verstehe ich schon den Ablauf, er soll in jedem Index überprüfen, ob dieser Index kleiner als die Variable ist, aber ich verstehe die variable nicht irgendwie. Warum array[0] ?
 

Javinner

Top Contributor
@Obesjana
Na das sieht doch schon nicht schlecht aus.
Var smallestNumber muss initialisiert werden.
So bekommt diese die erste Ziffer des Arrays und, wenn den der Fall eintreten sollte, dass eine Zahl noch kleiner ist, als eben die erste Zahl im Array, ergo Var smallestNumber
, wird dieser Wert in der Var smallestNumber festgehalten.
Müsste der Array nicht "number" heißen?
Im Methodenkopf?! Nein, da kann stehen, was auch immer du willst, ich benenne es jedoch immer nach dem Objekt, welches übergeben wird.
vor ab, in der Aufgabe steht auch, das die Methode keine Argumente erwartet
Habe ich gesehen, hier sollte es nur der Vorführung dienen.

Versuche nun das Prinzip auf dein Programm zu übertragen. Tipp: ich habe die Methode getSmallestNumber
in der Klasse Basket realisiert, so kann die Methode auf Array produkts intern greifen, ohne diesen als Parameter übergeben zu bekommen

edit: Methode getSmallestPrice war natürlich gemeint, sorry bin ziemlich platt.
 
Zuletzt bearbeitet:

Obesjana

Mitglied
Java:
public Basket determineCheapestProduct(){
        Product productz = products[0];
        for (int i = 0; i < products.length; i++) {
            if (products[i] < productz){
                productz = products[i];
               
            }
           
        }
        return productz;
Warum kriege ich da einen Fehler in der if Anweisung?
Oh man, tut mir leid, ich komm mir komplett blöd vor.
edit: mir fällt auf, das meine methode falsch beschrieben ist. muss da nicht basket hin?
edit2: code verändert, trotzdem gleiche frage x).
 
Zuletzt bearbeitet:

JCODA

Top Contributor
Du kannst Produkte nicht vergleichen, aber du kannst jeweils getPrice() aufrufen, um deren Preise zu vergleichen.
 

Javinner

Top Contributor
@Obesjana
Schau dir das hier an:
Java:
Product productA = new Product("Butter", 129);
      
int a = productA.getPrice().getCent();
String preis = productA.getPrice().getFormatted();
      
System.out.println("Integer a: " + a);
System.out.println("String preis: ".concat(preis));

/** Konsolenausgabe */
Integer a: 129
String preis: 1,29 Euro
Weißt du, worauf ich hinaus will?
Schau dir dein Code ganz genau an.
 

Javinner

Top Contributor
Nun weißt du, wie man an ein Integer-Wert eines Produktes herankommt.
Du weißt auch jetzt, wie man den kleinsten Wert eines Arrays ermittelt.
Jetzt?
 

Javinner

Top Contributor
Das war ja auch nur, um dir zu zeigen, wie man bei einem Produkt an den Wert eines Integer herankommt. Nun nimm doch den Wert, bau es in die Schleife ein und ermittele so den kleinsten Preis deines Warenkorbes.
 

Javinner

Top Contributor
Methode getSmallestPrice() Rueckgabewert: Produkt

a) Var. produktImArray
b) Var. smallestPrice (soll den groesstmoeglichen Wert fuer den Varaiblentyp erhalten)
c) Suche im Array "produkts" nach kleinstem Integerwert und speichere diesen.
d) liefere das Produkt mit dem kleinsten Preis zurueck.
return array[produktImArray];
 

Obesjana

Mitglied
Java:
public Product determineCheapestProduct(){
        Product productz = products[0];
        int m = 1000000;
        for (int i = 0; i < products.length; i++) {
            if (productz.getPrice().getCent() < m){
                productz = products[i];
               
            }
           
        }
        return productz;
Ist mein letzter Standpunkt. Ich leg mich ins Bett.
 

Javinner

Top Contributor
Schau dir das mal an:
Java:
public Product getSmallestPrice()
{
        int produktImArray = 0;
        int smallestPrice = Integer.MAX_VALUE;
        for (int i = 0; i < this.products.length; i++) {
            if (products[i].getPrice().getCent() < smallestPrice) {
                smallestPrice = products[i].getPrice().getCent();
                produktImArray = i;
            }
        }
        return products[produktImArray];
}
 

Obesjana

Mitglied
Nachtrag: @Javinner, es tut mir leid, ich hab vollkommen vergessen mich zu bedanken. Hat mir sehr geholfen, auch bei den nächsten Übungen.
Der Code hat super funktioniert, danke nochmal. Durch das verstehen dieser Aufgabe, konnte ich die folgenden Aufgaben problemlos lösen!
 

Neue Themen


Oben