Pascal'sche Drreieck. was mache ich in der ausgabe flasch?

Status
Nicht offen für weitere Antworten.

Dagobert

Bekanntes Mitglied
Code:
import java.io.*;

public class PascalDreieck {
	public static void main(String[] args) throws IOException {
		BufferedReader input = new BufferedReader (new InputStreamReader(System.in));
		int n;
		int[][] feld;
		int zeile;
		int spalte;
		
		System.out.print("Bitte geben sie eine Zahl ein: ");
		n=Integer.parseInt(input.readLine());
		
		feld = new int[n+1][];
		for(zeile=0;zeile<=n;zeile++){
			feld[zeile] = new int [zeile+1];
			feld[zeile][0] = 1;
			feld[zeile][zeile] = 1;
			for(spalte=1;spalte<=zeile;spalte++){
				feld[zeile][spalte] = feld[zeile-1][spalte-1]+feld[zeile-1][spalte];
			}
		}
		for(int i=0;i<n;n++)
			for(int j=0;j<n;j++){
				System.out.print(feld[i][j]);
			}
		System.out.println();
	}
}

Nun meine frage... ich weis was an der ausgabe falsch ist...ich will mehr Felder ausgeben als vorhanden sind... aber wie Formuliere ich die bedingung das es funktioniert?

THX 4 help
 
S

SlaterB

Gast
die Länge eines Arrays kannst du mit array.length herausfinden,
damit kannst du die Schleife genau bis < array.length laufen lassen,

deine Berechnung der Felder aus den vorherigen Feldern muss auch noch besser werden,
da kommt es noch zu Exceptions

for (int i = 0; i < n; n++) {
führt zu einer Endlosschleife, schaue dir die Zeile mal ganz genau an,

das System.out.println(); ist übrigens kein Teil der Schleife,
wird nur ganz am Ende einmal ausgeführt
 

Dagobert

Bekanntes Mitglied
ja bei der for schleife hab ich die klammern vergessen :D

aber da steckt torzdem noch ein Fehler drin... aber ich weis grade echt nicht wo... sry... und was kann ich an den berechnungen noch beser machen? o_O
 
S

SlaterB

Gast
wie sieht denn dein Code nun aus?
Compiler-Fehler oder Exception, Zeile?

------

diese Benutzereingabe würde ich übrigens unbedingt wegnehmen zum Testen,
n=5;
macht dir das Leben deutlich einfacher..

--------

> und was kann ich an den berechnungen noch beser machen?
na mach es so dass es funktioniert, das wär schon mal was ;)

beim Testlauf siehst du ja die Exception
 

Dagobert

Bekanntes Mitglied
Hier meine Fehlermeldung

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Felder.PascalDreieck.main(PascalDreieck.java:24)

und hier der Aktuelle Code nochmal dazu
Code:
import java.io.*;

public class PascalDreieck {
	public static void main(String[] args) throws IOException {
		BufferedReader input = new BufferedReader (new InputStreamReader(System.in));
		int n;
		int[][] feld;
		int zeile;
		int spalte;
		
		System.out.print("Bitte geben sie eine Zahl ein: ");
		n=Integer.parseInt(input.readLine());
		
		feld = new int[n+1][];
		for(zeile=0;zeile<=n;zeile++){
			feld[zeile] = new int [zeile+1];
			feld[zeile][0] = 1;
			feld[zeile][zeile] = 1;
			for(spalte=1;spalte<=zeile;spalte++){
				feld[zeile][spalte] = feld[zeile-1][spalte-1]+ feld[zeile-1][spalte];
			}
		}
		for(int i=0;i<n;n++){
			for(int j=0;j<n;j++){
				System.out.print(feld[i][j]);
			}
		System.out.println();
		}
	}
}
 
S

SlaterB

Gast
was ist Zeile 24? ich kann es schon ahnen, aber was nützt es wenn du die Zeile ohne passende Nummerierung postest?

es macht keinen Sinn vor einer Zeile wie
feld[zeile][spalte] = feld[zeile-1][spalte-1]+ feld[zeile-1][spalte];
dumm rumzustehen und andere um Hilfe zu fragen,
zunächst mal trenne das auf in drei Befehle, damit du weißt,
bei welchem Arrayzugriff der Fehler auftritt:

int eins = ..
int zwei = ..
feld[zeile][spalte] = eins + zwei;

wenn dann bei einer dieser drei Zeilen ein Fehler auftritt,
dann mache davor eine Ausgabe:
System.out.println("greife nun auf Array xy mit Index xx und Index yy zu");
die letzte Ausgabe vor der Exception solltest du dir genauer anschauen ;)

wenn du dann weißt, welcher Index falsch läuft, dann musst du das natürlich noch korrigieren,
das ist nicht ganz so leicht,
aber zumindes das Herausfinden, welcher Fehler auftritt, das ist einfach nur Fleiß ohne die geringste geistige Anstrengung,
daher verrate ich dir das bewußt nicht, sondern zeige auf, wie du das kinderleicht selber herausfinden kannst


------------

und sei froh dass diese Exception auftritt, wie gesagt würdest du sonst in einer Endlosschleife landen:

for (int i = 0; i < n; n++) {
führt zu einer Endlosschleife, schaue dir die Zeile mal ganz genau an,
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben