Verschachtetel Forschleifen

Pahiti78

Mitglied
Hallo Zusammen,
ich habe ein Problem mit einer Forschleife.
Java:
public class GeschachtetelForschleife {
	public static void main(String[] args) {
for (int i=0; i<2;i++)
{
	for (int j=0;j<=i;j++)
	System.out.println("*");
	System.out.println("+");
}
System.out.println("/");
	}
}
Ich denke dass bei jedem Schleifendurchlauf die innere Schleife immer ein Stern und Plus mehr auswerfen müsste. Dem ist aber nicht so. Anbei das Resultat. Könnte mir jemand erklären, warum sich die erste Methode (Stern) normal und die zweite (Plus) nicht normal verhält? Ich hoffe jeder weiß was ich meine. Danke
Java:
*
+
*
*
+
/
 

njans

Top Contributor
Java:
System.out.println
println gibt am Ende immer einen Zeilenumbrauch aus. Somit kriegst du so niemals mehr als ein Zeichen pro Zeile hin.

Java:
    for (int j=0;j<=i;j++)
    System.out.println("*");
    System.out.println("+");
Dir ist bewusst, dass sich so die for-schleife nur auf das erste syso bezieht?
 

Pahiti78

Mitglied
Nein ist es mir nicht. Das ist ja genau mein Problem. Ich bin der Meinung, das beide Syste,.out Anweisungen gleichwertig abgearbeitet werden müssten und kann mir nicht erklären, warum dem nicht so ist.
 

njans

Top Contributor
Weil der Skopus der for-Schleife so eben nur die nächste Anweisung erfasst, gleiches gilt bei if-anweisungen:
Java:
for (...)
    statement;

if (...)
    statement;

Wenn du das vergrößern willst, müssen eben Klammern her
Java:
for (...){
    statement;
    statement;
    statement;
}

if (...){
    statement;
    statement;
    statement;
}
 

Pahiti78

Mitglied
Hallo,
ich möchte es nochmal aufgreifen. Ich seh meinen Fehler in der zweiten For Schleife nicht. Diese soll den Wert pro Schleifendurchlauf anzeigen. Es soll somit das Sparbuchguthaben nach jedem Lauf neu angezeigt werden. Aber irgendwie rechnet der Compiler falsch :)
Ich danke Euch schon mal vorab.
Java:
public class WertanlageUebersicht {


	public static void main(String[] args) {
		System.out.println("Wieviel Transaktionen wollen Sie anlegen?");
		int n= new java.util.Scanner(System.in).nextInt();
		System.out.println("Welchen Zins werden Sie erhalten?");
		double z= new java.util.Scanner(System.in).nextDouble()/100;
		Wertanlagen [] Sparbuch= new Wertanlagen[n];
		System.out.println(n+" Transaktionen bei einem Zins von "+z);
for (int i=0;i<n;i++){
	Sparbuch[i]=new Sparbuch();
}
double k=0;
double kk=0;
for (int i=0;i<n;i++,k=k+kk){
	Sparbuch[i].geldAnlegen();
	Sparbuch[i].geldAbholen();
	kk=Sparbuch[i].geldAnlegen()-Sparbuch[i].geldAbholen();
	//Alternativ habe ich schon k=Sparbuch[i].geldAnlegen()-Sparbuch[i].geldAbholen(); Da habe ich natürlcih kein kk eingeführt und auch kein zusätzliches Inkrement
	System.out.println(k);

}    
	}
	}
 

njans

Top Contributor
Meinst du das:
Java:
int kk = 0;
for (int i=0;i<n;i++)
{
    Sparbuch[i].geldAnlegen();
    Sparbuch[i].geldAbholen();
    kk += Sparbuch[i].geldAnlegen()-Sparbuch[i].geldAbholen();
    System.out.println(kk);
}

Also du summierst den Gesamtwert (Anlage - Auszahlung) für alle Sparbücher zusammen?

oder willst du das für jedes Konto einzeln ausgeben?
Java:
for (int i=0;i<n;i++)
{
    Sparbuch[i].geldAnlegen();
    Sparbuch[i].geldAbholen();
    int kk = Sparbuch[i].geldAnlegen()-Sparbuch[i].geldAbholen();
    System.out.println(kk);
}
 

Pahiti78

