Ergebnisse stimmen nicht überein?

SarahXyy

Mitglied
Hi Leute!
Ich hab einen Arbeitsauftrag bekommen der den Break Event Point einer Photovoltaikanlage berechnen soll. Soweit hab ich alles geschrieben, nur irgendwo sitzt ein Fehler der die ganze Berechnung am Ende versaut. Jedenfalls hab ich eine Beispielausgabe im Arbeitsauftrag, dort stimmen die Preise einfach nicht mit meiner Ausgabe zusammen. Kann mir einer sagen woran es liegt?

Beispielausgabe:
Number of solar modules: 1
Subsidy in % of the investment: 0
Direction of the photovoltaic system:
1: SOUTH
2: SOUTH-EAST
3: EAST
4: SOUTH-WEST
5: WEST
Please enter the direction: 4
Electricity rate in cents/kWh: 19
------
One module facing SOUTH-WEST.
Achievable total power: 0.38 kWp.
However, due to the suboptimal direction, only 0.36 kWp are achieved.
Investment of 259.99 leads to earnings of 61.26 each year.
After year 1: 198.73 still to compensate.
After year 2: 137.48 still to compensate.
After year 3: 76.22 still to compensate.
After year 4: 14.96 still to compensate.
PV system amortized within 5 years.


Bei mir kommt jedoch wenn ich genau das eingebe, das hier raus:

1 modules facing SOUTH-WEST
Achievable total power: 0,38 kWp.
However, due to the suboptimal direction, only 0,36 kWp are achieved.
Investment of 2,60 leads to earnings of 0,61 each year.
After year 1: 1,99 still to compensate.
After year 2: 1,37 still to compensate.
After year 3: 0,76 still to compensate.
After year 4: 0,15 still to compensate.
PV system amortized within 5 years.



