Pascalsche Zahlenebene

Status
Nicht offen für weitere Antworten.
S

shok

Gast
hallo
brauch unbedingt etwas hilfe und zwar sollten wir ein methode programmieren, welches bei der eingabe der zeilennummer die pascalsche zahlenebene zurückliefert (und das jeweils zeilenweise in string)
hier ist mein quelcode
vielleicht kann mir weiterhelfen, wäre sehr dankbar

gruß shok

Code:
import java.util.Scanner;

public class pascalb {
public static void main (String[]arg){
	System.out.println("Bitte geben Sie die Zeile an!");
	Scanner sc = new Scanner(System.in);
	int z= sc.nextInt();
	System.out.printf("%s",pascal(z));


	
}

public static String pascal(int z){
	int feld [][]= new int [z][z];	
	String b="";
		for (int n =0;n<=z;n++){
			feld [n]= new int[n+1];
			for (int k=0; k<=z;k++){
		if ((n<=2)|| (k==1) || (k==n)){
			feld [n][k]=1;
			b=b+(feld[n][k]);
			}
		else
	b=b+(feld[n-1][k-1]+feld[n-1][k]);
	return b;
	}
			
	}
return b;
}
}
 

GRudiD

Aktives Mitglied
Sieht ganz schön aufwendig aus. Ich hoffe du entschuldigst wenn ich mich nicht durch deinen Code durchbeiße.
Guck mal unter
www.michael-holzapfel.de/themen/pascaldreieck/pascaldreieck.htm.
Dort wird das Pascalsche Dreieck mathematisch beschrieben. Besonders der Teil hinter "Allgemein gilt: " dürfte dich interessieren. Dann wird dein Problem relativ einfach zu lösen sein.

Mein Vorschlag, schreib dir eine Methode berechne_n_ueber_k(int n, int k) und rechne damit die Elemente der n-ten Zeile aus. Die zu einem netten String zusammengapackt und du hast deine Lösung.
 

WieselAc

Top Contributor
Also generell würde ich dir raten, das EVA (Zuerst Eingabe, dann Verarbeitung und zum Schluss die Ausgabe) zu benutzten. Das heißt konkret, Trenn das füllen des Dreiecks vom bauen des Strings. Ich habe mal dein Gerüst benutzt und es etwas leserlicher umgebaut. Raus kann das hier:

Code:
public static String pascal(int z) {
		int feld[][] = new int[z][];
		for (int i = 0; i < feld.length; i++) {
			int[] zeile = new int[i+1];
			zeile[0] = 1;
			zeile[i] = 1;
			for (int j = 1; j < i; j++) {
				zeile[j] = feld[i - 1][j - 1] + feld[i - 1][j];
			}
			feld[i]=zeile;
		}
		
		StringBuffer b = new StringBuffer();
		for (int i = 0; i < feld.length; i++) {
			for (int j = i; j < z; j++) {
				b.append("\t");
			}
			for (int j = 0; j < feld[i].length; j++) {
				b.append(feld[i][j]).append("\t\t");
			}
			b.append(System.getProperty("line.separator"));
		}
		return b.toString();
	}

PS:

Code:
...
      else
   b=b+(feld[n-1][k-1]+feld[n-1][k]);
   return b;

dieses retrun Statement macht in deinem Code das Problem. Generell würde ich nur ein return mitten in eine Methode packen, wenn ich mir sicher bin was ich da mache zusätzlich sollte man einen else ZWeig immer klammern.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben