Korrektur nach der Berechnung vornehmen, aber wie?

Luxussucht

Mitglied
Hallo Freunde,


ich und ein Freund arbeiten zur Zeit an einem Projekt und sind allerdings keine Informatiker. Wir haben ein Programm geschrieben, welches bislang nur Methoden aufruft und die jeweiligen Berechnungen durchfüht.Es geht um Kühllast- und Volumenstromberechnungen. Das Programm läuft soweit, nur ist es so, dass das Programm quasi aufgepeppt werden muss, damit es nicht nur stinknormal irgendwelche Berechnungen durchführt.
Das Programm ist folgenderweise aufgebaut:

Begrüßung
Text was berechnet werden soll
Anweisung was der User eingeben soll, mit bestimmter Fragestellung
<userEingabe>
Text was als nächstes berechnet wird
Anweisung was der User eingeben soll, mit bestimmter Fragestellung
<userEingabe>
.
.
.
Ihre personenbezogene Wärme beträgt "..."
.
.
.


Nun macht das Programm alle Berechnungen durch. Jetzt wollen wir aber auch Korrekturen vornehmen. Der User soll z.B. die RauteTaste drücken und dann soll quasi ein Menü erscheinen welchen Wert er denn ändern will

z.B.

personenbezogene Wärme
1.) Personanzahl
2.) Si Faktor
3.) Uhrzeit
...
Beleuchtungswärme
1.) Uhrzeit
2.) Raumfläche
...

Dann soll der User quasi alle Werte die er falsch eingegeben hat korrigieren können. Alle andere Werten sollen gleich bleiben und dann wird das Ergebenisautomatisch neu berechnet und ausgegeben.
Wir sind schon seit Tagen am überlegen wie wir das mit setter und getter Methoden erreichen können. Allerdings kriegen wir das nicht gebacken und versuchen hier Ratschläge zu holen, zumal wir das Thema auch noch nie hatten.
 
Mal als ersten Entwurf auf die Schnelle.
Java:
public class AbfrageDemo
{

    public static void main(String[] args)
    {

        boolean allesErledigt = false;
        boolean eingabeGetaetigt = false;
        double wertA = 0;
        double wertB = 0;
        String rechenart = "";
        while (!allesErledigt)
        {
            if (!eingabeGetaetigt)
            {
                //Neueingabe Werte
                eingabeGetaetigt = true;
            }
           
            double summe = berechne(wertA, wertB, rechenart);
            System.out.println(String.format(Locale.GERMAN,
                    "Rechenart: %s, Ergebnis: %f", rechenart, summe));
           
            int x = wieGehtsWeiter();
            if(x == 3)
            {
                allesErledigt = true;
            } else{
                System.out.println("Das muss natuerlich noch angepasst werden, siehe Methode \"wieGehtsWeiter\"");
            }

        }
    }

  

    private static double berechne(double wertA, double wertB, String rechenart)
    {
        switch (rechenart)
        {
            case "+":
                return wertA + wertB;
            case "-":
                return wertA - wertB;
            case "/":
                return wertA / wertB;
            case "*":
                return wertA * wertB;
            default:
                return 0;
        }
    }

    private static int wieGehtsWeiter()
    {
        System.out.println(String.format(Locale.GERMAN, "Fuer Rechenart aendern : 1"));
        System.out.println(String.format(Locale.GERMAN, "Fuer neue Werte eingeben : 2"));
        System.out.println(String.format(Locale.GERMAN, "Fuer Beenden : 3"));
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        return x;
    }

}
 
Jepp, funktioniert einwandfrei. Ich würde die Neueingabe der Werte und die Eingabe der Rechenoperation durch boolesche Werte behandeln.
Java:
run:
Eingabe Wert A
5,5
Eingabe Wert B
6,7
Eingabe Rechenart
+
Rechnenart: +, Ergebnis: 12,200000
Fuer Rechenart aendern : 1
Fuer neue Werte eingeben : 2
Fuer Beenden : 3
1
Eingabe Rechenart
-
Rechnenart: -, Ergebnis: -1,200000
Fuer Rechenart aendern : 1
Fuer neue Werte eingeben : 2
Fuer Beenden : 3
1
Eingabe Rechenart
/
Rechnenart: /, Ergebnis: 0,820896
Fuer Rechenart aendern : 1
Fuer neue Werte eingeben : 2
Fuer Beenden : 3
1
Eingabe Rechenart
*
Rechnenart: *, Ergebnis: 36,850000
Fuer Rechenart aendern : 1
Fuer neue Werte eingeben : 2
Fuer Beenden : 3
2
Eingabe Wert A
6
Eingabe Wert B
2,2343
Rechnenart: *, Ergebnis: 13,405800
Fuer Rechenart aendern : 1
Fuer neue Werte eingeben : 2
Fuer Beenden : 3
3
BUILD SUCCESSFUL (total time: 58 seconds)
 
