Verständnisproblem

Status
Nicht offen für weitere Antworten.

assault

Aktives Mitglied
HI

hab den folgenden Code und ihc wollte euch bitten ob mir jemand da 1,2 Schnipsel von erklären kann. Hab zwar das Kapitel zu dem Thema galesen aber iergendwie ist mir dasganze noch ein bisschen Schleierhaft...

also der code ist folgender:

Code:
class Konto {   // Nichtausführbare Klasse
	public int kontoNummer;   // Attribute:
	public int blz;
	public String inhaber;
	public double saldo;
	public final double zinsSatz = 0.025;
	// Konstruktoren:
	public Konto( int kn, int bz, String n, double sa ) {
		// Kontrolle: Kontostand beim Anlegen nicht negativ:
		kontoNummer = kn;     blz = bz;
		inhaber = n;          saldo = Math.abs( sa );
	}
	public Konto( int kn, int bz, String n ) {
		this( kn, bz, n, 0.0 );
	}
	// Weitere Methoden:
	public double einzahlen( double betrag ) {
		// Kontrolle: betrag muss positiv sein
		saldo = saldo + Math.abs( betrag );
		return saldo;
	}
	public double abheben( double betrag ) {
		// Kontrolle: betrag positiv! Kontostand nicht negativ!
		if( saldo - Math.abs( betrag ) < 0 )
			    IO.writeln( "Abhebevorgang nicht möglich!" );
		else   saldo = saldo - Math.abs( betrag );
		return saldo;
	}
	public double zinsen( ) { return saldo * zinsSatz; }
	public double zinsZuschlag( ) {
		saldo = saldo + zinsen( );
		return saldo;
	}
}

class Aktion {   // Nichtausführbare Klasse
	public Aktion( String titel ){
		IO.writeln( "Start der Anwendung: " + titel );
		IO.writeln( "===================================" );
	}
	public Konto kontoAnlegen( ) {
		IO.writeln( "Anlegen eines Kontos:" );
		IO.writeln( "=======================" );
		String nm = IO.promptAndReadString( "Inhaber = " );
		int knm = IO.promptAndReadInt( "Kontonummer = " );
		int blzahl = IO.promptAndReadInt( "Blz = " );
		double sld = IO.promptAndReadDouble( "Anfangsstand = " );
		Konto k = new Konto( knm, blzahl, nm, sld );
		return k;
	}
	public int menue() {
		IO.writeln( "Funktionsauswahl:" );
		IO.writeln( "=======================" );
		IO.writeln( "Konto neu anlegen    = 1" );
		IO.writeln( "Einzahlen            = 2" );
		IO.writeln( "Abheben              = 3" );
		IO.writeln( "Zinsen ausschütten   = 4" );
		IO.writeln( "Kontendaten ausgeben = 5" );
		int option = IO.promptAndReadInt( "Gewünschte Option = " );
		return option;
	}
	public double abfrage() {
		return IO.promptAndReadDouble( "Gewünschter Betrag = " );	
	}
	public void ausgabe( double stand ) {
		IO.writeln( "Stand = " + IO.round( stand, 2 ) );
	}
	public void datenAusgabe( Konto k ) {
		IO.writeln( "Ausgabe der Kontodaten:" );
		IO.writeln( "=======================" );
		IO.writeln( "Kontonhaber: " + k.inhaber );
		IO.writeln( "Kontonummer: " + k.kontoNummer );
		IO.writeln( "BLZ: " + k.blz );
		IO.writeln( "Kontostand: " + IO.round( k.saldo,2) );
		IO.writeln( "Zinssatz " + k.zinsSatz );
	}
	public boolean fortsetzen() {
		return (IO.promptAndReadChar( "Weiter (j)? " ) == 'j');
	} 
}

