dimanche 24 mai 2015

Kapselung, Verständnisfrage zur Objekterzeugung

Hallo zusammen,

ich lerne gerade Java und arbeite dabei unter anderem mit der Seite Java Tutorial interaktiv - Programmieren lernen mit Java
Dort habe ich nun folgende Aufgabe:

Zusammengefasst, weil auch nicht meine eigentliche Frage:
- 5 Integer-Werte einlesen und ausrechnen
- am Anfang einmalige Frage ob man jedes mal die Eingabeaufforderung lesen möchte
--> Auswertung der Frage <ja> oder <nein>
- ja oder nein einlesen

Sooo, das Programm an sich läuft, aber nur weil ich, wie ich weiß verbotener Weise einige Variablen auf public gesetzt habe. Hier erstmal der Code

Code:

public class Equalis        {

        private int sum;
        private int zahl;
        private String eingabeJaNein;
        public String antwort = "ja";
        public String optimiert;
        public int eingabeZahl = 1;
        public boolean eingabeaufforderung = true;

        Scanner scan = new Scanner(System.in);
       
        // Liest die Eingabeaufforderung ein und setzt dann die boolsche
        // Variable eingabeaufforderung auf false.
        // Vorher wird noch zur Sicherheit ein Ja, JA, Nein, oder NEIN etc.
        // mit toLowerCase() in ja oder nein umgewandelt

        public void eingabe()        {
                System.out.println("Eingabeaufforderung anzeigen: <ja> oder <nein>? ");
                eingabeJaNein = scan.nextLine();
                optimiert = eingabeJaNein.toLowerCase();
                eingabeaufforderung = false;
        }
       
        // Fordert eine Zahlenangabe ein, und liest diese dann ein und addiert sie zur Gesammtsumme

        public void zahl()        {
                System.out.println("Geben Sie die "+eingabeZahl+". Zahl ein: ");
                zahl = scan.nextInt();
                sum += zahl;
        }
       
        // Falls der Anwender keine Eingabeaufforderung lesen möchte, wird diese Methode ausgeführt

        public void ohne()        {
                System.out.println("");
                zahl = scan.nextInt();
                sum += zahl;
        }       
       
        // Gibt das Ergebnis aus       

        public void printErgebnis()        {
                System.out.println("Gesammtsumme: " +sum);
        }
       
} // Ende Klasse

Und die Testklasse mit main methode:

Code:

public class EqualisTest        {

        public static void main(String[] args)        {
               
                // Objekterzeugung
                Equalis eq = new Equalis();       
                                       
                // Zählschleife um die Zahl der Eingabeaufforderung zu inkrementieren
                for (eq.eingabeZahl = 1; eq.eingabeZahl < 6; eq.eingabeZahl++)        {
                               
                                // Solange eingabeaufforderung true ist, also nur einmal, wird die Eingabe <ja> oder <nein>    eingelesen
                                if (eq.eingabeaufforderung == true)        {
                                        eq.eingabe();
                                }
                               
                                // Gibt der Anwender "Ja" ein wird zahl() ausgeführt, ansonsten ohne()
                                if (eq.optimiert.equals(antwort))        {
                                        eq.zahl();
                       
                                }else{
                                        eq.ohne();
                                        }       
                }
               
                        eq.printErgebnis();
        }

}

Ich weiß , dass man ein Objekt, was in einer anderen Klasse genutzt wird erst erzeugt und dann mit dem Punkt-Operator aufgerufen wird. Was ich nun von euch möchte :) Warum schaffe ich es nicht die Öffentlichen Instanzvariablen private zu kriegen, zunächste dachte ich bei den String-Variablen(Objekten?) ok, String ist eine Klasse vllt liegt es daran, aber auch die Variable < public int eingabeZahl = 1; > wollte im private modus nicht über den Aufruf eq.eingabeZahl sich kompilieren lassen. Irgendwie habe ich da gerade ein Brett vorm Kopf, vllt sitze ich schon zu lange davor.

Wenn ihr noch Tipps zur Code-Schlankheit bzw. Schönheit höre ich mir das auch gerne an, kommt mir so klobig vor.

Vielen dank und n schönen Sonntag + Feiertag morgen :)


Kapselung, Verständnisfrage zur Objekterzeugung

0 commentaires:

Enregistrer un commentaire