Läuft das alles auf der Konsole oder habt ihr eine GUI? Falls letzteres: welche?
ja, es soll auf der Konsole laufen.


Ich habe mich an einen neuen Versuch rangewagt, die Idee dahinter ist recht simpel, allerdings schaffe ich das nicht ganz umzusetzen


Java:
import java.util.Scanner;

public class Tutorial {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);


        String choice = "";
        while (!choice.equals("q")) {
            switch (choice) {
                case "Personenbezogene Kuehllast":
                    System.out.println("Fuer die personenbezogene Kuehllast sind folgende Informationen wichtig: ");
                    System.out.println("Die Anzahl der Personen (bitte eine ganzzahlige Ziffer eingeben)");
                    int personenAnzahl = scan.nextInt();

                    if (personenAnzahl == (int) personenAnzahl) {
                        System.out.println("Ihre Eingabe lautet: " + personenAnzahl);
                    } else {
                        System.out.println("Haben Sie sich vertippt ? Oder sind sie einfach nur bloed ?");
                    }

                    System.out.println();

                    System.out.println("Der  Si Faktor beruecksichtigt, dass nicht permanent Leute sich im Raum aufhalten");
                    System.out.println("Somit ist der Si Faktor ein wichtiger Bestandteil der Kuehllastberechnung");
                    System.out.println("Für den Si faktor benoetigen wir folgende Daten");
                    double[] array = new double[3];
                    System.out.println("Um wie viel Uhr wird der Raum genutzt (Beginn)?");
                    array[0] = scan.nextDouble();
                    System.out.println("Bis wann wird der Raum genutzt ?");
                    array[1] = scan.nextDouble();
                    System.out.println("Wahre Ortszeit ? (Jetzige Uhrzeit)");
                    array[2] = scan.nextDouble();

                    System.out.println();
                    System.out.println("Jeder Mensch hat eine eigene Wärmeabgabe, welcher sich nach Aktivitaetsstufe, sowie");
                    System.out.println("Raumtemperatur erschließen laesst.");
                    System.out.println("Sie koennen optional die jetzige Raumtemperatur durch den Temperatursensor erfassen lassen.");
                    System.out.println("Sie koennen die Raumtemperatur auch selber eingeben.");
                    System.out.println("Fuer eine manuelle Eingabe druecken Sie die 1; fuer den Temperatursensor druecken Sie die 2");
                    double qp = 0;
                    int aktivitaetsstufe = 0;
                    int temp = 0;

                    int userEingabe = scan.nextInt();
                    if (userEingabe == 1) {
                        temp = scan.nextInt();
                    }
                    if (userEingabe == 2) {
                        //Tempsensor
                    }
                    if (userEingabe == 2) {

                        if (aktivitaetsstufe == 1 && temp == 18) {
                            qp = 100;
                        }
                        if (aktivitaetsstufe == 1 && temp == 20) {
                            qp = 95;
                        }

                        if (aktivitaetsstufe == 1 && temp == 22) {
                            qp = 90;
                        }
                        if (aktivitaetsstufe == 1 && temp == 23) {
                            qp = 85;
                        }
                        if (aktivitaetsstufe == 1 && temp == 24) {
                            qp = 75;
                        }
                        if (aktivitaetsstufe == 1 && temp == 25) {
                            qp = 75;
                        }
                        if (aktivitaetsstufe == 1 && temp == 26) {
                            qp = 70;
                        }

                        if (aktivitaetsstufe == 2 && temp == 18) {
                            qp = 125;
                        }
                        if (aktivitaetsstufe == 2 && temp == 20) {
                            qp = 115;
                        }
                        if (aktivitaetsstufe == 2 && temp == 22) {
                            qp = 105;
                        }
                        if (aktivitaetsstufe == 2 && temp == 23) {
                            qp = 100;
                        }
                        if (aktivitaetsstufe == 2 && temp == 24) {
                            qp = 95;
                        }
                        if (aktivitaetsstufe == 2 && temp == 25) {
                            qp = 85;
                        }
                        if (aktivitaetsstufe == 2 && temp == 26) {
                            qp = 85;
                        }


                        if (aktivitaetsstufe == 3 && temp == 18) {
                            qp = 155;
                        }
                        if (aktivitaetsstufe == 3 && temp == 20) {
                            qp = 140;
                        }
                        if (aktivitaetsstufe == 3 && temp == 22) {
                            qp = 120;
                        }
                        if (aktivitaetsstufe == 3 && temp == 23) {
                            qp = 115;
                        }
                        if (aktivitaetsstufe == 3 && temp == 24) {
                            qp = 110;
                        }
                        if (aktivitaetsstufe == 3 && temp == 25) {
                            qp = 105;
                        }
                        if (aktivitaetsstufe == 3 && temp == 26) {
                            qp = 95;
                        }


                    }


                    double Si = 0.0D;
                    System.out.println("Die Konvektive Wärmeabgabe eines Menschen beträgt 50% ");


                    if (array[0] <= 8.0D && array[1] <= 16.0D) {
                        Si = 0.86;

                    }

                    if (array[0] > 8.0D && array[1] <= 20.0D) {
                        Si = 0.90D;
                    }

                    if (array[0] <= 7.0D && array[1] <= 12.0D) {
                        Si = 0.85D;
                    }

                    if (array[0] <= 6.0D && array[1] <= 12) {
                        Si = 0.88D;
                    }


                    break;
                case "b":
                    break;
                case "c":

                    System.out.println("Enter the first number");

                    break;
                case "d":

                case "e":

                    break;
                case "f":

                    break;
                case "?":
                    System.out.println("Command Options: ");
                    System.out.println("Personenbezogene Kuehllast");
                    System.out.println("b: Num Questions Asked");
                    System.out.println("c: All Numbers Are the Same");
                    System.out.println("d: Sum Between Two Integers");
                    System.out.println("e: Repeat the String");
                    System.out.println("f: It is Palindrome");
                    System.out.println("?: Display");
                    System.out.println("q: Quit");
                    break;
            }
        }
    }
}

Wie bekomme ich das zum laufen -___-
 
Klein anfangen:
Java:
import java.util.Scanner;

public class Tutorial {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        String choice = "";
        while (!choice.equals("q")) {
            default:
                System.out.println("Command Options: ");
                System.out.println("?: Display");
                System.out.println("q: Quit");
                choice = scan.nextLine();
         }
}
Damit hast Du schon mal drei Dinge erschlagen:
1. Du kannst ein ? eingeben, um das Menü zu erhalten und einen Befehl eingeben zu können
2. Du kannst ein q eingeben, um das Programm zu beenden
3. Fehleingaben werden wie ein ? behandelt.

Wenn Du jetzt c einbauen willst, dann exemplarisch:
Java:
            case "c":
                System.out.println("Enter the first number");
                firstNumber = scan.nextInt();
                choice = "?"; // für den nächsten Schleifendurchlauf
                break;
Später wirst Du Methoden und Objekte dafür verwenden (wollen), für den Anfang sollte das aber reichen. Es geht erst einmal darum, Dich mit ein paar Grundlagen vertraut zu machen.
 
Java:
public class AbfrageDemo
{

    public static void main(String[] args)
    {

        boolean allesErledigt = false;
        boolean eingabeGetaetigt = false;
        boolean ersteBerechnung = false;
        double wertA = 0;
        double wertB = 0;
        double ergebnis;
        String rechenart = "";
        while (!allesErledigt)
        {
            if (!eingabeGetaetigt)
            {
                Scanner scanner = new Scanner(System.in);
                System.out.println("Eingabe Wert A");
                wertA = scanner.nextDouble();
                System.out.println("Eingabe Wert B");
                wertB = scanner.nextDouble();
                eingabeGetaetigt = true;
            }
            
            if (!ersteBerechnung)
            {
                Scanner scanner = new Scanner(System.in);
                System.out.println("Eingabe Rechenart");
                rechenart = scanner.nextLine();
                ersteBerechnung = true;
            }
            
            
                    
            ergebnis = berechne(wertA, wertB, rechenart);
            ausgabeErgebnis(rechenart, ergebnis);

            int x = wieGehtsWeiter();
            switch (x)
            {
                case 3:
                    allesErledigt = true;
                    break;
                case 2:
                    eingabeGetaetigt = false;
                    break;
                case 1:
                    ersteBerechnung = false;
                    break;
                default:
                    break;
            }

        }
    }

    private static double berechne(double wertA, double wertB, String rechenart)
    {
        switch (rechenart)
        {
            case "+":
                return wertA + wertB;
            case "-":
                return wertA - wertB;
            case "/":
                return wertA / wertB;
            case "*":
                return wertA * wertB;
            default:
                return 0;
        }
    }

    private static int wieGehtsWeiter()
    {
        System.out.println(String.format(Locale.GERMAN,
                "Fuer Rechenart aendern : 1"));
        System.out.println(String.format(Locale.GERMAN,
                "Fuer neue Werte eingeben : 2"));
        System.out.println(String.format(Locale.GERMAN, "Fuer Beenden : 3"));
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        return x;
    }

    private static void ausgabeErgebnis(String rechenart, double ergebnis)
    {
        System.out.println(String.format(Locale.GERMAN,
                "Rechnenart: %s, Ergebnis: %f", rechenart, ergebnis));
    }

}
Zudem hast du if (userEingabe == 2) { ... doppelt. Außerdem würde ich an Stelle if (aktivitaetsstufe == 1 && temp == 18) { qp = 100; } mir mir was anderes überlegen, das ist total unübersichtlich.
Mir schwebt die Lösung wie: wenn Fall A, dann, vor. Fall A : aktivitaetsstufe == 1 && temp == 18
 

Zurück
Oben