Ich füge hier mal den Code ein und hoffe dass mir vielleicht jemand sagen kann was ich falsch gemacht hab? :( Anscheinend is ja nur eine Kommastelle falsch... aber wo? hab schon etwas herumprobiert und komm nie zu dem vorgegeben Ergebnis.

Java:
public class PVAnlage {

    public static void main(String[] args) {
        Scanner user_input_scanner = new Scanner(System.in);
        // Reads the following inputs

        int modules = 0;
        int investment = 0;
        int direction = 0;
        int electricityrate = 0;
        // defines the variables

        while(true){
            System.out.println("Number of solar modules: ");
            modules = user_input_scanner.nextInt();

            if(modules > 80 || modules < 1){
                System.out.println("Invalid input! The number of solar modules must be an integer greater than or equal to 1 and less than or equal to 80.");
            }
            else{
                break;
            }
        }
        // Loop that requires an input of the solar panels between 1-80

        while(true){
        System.out.println("Subsidy in % of the investment: ");
        investment = user_input_scanner.nextInt();

        if (investment > 100 || investment < 0) {
            System.out.println("Invalid input! The subsidy must be an integer greater than or equal to 0 and less than or equal to 100.");
        } else {
            break;
        }
        }
        // Loop requiring input of the State subsidies between 1-100 and repeating if the input is incorrect

        while(true) {
            System.out.println("Direction of the photovoltaic system:\n" +
                    "1: SOUTH\n" +
                    "2: SOUTH-EAST\n" +
                    "3: EAST\n" +
                    "4: SOUTH-WEST\n" +
                    "5: WEST\n" +
                    "Please enter the direction:");
            direction = user_input_scanner.nextInt();

            if (direction < 1 || direction > 5) {
                System.out.println("Please enter the direction");
            }
            else{
                break;}
        }
        // Loop that prompts the user to enter the direction of the solar panels until a valid input (between 1 and 5) is made.

       while(true) {
       System.out.println("Electricity rate in cents/kWh: ");
       electricityrate = user_input_scanner.nextInt();

       if (electricityrate < 1 || electricityrate > 100 ){
           System.out.println("Invalid input! The electricity rate must be an integer which is at least 1 and must not exceed 100 cents/kWh.");

       }
       else{
           break;}
       }
       // Loop that requires an input of the electricity rate and repeating if the input is incorrect

        double totalPower = 0.375 * modules;
        String directionString = "";
       double performanceFactor = 1.0;
        switch(direction) {
            case 1: directionString = "SOUTH";
            performanceFactor = 1.0;
            break;
            case 2: directionString = "SOUTH-EAST";
            performanceFactor = 0.95;
            break;
            case 3: directionString = "EAST";
            performanceFactor = 0.9;
            break;
            case 4: directionString = "SOUTH-WEST";
            performanceFactor = 0.95;
            break;
            case 5: directionString = "WEST";
            performanceFactor = 0.9;
            break;
        }
        System.out.printf("%d modules facing %s%n", modules, directionString);
        double achievedTotalPower = totalPower * performanceFactor;
        // switch statement is a control flow statement that allows you to execute different blocks of code based on the value of an expression
        // printf is used when the output need to be formatted (number with decimal places or embedding variables in a string). Without automatic line break.
        // %d = integer
        // %s = is replaced by the value of the variable
        // %n = line break

        System.out.printf("Achievable total power: %.2f kWp.%n", totalPower);
        // %.2f = "f" is a placeholder for a floating-point number,"2" specifies that 2 decimal places should be displayed.

        if (performanceFactor < 1.0) {
            System.out.printf("However, due to the suboptimal direction, only %.2f kWp are achieved.%n", achievedTotalPower);
        }
        // Calculates the total power of the solar system based on the number of modules and their direction.
        // Sets the performanceFactor based on direction.
        // Outputs the total calculated power and adjusted power, based on direction.

        double y_spez = 905; // specific yield in kWh/kWp
        double annualYield = y_spez * achievedTotalPower;
        double annualEarnings = annualYield * electricityrate / 100.0;
        double totalCost = modules * 0.26;
        double subsidyAmount = totalCost * investment / 100;
        double costsAfterSubsidy = totalCost - subsidyAmount;
        // Calculates the total cost of the solar system, the amount of government subsidies, and the costs after deduction of subsidies.

        System.out.printf("Investment of %.2f leads to earnings of %.2f each year.%n", totalCost / 100, annualEarnings / 100);


        double remainingCost = costsAfterSubsidy;
        int year = 1;
        while (remainingCost > 0) {
            if (year == 1 && investment > 0) {
                remainingCost -= subsidyAmount;
                System.out.printf("After year %d: %.2f still to compensate. (%.2f paid by the government)%n", year, remainingCost / 100, subsidyAmount / 100);
            } else {
                remainingCost -= annualEarnings;
                if (remainingCost > 0) {
                    System.out.printf("After year %d: %.2f still to compensate.%n", year, remainingCost / 100);
                }
            }
            year++;
        }

        if (year == 2) {
            System.out.println("PV system amortized within a year.");
        } else {
            System.out.printf("PV system amortized within %d years.%n", year - 1);
        }

    }
}

Danke euch schonmal 😄
 

Robert Zenz

Top Contributor
Jetzt sei mal kurz ehrlich, hast das wirklich du geschrieben oder hast du dir das generieren lassen von einem LLM und fragst uns jetzt was nicht stimmt?

---

Das gesagt, wenn man die Ausgaben vergleicht:

Code:
Investment of 259.99 leads to earnings of 61.26 each year.
Investment of 2,60 leads to earnings of 0,61 each year.

Stellt man ein relativ einfaches Muster fest, die Zahlen sind ident aber um zwei Stellen verschoben. Damit landet man dann unmittelbar bei der Code-Zeile:

Java:
System.out.printf("Investment of %.2f leads to earnings of %.2f each year.%n", totalCost / 100, annualEarnings / 100);

Und damit stellt sich natuerlich die Frage: Was tut das dividieren durch 100 hier?

Meine Vermutung waere entweder dass du (oder das LLM) hier annahm mit `int`s zu rechnen, und um auf Euro-Betraege mit zwei Kommastellen zu kommen dividiert man dann klassischerweise durch 100. Was in dem Fall aber auch falsch waere, weil int / int ergibt int, entweder Divident oder Divisor muessen dafuer auf float oder double gewandelt werden.
 

SarahXyy

Mitglied
Zum Teil hab ich seit Montag (Ausbildungsbeginn) herum gegoogelt und es selber geschrieben, aber ein Teil (vorallem zum Schluss) wurde von ChatGPT erstellt. Meine Java Kenntnisse sind noch nicht wirklich gut, aber ich schaue dass ich alles was ich schreibe auch verstehe. Die Ausbildung soll ja auch was bringen, und zwar dass ich in 2 Jahren dann ohne jegliche Hilfe schreiben kann. Die selbst hinzugefügten Kommentare helfen mir zudem beim Lesen.
Danke dir für deine Antwort 😊 hat mir sehr geholfen.
Nun gibt es das aus was es soll. Vielen vielen Dank!!
Werde den gesamten Code nochmal bis Ende nächster Woche durchstudieren bevor ich den Auftrag abgebe, normal hätte ich nämlich 4 Wochen dafür Zeit.
 

Robert Zenz

Top Contributor
Zum Teil hab ich seit Montag (Ausbildungsbeginn) herum gegoogelt und es selber geschrieben, aber ein Teil (vorallem zum Schluss) wurde von ChatGPT erstellt.
Schreib das hinzu das naechste mal. Ansonsten wirkt die Sache eher komisch.

Meine Java Kenntnisse sind noch nicht wirklich gut, aber ich schaue dass ich alles was ich schreibe auch verstehe.
In dem Fall ist es mehr logisches Denken: Ich habe 1 will aber auf 100, sprich die Werte muessten mit 100 multipliziert werden. Die Umkehrfunktion davon ist durch 100 dividieren, und das hast du in den Zeilen viel. Also ein guter Kandidat.

Die Ausbildung soll ja auch was bringen, und zwar dass ich in 2 Jahren dann ohne jegliche Hilfe schreiben kann.
Ich bin vielleicht ein alter Mann, aber ich sehe wenig Sinn dahinter Code "einfach so" zu uebernehmen ohne wirklich zu verstehen wie es dazu passt, insbesondere waehrend einer Ausbildung. Natuerlich kopieren wir alle Code mal, aber man muss verstehen was dieser tut da man ansonsten einen Flickenteppich als Programm hat wo man weder einzelne Teile noch das Gesamte versteht. Als Rat in der Hinsicht waere vielleicht gut Code nicht direkt von einem LLM zu kopieren, sondern sich diesen anzusehen und selbst abzutippen. Das klingt zwar stumpf im ersten Moment, aber damit musst du ueber alles nachdenken was da drinnen steht.

Werde den gesamten Code nochmal bis Ende nächster Woche durchstudieren bevor ich den Auftrag abgebe.
Klassischerweise und traditionellerweise macht man Kommentare eine Zeile betreffend ueber der Zeile.

Java:
double y_spez = 905; // specific yield in kWh/kWp
Wenn man keine domaenenspzifische Typen hat (fuer Zeit waere Seconds zum Beispiel einer, wie in Seconds expirationTime = blabla) dann mache ich gerne die Einheit in den Variablennamen dazu: specificYieldInKwh oder expirationTimeInSeconds.

Das gesagt, vielleicht willst du dir mal die Java Naming Conventions ansehen, ein Groszteil der Java Programmierer haelt sich da dran.

Achso, ja, der Vollstaendigkeit halber float und double sollten nicht fuer Berechnungen mit Geld verwendet werden. In diesem Fall vernachlaessigbar, aber etwas woran man immer denken.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kennewick Basketball Spiel Ergebnisse Java Basics - Anfänger-Themen 11
A keine Ergebnisse - String nummer in array nummer converting Java Basics - Anfänger-Themen 1
N Eine Zahl solange teilen bis es nicht möglich ist und die Ergebnisse ausgeben Java Basics - Anfänger-Themen 23
D Ergebnisse in Arrays ausgeben? Java Basics - Anfänger-Themen 11
S Ergebnisse zwischenspeichern (Analog zu ans-Taste bei Taschenrechnern) Java Basics - Anfänger-Themen 3
A SelectionSort bringt keine konstanten Ergebnisse Java Basics - Anfänger-Themen 4
R StringBounds falsche Ergebnisse Java Basics - Anfänger-Themen 5
V Ergebnisse in 2 Zeilen Java Basics - Anfänger-Themen 4
H String einlesen, in .txt durchsuchen und Ergebnisse ausgeben Java Basics - Anfänger-Themen 22
V ComboBox Ergebnisse abhängig von anderer ComboBox - Wie? Java Basics - Anfänger-Themen 7
N Ergebnisse dynamisch in Tabelle schreiben Java Basics - Anfänger-Themen 3
G unerwartete Ergebnisse beim URL auslesen Java Basics - Anfänger-Themen 2
Strahlungsleck [Erledigt]Ergebnisse des Ausgelesenen Verzweichnis verwerten/benutzen Java Basics - Anfänger-Themen 9
K Ergebnisse auf einem Label anzeigen lassen ? Java Basics - Anfänger-Themen 20
K Verschiebeoperatoren - manchmal falsche Ergebnisse Java Basics - Anfänger-Themen 7
S Ergebnisse einer while Schleife zusammenfassen Java Basics - Anfänger-Themen 4
C Ergebnisse auf 2 Kommastellen runden Java Basics - Anfänger-Themen 3
S integer ergebnisse Java Basics - Anfänger-Themen 6
S Ergebnisse aus statischen Methoden weiterverwenden Java Basics - Anfänger-Themen 5
A Wochentag über SimpleDateFormat bringt wirre Ergebnisse Java Basics - Anfänger-Themen 4
D Ergebnisse als .txt Speichern.wichtig. Java Basics - Anfänger-Themen 47
V Ergebnisse in einer Struktur speichern Java Basics - Anfänger-Themen 4
G Mehrere Ergebnisse ausgeben Java Basics - Anfänger-Themen 3
M Was könnte hier nicht stimmen??? Java Basics - Anfänger-Themen 9
C millisekunden bei gregoriancalendar stimmen nicht Java Basics - Anfänger-Themen 2
thomas55 Erste Schritte Modul läuft in IntelliJ, nicht in NetBeans Java Basics - Anfänger-Themen 11
richis-fragen Nicht ausführbares JAR, externe jars mit einbinden Java Basics - Anfänger-Themen 7
S Erstes Programm: Hallo Welt funktioniert nicht. Java Basics - Anfänger-Themen 3
O Obfuscateter Code lässt sich nicht ausführen? Java Basics - Anfänger-Themen 7
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
S Wie debugge ich dies am besten: SingleThreadExecutor führt Task nicht aus..? Java Basics - Anfänger-Themen 29
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
missy72 Erste Schritte (nicht) Deterministischer endlicher Automat Java Basics - Anfänger-Themen 9
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
C Kann mir jemand sagen warum ich nicht mal rechnen kann ? Java Basics - Anfänger-Themen 32
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben