Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Výpočet faktoriálu

Java Java Výpočet faktoriálu

Aktivity (1)
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
Redaktor
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  -1 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
Redaktor
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ý
Redaktor
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
Redaktor
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
Redaktor
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  +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.