Mitglied
Hallo,
den Code hatte ich selbst auch schon. Ich poste mal die Ergebnisse.
Verwendet habe ich dein erstes Beispiel. Ich denke mittlerweile, dass die erste Schleife falsch ist oder dass ich den Index 0 bei dem Array falsch interpretiere. Das ist aber nur ne Vermutung. Bin noch Neuling in Java. PS. Zinsberechnung spielt keine Rolle. Werde ich erst einbauen, wenn der Rest funkt..:) Außerdem würde ich mir wünschen, dass nach jeder Berechnung das neue Guthaben angezeigt wird. Verstehe nicht warum die Schleife nicht alle Anweisungen des Rumpfes ausgibt:oops:
Java:
Wieviel Transaktionen wollen Sie anlegen?
5
Welchen Zins werden Sie erhalten?
2
5 Transaktionen bei einem Zins von 0.02
Sparbuch Geld anlegen
Wieviel Geld möchten Sie anlegen?
200
Sparbuch Geld abholen
100
Sparbuch Geld anlegen
Wieviel Geld möchten Sie anlegen?
50
Sparbuch Geld abholen
40
10.0
Sparbuch Geld anlegen
Wieviel Geld möchten Sie anlegen?
200
Sparbuch Geld abholen
100
Sparbuch Geld anlegen
Wieviel Geld möchten Sie anlegen?
300
Sparbuch Geld abholen
100
210.0
Sparbuch Geld anlegen
Wieviel Geld möchten Sie anlegen?
200
Sparbuch Geld abholen
10
Sparbuch Geld anlegen
Wieviel Geld möchten Sie anlegen?
200
Sparbuch Geld abholen
30
380.0
Sparbuch Geld anlegen
Wieviel Geld möchten Sie anlegen?
20
Sparbuch Geld abholen
10
Sparbuch Geld anlegen
Wieviel Geld möchten Sie anlegen?
40
Sparbuch Geld abholen
50
370.0
Sparbuch Geld anlegen
Wieviel Geld möchten Sie anlegen?
10
Sparbuch Geld abholen
200
Sparbuch Geld anlegen
Wieviel Geld möchten Sie anlegen?
20
Sparbuch Geld abholen
100
290.0
 

njans

Top Contributor
Java:
Sparbuch[i].geldAnlegen();
    Sparbuch[i].geldAbholen();

Ich gewinnere gerade den Eindruck, dass du in diesen Methoden einen Scanner/Reader erstellst und dann von der Konsole direkt einließt. In diesem Fall hast du in jedem Durchlauf der Schleife jede Anfrage doppelt:
Java:
    for (int i=0;i<n;i++)
    {
        Sparbuch[i].geldAnlegen(); // anlegen
        Sparbuch[i].geldAbholen(); // abholen
        int kk = Sparbuch[i].geldAnlegen()-Sparbuch[i].geldAbholen(); // nochmals anlegen, abholen
        System.out.println(kk);
    }

Magst du mal den Code zu beiden Methoden hier reinstellen?
 

Pahiti78

Mitglied
Sorry,
war ne eine Zeit nicht erreichbar.
Tatsächlich lese ich diese über Scanner ein. Wie könnte ich es anders machen? Wieso wird es dann doppelt ausgegeben? Anbei noch der Code. Danke schonmal für Eure Mithilfe.
1. Klasse Wertanlagen
Java:
abstract class Wertanlagen {
abstract double geldAnlegen();
abstract double geldAbholen();

double l,z,k;
}

Und die zweite Sparbuch.
Java:
class Sparbuch extends Wertanlagen {


	double geldAnlegen() {
	System.out.println("Sparbuch Geld anlegen");
	System.out.println("Wieviel Geld möchten Sie anlegen?");
	double a=new java.util.Scanner(System.in).nextDouble();
	return a;
	}


	double geldAbholen() {
	System.out.println("Sparbuch Geld abholen");
	double e=new java.util.Scanner(System.in).nextDouble();
	return e;
	}
}
 

njans

Top Contributor
Was du brauchst sind getter für deine Exemplarvariablen l,z,k (nebenbei sind das furchtbare Namen, da sie überhaupt nicht aussagen, was diese darstellen. Ich vermute z = zins?) damit du auf die Werte deines Objektes sinnvoll und kontrolliert zugreifen kannst.

Anschließend kannst du auch aus:
Java:
        Sparbuch[i].geldAnlegen(); // anlegen
        Sparbuch[i].geldAbholen(); // abholen
        int kk = Sparbuch[i].geldAnlegen()-Sparbuch[i].geldAbholen(); // nochmals anlegen, abholen

einfach nur das machen:

Java:
        Sparbuch[i].geldAnlegen(); 
        Sparbuch[i].geldAbholen(); 
        int kk = Sparbuch[i].getAnlage() - Sparbuch[i].getEntnahme();

Nach dem Einlesen musst du die Werte nicht direkt zurückgeben. Dafür erstellst du ja das Sparbuch - es ist ein Speicher für Daten.
 

Ähnliche Java Themen

Neue Themen


Oben