class Bank {   // Ausführbare Klasse
	public static void main( String[] args ) {
		int wahl;    double aktuell = 0.0;
		Aktion akt = new Aktion( "Kontoführung" );
		Konto k1 = akt.kontoAnlegen();
		akt.datenAusgabe( k1 );
		do {
			wahl = akt.menue();
			switch( wahl ) {
				case 1:
					k1 = akt.kontoAnlegen();
				 	break;
				case 2:
					double b = akt.abfrage();        // ausführlich
					aktuell = k1.einzahlen( b );
					akt.ausgabe( aktuell );
					break;
				case 3:
					aktuell = k1.abheben( akt.abfrage() );  // kompakt
					akt.ausgabe( aktuell );
					break;
				case 4:
					akt.ausgabe( k1.zinsZuschlag() );
					break;
				case 5:
					akt.datenAusgabe( k1 );
					break;
				default:
					IO.writeln( "Keine gültige Option!" );	
			}
		}while( akt.fortsetzen() );  
	}
}

So und nun zu den Teilen

Code:
// Konstruktoren:
	public Konto( int kn, int bz, String n, double sa ) {
		// Kontrolle: Kontostand beim Anlegen nicht negativ:
		kontoNummer = kn;     blz = bz;
		inhaber = n;          saldo = Math.abs( sa );
	}
	public Konto( int kn, int bz, String n ) {
		this( kn, bz, n, 0.0 );
Ich sehe das doch richtig, dass das Konstruktoren sind? Meine Frage wozu benötige ich die eigentlich und vor allem diese Stelle bei dem oberen Schnipsel macht mir zu schaffen (verständnismässig)

Code:
public Konto( int kn, int bz, String n ) {
		this( kn, bz, n, 0.0 );

was bewirkt dieses This und wozu mach ich das?
Und dann noch ne Frage zu dem Schlussteil

Code:
int wahl;    double aktuell = 0.0;
		Aktion akt = new Aktion( "Kontoführung" );
		Konto k1 = akt.kontoAnlegen();
		akt.datenAusgabe( k1 );
		do {
			wahl = akt.menue();

Der Part
Code:
Konto k1 = akt.kontoAnlegen();
ich weis das mit dem ersten "Konto" eine Klassenangabe gemacht wird und dann eine beliebige bezeichnung für die Class. Nach dem "=" kenne ich nur das "new" aber was bewirkt das "akt."?
Und beim debuggen der "Anwendung" ist mir mal aufgefallen das obwohl der Schnipsel ja auf die class konto verweist er aber dann direkt in den Part
Code:
public Konto kontoAnlegen( ) {
		IO.writeln( "Anlegen ...
geht und gar nichts in der class konto macht ...
Soll diese Zeile also einfach nur ne Wertüberabe sein von der class "kontoAnlegen" nach der class "Konto"?
Wenn ja in welche Methode????
 
M

MiDniGG

Gast
assault hat gesagt.:
Code:
// Konstruktoren:
	public Konto( int kn, int bz, String n, double sa ) {
		// Kontrolle: Kontostand beim Anlegen nicht negativ:
		kontoNummer = kn;     blz = bz;
		inhaber = n;          saldo = Math.abs( sa );
	}
	public Konto( int kn, int bz, String n ) {
		this( kn, bz, n, 0.0 );
Ich sehe das doch richtig, dass das Konstruktoren sind? Meine Frage wozu benötige ich die eigentlich und vor allem diese Stelle bei dem oberen Schnipsel macht mir zu schaffen (verständnismässig)
Ja. Sind Konstruktore. Naja das ist wohl die beste Möglichkeit irgendwelche Daten zu übergeben. Warum das 2 sind liegt daran, dass man eben die Möglichkeit haben möchte verschiedene Variablen zu verwenden. sieht man z.B. gut an String#valueOf(...);

assault hat gesagt.:
Code:
public Konto( int kn, int bz, String n ) {
		this( kn, bz, n, 0.0 );

was bewirkt dieses This und wozu mach ich das?

Dieses this heißt, dass du damit die aktuelle Klasse aufruft und zwar mit den gegebenen Parametern nur, dass eben dann double sa = 0.0 ist. Was auch die erste Frage etwas erklärt. ;-)


assault hat gesagt.:
Und dann noch ne Frage zu dem Schlussteil

Code:
int wahl;    double aktuell = 0.0;
		Aktion akt = new Aktion( "Kontoführung" );
		Konto k1 = akt.kontoAnlegen();
		akt.datenAusgabe( k1 );
		do {
			wahl = akt.menue();

Der Part
Code:
Konto k1 = akt.kontoAnlegen();
ich weis das mit dem ersten "Konto" eine Klassenangabe gemacht wird und dann eine beliebige bezeichnung für die Class. Nach dem "=" kenne ich nur das "new" aber was bewirkt das "akt."?
Und beim debuggen der "Anwendung" ist mir mal aufgefallen das obwohl der Schnipsel ja auf die class konto verweist er aber dann direkt in den Part
Code:
public Konto kontoAnlegen( ) {
		IO.writeln( "Anlegen ...
geht und gar nichts in der class konto macht ...
Soll diese Zeile also einfach nur ne Wertüberabe sein von der class "kontoAnlegen" nach der class "Konto"?
Wenn ja in welche Methode????

Naja. Du hast irgendwo eine variable die sich "akt" schimpft. Aus der Klasse "Aktion". mit akt.bla liest du eben diese (public) Methode aus der Klasse Aktion aus und übergibst die der Variable k1. Deshalb springt er auch da hin...


So. Ich hoffe des hilft wenigstens einigermaßen.... :)
 

assault

Aktives Mitglied
assault hat folgendes geschrieben::
Code:
// Konstruktoren: 
   public Konto( int kn, int bz, String n, double sa ) { 
      // Kontrolle: Kontostand beim Anlegen nicht negativ: 
      kontoNummer = kn;     blz = bz; 
      inhaber = n;          saldo = Math.abs( sa ); 
   } 
   public Konto( int kn, int bz, String n ) { 
      this( kn, bz, n, 0.0 );


Ich sehe das doch richtig, dass das Konstruktoren sind? Meine Frage wozu benötige ich die eigentlich und vor allem diese Stelle bei dem oberen Schnipsel macht mir zu schaffen (verständnismässig)

Ja. Sind Konstruktore. Naja das ist wohl die beste Möglichkeit irgendwelche Daten zu übergeben. Warum das 2 sind liegt daran, dass man eben die Möglichkeit haben möchte verschiedene Variablen zu verwenden. sieht man z.B. gut an String#valueOf(...);

assault hat folgendes geschrieben::
Code:

Code:
public Konto( int kn, int bz, String n ) { 
      this( kn, bz, n, 0.0 );




was bewirkt dieses This und wozu mach ich das?

Dieses this heißt, dass du damit die aktuelle Klasse aufruft und zwar mit den gegebenen Parametern nur, dass eben dann double sa = 0.0 ist. Was auch die erste Frage etwas erklärt.

noch ne kurze frage zu dem ersten Teil, wann ruft er den welchen Konto konstruktor auf? Ich meine deren bezecihnung ist ja die gleiche und übergiebt er die Variablen an die Variablen über ihm oder wohin? weil ich sehe jetzt nixcht das er iegrgendwas mit den VAriablen machen würde...
 
M

MiDniGG

Gast
Das kommt darauf an, wie du die Klasse aufrufst.

rufst du Konto mit 3 Parametern auf geht er in den Konstruktor mit 3 Parametern und rufst du Konto mit 4 aufgeht er in den mit 4... Aber im Prinzip machen beide das gleiche, da ja der Konstruktor mit 3Par. den mit 4Par. aufruft und eben als letzten Wert 0.0 übergibt, das ist eig nur dafür gut, dass du als programmierer nicht diese 0.0 noch extra angeben musst ;-)
 

assault

Aktives Mitglied
MiDniGG hat gesagt.:
Das kommt darauf an, wie du die Klasse aufrufst.

rufst du Konto mit 3 Parametern auf geht er in den Konstruktor mit 3 Parametern und rufst du Konto mit 4 aufgeht er in den mit 4... Aber im Prinzip machen beide das gleiche, da ja der Konstruktor mit 3Par. den mit 4Par. aufruft und eben als letzten Wert 0.0 übergibt, das ist eig nur dafür gut, dass du als programmierer nicht diese 0.0 noch extra angeben musst ;-)

So nur um mal zu schauen ob ich das jetzt richtig verstanden habe. Wenn der Benutzer seine Eingabe machen soll, springen wir in diese Funktion, für den Fall das er den 4 Parameter nicht übergiebt , die "untere" Funtkion "Konto" mit dem This übergibt dan an die "obere" "Konto" -Funktion und übergiebt die weiter an die Class " kontoAnlegen" und Speichert die werte dann alle gemeinsam in "Konto K"

Code:
Konto k = new Konto ( knm, blzahl, nm, sld);
 
M

MiDniGG

Gast
Fast. Also "kontoAnlegen" ist keine Klasse sondern eine Methode der Klasse Aktion.
Er speichert die Werte nicht Konto K sondern in Konto k1 womit dann später gearbeitet wird.

Korrigiert mich, falls ich was verwechselt hab...
 

assault

Aktives Mitglied
MiDniGG hat gesagt.:
Fast. Also "kontoAnlegen" ist keine Klasse sondern eine Methode der Klasse Aktion.
Er speichert die Werte nicht Konto K sondern in Konto k1 womit dann später gearbeitet wird.

Korrigiert mich, falls ich was verwechselt hab...

ja doch hast recht mit der klasse und der methode meinte das eigentlich auch so *g* nur wo kommt die k1 her der hat da doch "nur" k stehen numeriert er das etwa selbst durch?

edit: habs schon gefunden der über gibt 2 mal einmal in class aktion von
Code:
Konto K = new Konto...
und dann ein zweites mal bei
Code:
Konto k1 = akt.kontoAnlegen ();
da ich keine variable gefunden habe die "akt"
schätzeich einfach mal das es ne abkürzung für die classe aktion sein wird
 
M

MiDniGG

Gast
Oh gott. Nein!!!!!!! Er nummeriert nix ohne dass du ihm das sagst!!!! :)

Nein. Hier:

Code:
int wahl;    double aktuell = 0.0; 
      Aktion akt = new Aktion( "Kontoführung" ); 
      Konto k1 = akt.kontoAnlegen();  <--- HIER
      akt.datenAusgabe( k1 ); 
      do { 
         wahl = akt.menue();

Das war zumindest das erste wo mir so aufgefallen ist.... ^^
 
M

MiDniGG

Gast
Na dann bin ich ja froh. :) Dachte schon es ist etwas zu verwirrend geschrieben... Hab ich nämlich irgendwie ein Tallent dafür :-D :-D :-D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S String Encoding Verständnisproblem Allgemeine Java-Themen 22
M Minmax Algorithmus Verständnisproblem Allgemeine Java-Themen 2
S Verständnisproblem beim Mocking Allgemeine Java-Themen 8
stroggi Bytecode LCMP - Verständnisproblem Allgemeine Java-Themen 3
H Listener Verständnisproblem Allgemeine Java-Themen 5
I Verständnisproblem mit nicht vorhandener Klasse Allgemeine Java-Themen 4
K OCJP Beispielfrage.. Verständnisproblem Allgemeine Java-Themen 2
M Java Threads - Wait Notify - Verständnisproblem Allgemeine Java-Themen 5
S iText PDF - Verständnisproblem beim Update von TableCells (Seitenzahlen) Allgemeine Java-Themen 2
B Stream Verständnisproblem Allgemeine Java-Themen 2
faulelotte Verständnisproblem Domain Driven Design Allgemeine Java-Themen 3
H Verständnisproblem mit Decimalseperator Allgemeine Java-Themen 2
G Verständnisproblem Allgemeine Java-Themen 11
A Verständnisproblem zur Hashtable Allgemeine Java-Themen 10
A Verständnisproblem mit GregorianCalendar Allgemeine Java-Themen 10
T Verständnisproblem Allgemeine Java-Themen 16
G Verständnisproblem double und float Allgemeine Java-Themen 7
R ResourceBundle-Verständnisproblem Allgemeine Java-Themen 3
M Class#getClassLoader - Verständnisproblem Allgemeine Java-Themen 3
M Verständnisproblem bei mehrdimensionalen Arrays Allgemeine Java-Themen 3
S verständnisproblem bei File Allgemeine Java-Themen 6
L Verständnisproblem ? Allgemeine Java-Themen 3
V Verständnisproblem Eclipse BuildPath <-> Import Jar Fi Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben