Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jakub Vaněk (Bubavanek):15.1.2014 23:53

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
Tvůrce
Avatar
Odpovídá na Jakub Vaněk (Bubavanek)
tomisoka:16.1.2014 20:30

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
16.1.2014 20:30
Avatar
Odpovídá na tomisoka
Jakub Vaněk (Bubavanek):16.1.2014 22:37

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
Tvůrce
Avatar
Odpovídá na tomisoka
Kit:16.1.2014 22:44

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ý
Tvůrce
Avatar
Odpovídá na Jakub Vaněk (Bubavanek)
Jan Vargovský:16.1.2014 23:05

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):16.1.2014 23:20

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):16.1.2014 23:23

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
Tvůrce
Avatar
Odpovídá na Jakub Vaněk (Bubavanek)
tomisoka:16.1.2014 23:36
  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
Tvůrce
Avatar
Odpovídá na Jakub Vaněk (Bubavanek)
Kit:16.1.2014 23:47

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
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.