Kapselung, Verständnisfrage zur Objekterzeugung

LionAge

Mitglied
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 🙂
 
Private Variablen sind nur innerhalb der Klasse selbst sichtbar. Um von anderen Klassen aus darauf zuzugreifen, brauchst du eine getMethode, welche dir diese Variablen zurückgibt.
 
Stimmt, da war was ^^ also würde ich eine Methode getEingabe() schreiben um die Methhode eingabe() abzuhandeln.

Und
public int eingabeZahl = 1;
public boolean eingabeaufforderung = true;
&
public String antwort = "ja";

Sollen sich ja im Prinzip garnicht verändern, außer die bool natürlich die ich nach der ersten Verwendung auf false setze - könnte ich die dann auch als Static deklarieren?
 
"Static" bedeutet, dass diese Variable für alle Instanzen einer Klasse dieselbe ist, im Gegensatz zu "normalen" Variablen, wovon jede Instanz eine eigene besitzt.

Du meinst wahrscheinlich eine Konstante, oder? Dafür gibts den Modifier "final".
 

Neue Themen


Zurück
Oben