Fehler bei nem Prog Binominialkoeffizient

MSshady

Mitglied
Also das Prog soll den Binominialkoeffizienten berechnen und eine bestimmte Zeile des Pascalschen Dreiecks ausgeben:

PHP:
import algds.IOUtils;

public class binomk {
    public static void main(String[] args) {
        System.out.println("Welche Zeile soll ausgegeben werden? ");
        int n=IOUtils.readInt();
        System.out.println("Die Zeile " +n+ " enthält die Werte " +?);

	long a[] = new long[n+1];
	for(k=0;k<=n;k++)
	 {
	 a[k] = (c(n,k));

	}
	
	}		// endmain

        public static long c(long n, long k) {
            return (fak(n)/(fak(k)*fak(n-k)));
        }
        
        public static long fak(long f) {
            long ergebnis = 1;
            for(int i = 1; i<=f; i++); {
                ergebnis *= i;
            }
            return ergebnis;
        }
}

Das array auslesen kann ich net so richtig weiß nicht so recht wie das geht, aber mit schleife des ist ja klar :).

Beim debuggen kommen folgende Fehler:

PHP:
binomk.java [10:1] cannot resolve symbol
symbol  : variable k 
location: class binomk
        for(k=0;k<=n;k++)
            ^
binomk.java [10:1] cannot resolve symbol
symbol  : variable k 
location: class binomk
        for(k=0;k<=n;k++)
                ^
binomk.java [10:1] cannot resolve symbol
symbol  : variable k 
location: class binomk
        for(k=0;k<=n;k++)
                     ^
binomk.java [12:1] cannot resolve symbol
symbol  : variable k 
location: class binomk
         a[k] = (c(n,k));
           ^
binomk.java [12:1] cannot resolve symbol
symbol  : variable k 
location: class binomk
         a[k] = (c(n,k));
                     ^
binomk.java [25:1] cannot resolve symbol
symbol  : variable i 
location: class binomk
                ergebnis *= i;
                            ^
6 errors
Errors compiling.
Weiß aber nicht was Falsch ist :(
Wäre schön wenn mir jemand helfen könnte, die Datentypen habe ich auf int abe float wäre ja eigentlich besser aber meldet er fehler wegen dem array? oder geht des doch mit float.

Danke schonmal :)
 
for(k=0;k<=n;k++)

for(int k=0;k<=n;k++)
{...}

Wenn du eine Variable das erste Mal verwendest solltest du sie irgendwo deklarieren... :p


Und was den Fehler in Zeile 25 angeht - wo gehört bei Schleifen das Semikolon hin, und wo sollte man es besser weglassen?
 
Zuletzt bearbeitet:
Danke schön, das wäre die erste Hürde gewesen (zum Glück nur kleinigkeiten falsch) und wie sieht es mit dem auslesen des Feldes aus? hat da jemand ne lösung? :)
Und wegen dem Datentyp int oder wäre float doch besser?

Würde mich freuen.
 
Den Datentyp solltest du nach dem zu erwartenden Ergebnis wählen - wenn du Fliesskomma brauchst, dann nimm float oder double.
Felder kanst du aus -jedem- Datentyp bauen, ob das jetzt Integers oder Fenster sind ist egal, deine Fehlermeldung muss also eine andere Ursache haben. Der Wortlaut und die Zeilennummer könnten beim Beheben helfen.


Was du in die Schleife zum Auslesen des Feldes reinschreiben musst hängt davon ab was du mit den Daten vorhast.
 
Einfach ausgeben geht z.B. so

PHP:
public class Untitled1 {

 public static void main (String[] Args)  /*Das erste übergebene  Argument gibt die Anzahl der Elemente an*/
 {
  int[] MeinArray=new int[Integer.parseInt(Args[0])];
  // mach irgendwas
  Ausgabe(MeinArray);
 }

 public static void Ausgabe(int[] Array)
 {
  int i;
  for (i=0;i<Array.length;i++)
  {


   if(((i+1)%7)==0)  //Wieviele Elemente passen in eine Zeile?
                     //Bei variabler Ausgabestringlänge mitzählen...
    System.out.println(Array[i]);
   else
   System.out.print(Array[i]);
  }
 }
}
 
Hallo Daishi
also ich habe den Code jetzt so
PHP:
import algds.IOUtils;

public class binomk {
    public static void main(String[] args) {
        System.out.println("Welche Zeile soll ausgegeben werden? ");
        int n=IOUtils.readInt();
        System.out.println("Die Zeile " +n+ " enthält die Werte");
        
        float a[] = new float[n+1];
        for(int k=0;k<=n;k++) {
            a[k] = (c(n,k));
            System.out.println(a[k]);
            
        }
        
    }		// endmain
    
    public static float c(float n, float k) {
        return (fak(n)/(fak(k)*fak(n-k)));
    }
    
    public static float fak(float f) {
        float ergebnis = 1;
        for(float i = 1; i<=f; i++) {
            ergebnis *= i;
        }
        return ergebnis;
    }
}

Der funktioniert auch nur gibt er mir glaube immer eine Zeile des Pascalschen dreiecks zuviel aus, woran könnte das liegen, kannst du da nochmal nen blick drauf werfen? Wenn ich z.b. die 6. haben will macht er meinermeinung nach die 7. oder ich verrechne mich hier selber =).

Danke nochmal für deine Hilfe bis jetzt :)
 
Normal zählst du 1,2,3,4,...,n
(die meisten)Programmiersprachen zählen 0,1,2,3,4,...,n

Darum schaut eine for-Schleife üblicherweise so aus
"for(int i=0;i<n;i++)"

Wäre dir aufgefallen wenn du das erste Mal so durch ein Array gehst,
"for(int i=0; i<=Array.length;i++)" wirft dir nämlich eine "Out Of Bounds" - Exception um die Ohren. (Bei C/C++ probiers aber besser nicht aus %) )
 
Zurück