Modellieren Haareschneiden

  • Themenstarter zDieTaschenlampe
  • Beginndatum
Diskutiere Modellieren Haareschneiden im Java Basics - Anfänger-Themen Bereich.
Z

zDieTaschenlampe

Achso, das ist mit neu, wusste ich noch nicht :). Dann mach aber ein break nach deinem programOn toggle.


Da wo du programmOn togglest.


Wo kommt das if-else auf einmal her x.x Vorher sahs doch gut aus
Inwiefern hilft mir das break ?

und wann vorher xD aber das if else ist wieder raus
 
Z

zDieTaschenlampe

So sieht es jetzt auf und es funktinoniert für die Kommandoargumente 1 und 2 aber mehr auch nicht. Aber ich versteh es net
Code:
public class Haircut {

   


 public static void main(String[] args) {

        int b = Integer.parseInt(args[0]);
        int n = Integer.parseInt(args[1]);
        int count = 0;
        boolean programmOn = true;

        Barber[] barbers = new Barber[b];
        for (int i = 2; i < args.length; i++) {
            barbers[i - 2] = new Barber(Integer.parseInt(args[i]));

        }

        while (programmOn == true) {
            for (int i = 0; i < barbers.length; i++) {
                barbers[i].reduceRestTime();
                if (barbers[i].getRestTime() == 0) {
                    count++;
                    if (count == n) {
                        System.out.println(i + 1);
                        programmOn = !programmOn;
                        //break;
                    }
                }
            }
        }
    }
}
 
MoxxiManagarm

MoxxiManagarm

Das break soll beenden nachdem Friseur 1 dich drangenommen hat und nicht die anderen Friseure noch betrachten. Die sind egal. Du betrachtest natürlich alle, solange du noch in der Warteschlange stehst. Das Programm läuft aktuell noch in eine Dauerschleife weil du restTime mit == 0 vergleichst, es sollte <= 0 sein ODER restTime wird in der Klasse Barber erstmalig auf 1 gesetzt.
 
Z

zDieTaschenlampe

Das break soll beenden nachdem Friseur 1 dich drangenommen hat und nicht die anderen Friseure noch betrachten. Die sind egal. Du betrachtest natürlich alle, solange du noch in der Warteschlange stehst. Das Programm läuft aktuell noch in eine Dauerschleife weil du restTime mit == 0 vergleichst, es sollte <= 0 sein ODER restTime wird in der Klasse Barber erstmalig auf 1 gesetzt.
Wenn ich es so mache, funktioniert es fast, aber auch nur fast :
Code:
package uebungsblatt1;

public class Haircut {

    public static void main(String[] args) {

        int b = Integer.parseInt(args[0]);
        int n = Integer.parseInt(args[1]);
        int count = 0;
        boolean programmOn = true;

        Barber[] barbers = new Barber[b];
        for (int i = 2; i < args.length; i++) {
            barbers[i - 2] = new Barber(Integer.parseInt(args[i]));

        }

        while (programmOn == true) {
            for (int i = 0; i < barbers.length; i++) {

                if (barbers[i].getRestTime() != 0) {
                    barbers[i].reduceRestTime();
                }

                if (barbers[i].getRestTime() == 0) {
                    count++;
                    if (count == n) {
                        System.out.println(i);
                        programmOn = !programmOn;
                        // break;
                    }
                }
            }
        }
    }
}
Die Beispielausgabe 1 und 3 aus der Aufgabe passen, aber die 2. wo es um 3 12 7 7 7 geht, kommt nicht die richtige Zahl raus -.-

Edit : Ich habs raus. Ich hab die resetRestTime methode vergessen und das break brauch ich nicht. Alles klappt jetzt . Hallelulja :) und wirklich fettes Danke an dich hahaha Es war eine sehr schwere Geburt, aber wirklich danke. Wird nicht das letzte Mal sein, dass ich hier Hilfe suchen werden, denn die Aufgaben werden schlimmer und schlimmer, aber für jetzt bin ich happy.
Danke <3
 
Zuletzt bearbeitet:
MoxxiManagarm

MoxxiManagarm

Dein resetRestTime ist mittlerweile verloren gegangen ^^

Ich verliere ehrlich gesagt doch langsam die Lust :D Du änderst viele Dinge wieder falsch ab, obwohl du sie schon einmal richtig hattest. Ich glaube du bist mittlerweile von vielen Dingen verwirrt, aber hoffentlich nicht mehr ganz so Ansatzlos wie am Anfang. Du hast viel selbst versucht und gezielt hinterfragt, das ist lobenswert. Daher habe ich dir mal nun dein Programm korrigiert. Es ist wie unten abgebildet theoretisch vollständig. Du musst es dir nun aber nochmal anschauen und verstehen was sich zu dir unterscheidet und warum. Ordne deine Gedanken. ;) Wenn etwas nicht klar lies dir ruhig nochmal die Kommentare durch. Wie du siehst ist es insgesamt kein Hexenwerk.
(Ich habe mir erlaubt programmOn umzubenennen und nicht count zu nehmen, wiezwischenzeitlich mal besprochen).

Java:
public class Haircut {
    public static void main(String[] args) {
        int b = Integer.parseInt(args[0]);
        int n = Integer.parseInt(args[1]);

        // Friseure aufstellen
        Barber[] barbers = new Barber[b];
        for (int i = 2; i < args.length; i++) {
            barbers[i - 2] = new Barber(Integer.parseInt(args[i]));
        }

        boolean iAmStillInQueue = true;

        // jeder Durchlauf dieser Schleife stellt eine Minute dar
        while (iAmStillInQueue == true) {
            for (int i = 0; i < barbers.length; i++) {
                // jeder Friseur schneidet eine Minute lang Haare
                barbers[i].reduceRestTime();

                // der Friseur ist mit dem letzten Haarschnitt fertig, erist frei für einen neuen
                if (barbers[i].getRestTime() <= 0) {
                    // deine Warteschlangenposition verringert sich
                    n--;
                    // Friseur beginnt mit dem neuen Haarschnitt
                    barbers[i].resetRestTime();

                    // du warst der letzte Kunde, der an die Reihe gekommen ist
                    if (n == 0) {
                        // Programm ausgeben und Simulation beenden
                        System.out.println(i + 1);
                        iAmStillInQueue = false;
                        break;
                    }
                }
            }
        }
    }
}

class Barber {
    private final int requiredTime;
    private int restTime;

    public Barber(int requiredTime) {
        this.requiredTime = requiredTime;
    }

    public int getRestTime() {
        return restTime;
    }

    public void reduceRestTime() {
        restTime--;
    }

    public void resetRestTime() {
        restTime = requiredTime;
    }
}

Die Kommentarzeilen im Code sollen dir nur nochmal zum Verständnis helfen, lass sie nicht drin




PS.: Ich fand das übrigens eine sehr schöne Übungsaufgabe.
 
Zuletzt bearbeitet:
Z

zDieTaschenlampe

Dein resetRestTime ist mittlerweile verloren gegangen ^^

Ich verliere ehrlich gesagt doch langsam die Lust :D Du änderst viele Dinge wieder falsch ab, obwohl du sie schon einmal richtig hattest. Ich glaube du bist mittlerweile von vielen Dingen verwirrt, aber hoffentlich nicht mehr ganz so Ansatzlos wie am Anfang. Du hast viel selbst versucht und gezielt hinterfragt, das ist lobenswert. Daher habe ich dir mal nun dein Programm korrigiert. Es ist wie unten abgebildet theoretisch vollständig. Du musst es dir nun aber nochmal anschauen und verstehen was sich zu dir unterscheidet und warum. Ordne deine Gedanken. ;) Wenn etwas nicht klar lies dir ruhig nochmal die Kommentare durch. Wie du siehst ist es insgesamt kein Hexenwerk.
(Ich habe mir erlaubt programmOn umzubenennen und nicht count zu nehmen, wiezwischenzeitlich mal besprochen).

Java:
public class Haircut {
    public static void main(String[] args) {
        int b = Integer.parseInt(args[0]);
        int n = Integer.parseInt(args[1]);

        // Friseure aufstellen
        Barber[] barbers = new Barber[b];
        for (int i = 2; i < args.length; i++) {
            barbers[i - 2] = new Barber(Integer.parseInt(args[i]));
        }

        boolean iAmStillInQueue = true;

        // jeder Durchlauf dieser Schleife stellt eine Minute dar
        while (iAmStillInQueue == true) {
            for (int i = 0; i < barbers.length; i++) {
                // jeder Friseur schneidet eine Minute lang Haare
                barbers[i].reduceRestTime();

                // der Friseur ist mit dem letzten Haarschnitt fertig, erist frei für einen neuen
                if (barbers[i].getRestTime() <= 0) {
                    // deine Warteschlangenposition verringert sich
                    n--;
                    // Friseur beginnt mit dem neuen Haarschnitt
                    barbers[i].resetRestTime();

                    // du warst der letzte Kunde, der an die Reihe gekommen ist
                    if (n == 0) {
                        // Programm ausgeben und Simulation beenden
                        System.out.println(i + 1);
                        iAmStillInQueue = false;
                        break;
                    }
                }
            }
        }
    }
}

class Barber {
    private final int requiredTime;
    private int restTime;

    public Barber(int requiredTime) {
        this.requiredTime = requiredTime;
    }

    public int getRestTime() {
        return restTime;
    }

    public void reduceRestTime() {
        restTime--;
    }

    public void resetRestTime() {
        restTime = requiredTime;
    }
}

Die Kommentarzeilen im Code sollen dir nur nochmal zum Verständnis helfen, lass sie nicht drin




PS.: Ich fand das übrigens eine sehr schöne Übungsaufgabe.
Hast du meinen bearbeiteten Kommentar vor deinem hier noch gelesen ? Wenn nicht, dann bist du nachdem du es jetzt tust, bestimmt stolz haha Ob du es mir glaubst oder nicht, ich hab all das, was du jetzt im letzten Beitrag von dir angesprochen hast, doch noch selbst geschafft und umgesetzt. Aber trotzdem Danke, dass du mich nicht aufgegeben hast. Die resetMethode die ich vergessen hatte, war der Key zum Ende, aber naja wie gesagt schwere Geburt

Ich mochte die Aufgabe nicht, weil die Modellierung nicht vorgegeben oder beschrieben war, aber ich versteh wieso du sie magst xD
 
MoxxiManagarm

MoxxiManagarm

Nein den edit hatte ich vor meinem letzten Beitrag nicht gesehen. Bin stolz auf dich. Modellieren musst du können, aber auch ein Bildhauer kann nicht von heute auf morgen Skulpturen meißeln. Bleib dran, dann klappt's rirgendwann
 
Thema: 

Modellieren Haareschneiden

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben