Avatar
Jakub Vaněk (Bubavanek):

Zdravím,
s Javou teprve začínám a nějak jsem se zasekl na výpočtu faktoriálu.
Pomohl by někdo?

package vypocetfaktorialu;

import java.util.Scanner;

public class VypocetFaktorialu {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in, "Windows-1250");
        Faktorial f = new Faktorial();
        System.out.print("Zadejte číslo, u kterého chcete spočítat faktoriál: ");
        f.n = Integer.parseInt(sc.nextLine());
        System.out.println("Faktoriál čísla je: " + f.vysledek);

      }
    }
package vypocetfaktorialu;


public class Faktorial {
    public int vysledek;
    public int n;
    public int faktor(int n)
    {
        if(n == 1) return 1;
        vysledek = faktor(n - 1) * n;
        return vysledek;


    }
}

Pořád mi to vypisuje 0.

 
Odpovědět 15.1.2014 23:53
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na Jakub Vaněk (Bubavanek)
tomisoka:

Jen otázka : nevyjde výhodnější pouzit jednoduse toto :

public int faktorial(int n){
int vysledek = 1;
for(;n>1;n--){
vysledek *= n;
}
return vysledek;
}

Snad jsem se neprepsal

 
Nahoru Odpovědět  -1 16.1.2014 20:30
Avatar
Odpovídá na tomisoka
Jakub Vaněk (Bubavanek):

Nejspíš ano, jen jsem chtěl vyzkoušet rekurzi.

Ale spíš bych to řešil takto, pokud je to tedy správně, teprve začínám.

public int faktorial(int n, int i, int vysledek)
{
      vysledek = 1;
for (i = 1; i <= n; i++)
vysledek *= i;
return vysledek;
}
 
Nahoru Odpovědět 16.1.2014 22:37
Avatar
Kit
Redaktor
Avatar
Odpovídá na tomisoka
Kit:

Určitě nepřepsal. Nepoužil bych to ani jako vtip.

Nahoru Odpovědět 16.1.2014 22:44
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Jakub Vaněk (Bubavanek)
Jan Vargovský:

K čemu tam jsou ty 2 zbytečné parametry ?

 
Nahoru Odpovědět 16.1.2014 23:05
Avatar
Odpovídá na Jan Vargovský
Jakub Vaněk (Bubavanek):

Asi kvůli tomuto

f.n = Integer.parseInt(sc.nextLine());
        System.out.println("Faktoriál čísla je: " + f.vysledek);

Aspoň myslím, jak říkám, teprve začínám.

 
Nahoru Odpovědět 16.1.2014 23:20
Avatar
Odpovídá na Jakub Vaněk (Bubavanek)
Jakub Vaněk (Bubavanek):

Jinak v té rekurzi to mám takto

public class Faktorial {
  public long n;
  public int i;
  public long vysledek;
  public long faktor()
  {
      vysledek = 1;
      for(i = 2; i <= n; i++)
         vysledek *= i;
      return vysledek;
  }
}

A v main toto

f.n = Long.parseLong(sc.nextLine());
        System.out.printf("%s! je %s:\n ", f.n, f.faktor());
Editováno 16.1.2014 23:25
 
Nahoru Odpovědět 16.1.2014 23:23
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na Jakub Vaněk (Bubavanek)
tomisoka:
  1. n dej jako parametr k metode
  2. "vysledek" a "i" dej do metody, at si to program nemusi stale pamatovat
  3. "i" je nepotrebna
 
Nahoru Odpovědět 16.1.2014 23:36
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jakub Vaněk (Bubavanek)
Kit:

Pro pobavení jeden objektově zapsaný faktoriál:

public class Faktor {
    private int n;

    public static void main(String[] args) {
        Faktor sedm = new Faktor(7);
        System.out.println(sedm.faktorial());
    }

    Faktor(int n) {
        this.n = n;
    }

    int faktorial() {
        int vysledek = 1;
        for (int i = 2; i <= n; i++) {
            vysledek *= i;
        }
        return vysledek;
    }
}
Editováno 16.1.2014 23:49
Nahoru Odpovědět  +1 16.1.2014 23:47
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.