tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
294
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    sepp75 sepp75 ist offline Rookie
    Registriert seit
    Aug 2011
    Beiträge
    6
    Wenn ich als eine Zahl eingebe wird nie etwas ausgegeben. Ich kann einfach nicht nachvollziehen warum.


    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    public class fakultaet {
     
        public static void main(String[] args) {
                  System.out.println("n?");
                  try {
                  BufferedReader input=new BufferedReader (new InputStreamReader (System.in));
                  String nn;
                  nn = input.readLine();
                  int n = Integer.parseInt(nn);
                  int[] fac = new int[n];
                  fac[0] = 1;
                  for (int h =1; h<= n; h++)
                  {
                      fac[h] = fac[h-1] * h;
                  }
                  System.out.print(fac[n]);
     
                  }
                  catch (Exception ex)
                  { 
                      ex.printStackTrace();
                  }
     
        }
     
    }
    Geändert von sepp75 (11.08.11 um 18:39 Uhr)
     

  2. #2
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Hallo und willkommen im Forum

    1. bereits beim kompilieren müsste eine Fehlermeldung erscheinen, dass die variable 's' in Zeile 14 nicht gefunden werden kann
    2. Exceptions sind dafür da, dass sie dem Entwickler helfen, Fehler zu finden. Deswegen schreibt man in einen catch-Block üblicherweise
    Code java:
    1
    
    ex.printStackTrace();
    , das bewirkt, dass die Fehlermeldung auf der Konsole ausgegeben werden.

    3. Klassennamen schreibt man üblicherweise groß

    4. in Zeile 10 erzeugst du ein int[], das ist aber zu klein!

    5. warum speicherst du die Ergebnisse zwischendurch? Brauchst du die Zwischenergebnisse? Sonst reicht eine temporäre Variable!

    EDIT:
    Bei n>=12 bekommst du einen Überlauf, weil der Wertebereich von int zu klein ist.
    Würdest du den Typ von fac auf long ändern, kann es immerhin bis n <=20 funktionieren. Willst du größere Fakultäten berechnen, solltest du dir java.math.BigInteger anschauen.
    Für ungenauere Berechnungen reicht auch double (statt int), das geht dann bis n<=170
    Geändert von genodeftest (11.08.11 um 18:18 Uhr)
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  3. #3
    sepp75 sepp75 ist offline Rookie
    Registriert seit
    Aug 2011
    Beiträge
    6
    Danke für die schnelle Antwort
    Zu 1. Ich habe den Code auf das wichtigste minimiert, ich muss wohl das "int s;" und "s = h-1" gelöscht haben.

    Zu 2. Wusste ich nicht. Danke für den Tipp

    Zu 3. Wusste ich auch nicht. (Ist eigentlich ja nicht so wichtig)

    Zu 4. Werde wohl kaum ein grösseres Array brauchen. Aber werde es trotzdem mal noch ändern.

    Zu 5. Ja die Zwischenergebnisse brauche ich noch.

    Es kommt jetzt die Fehlermeldung
    Code java:
    1
    2
    
    java.lang.ArrayIndexOutOfBoundsException: 3
        at fakultaet.fakultaet.main(fakultaet.java:25)

    Ich habe einfach mal "double" statt "int" genommen, das java.math.BigInteger werde ich erst später noch ausprobieren.
    Geändert von sepp75 (11.08.11 um 18:59 Uhr)
     

  4. #4
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.502
    Hi

    Das bedeutet, dass du auf mehr Elemente zugreifst, als ein Array hat.

    Wenn du zB. ein
    Code java:
    1
    
    double[] abc = new double[4];
    machst, hat das schon 4 doubles, aber so nummeriert:
    abc[0] abc[1] abc[2] und abc[3]

    In deiner for-Schleife greifst du aber auf
    abc[1] abc[2] abc[3] und abc[4]
    zu. beim [4] kommt dann die Exception.

    Gruß
     

  5. #5
    sepp75 sepp75 ist offline Rookie
    Registriert seit
    Aug 2011
    Beiträge
    6
    Danke für den Tipp ich dachte eben, dass wenn man einen Array
    Code java:
    1
    
    double[] abc = new double[4];
    so definiert man danach auf abc[0] abc[1] abc[2] abc[3] und abc[4] zugreifen kann.

    In dem Fall ist das Problem gelöst.
     

  6. #6
    SE Tutorials.de Gastzugang
    Wenn das Problem gelöst ist makiere den Thread bitte als erledigt.
     

  7. #7
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Zitat Zitat von sepp75 Beitrag anzeigen
    Es kommt jetzt die Fehlermeldung
    Code java:
    1
    2
    
    java.lang.ArrayIndexOutOfBoundsException: 3
        at fakultaet.fakultaet.main(fakultaet.java:25)

    Ich habe einfach mal "double" statt "int" genommen, das java.math.BigInteger werde ich erst später noch ausprobieren.
    Das habe ich gemeint mit "dein Array ist zu klein" – und zwar um genau ein Element.
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

Ähnliche Themen

  1. CUDA Werte werden falsch aus dem Speicher gelesen
    Von Nimmer im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 29.01.11, 11:42
  2. Antworten: 2
    Letzter Beitrag: 02.12.08, 14:40
  3. VB6: Wochentagsname wird falsch ausgegeben
    Von Kraah im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 04.05.08, 14:03
  4. Werte werden falsch übergeben
    Von lordofscotland im Forum PHP
    Antworten: 3
    Letzter Beitrag: 13.08.05, 20:03
  5. filesize falsch ausgegeben
    Von -Ener- im Forum PHP
    Antworten: 9
    Letzter Beitrag: 17.04.05, 09:29