PDA

Visualizza la versione completa : [Java] calcolo del fattoriale


 
::silver73::
17-10-2007, 00:09
Ciao a tutti,

ho un problema con un file .java da creare. Devo creare una classe per calcolare il fattoriale di un numero usando BigInteger e poi un'altra (in un file separato) che visualizzi la richiesta del numero (Inserisci numero di cui vuoi il fattoriale) e il risultato.

Ho creato il primo file, ma è incompleto poichè non riesco a finirlo e perciò il compilatore mi da degli errori.
Questo è ciò che ho scritto:



import java.math.BigInteger;

public class Fattoriale {
public static void main(String[] args) {
calcolaFattoriale();
int result;

}
private static BigInteger calcolaFattoriale(BigInteger numero) {
while (numero<=1){
BigInteger numero = new BigInteger ();
result = numero.multiply (BigInteger.valueOf (numero.subtract(1)));
}
}
}


Qualcuno potrebbe darmi una mano correggendo il codice per favore? :confused:

1. non so come implementare il metodo calcolaFattoriale()
2. non sono sicura che il ciclo while sia formulato correttamente
3. non so che pesci prendere...anche se questo non è un problema di java :dhò:

Grazie a chiunque abbia voglia di aiutarmi

mxa
17-10-2007, 01:00
import java.math.BigInteger;

public class Fattoriale {
public static void main(String[] args) {
System.out.println(calcolaFattoriale(new BigInteger("12")));

}
private static BigInteger calcolaFattoriale(BigInteger numero) {
if (numero.equals(BigInteger.ONE) || numero.equals(new BigInteger("2")))
return numero;
else
return (calcolaFattoriale(numero.subtract(BigInteger.ONE) )).multiply(numero);
}
}

dovrebbe andare e calcolarti il fattoriale di 12.
c'erano un paio di errori di parentesi, ho editato.

andbin
17-10-2007, 09:38
Originariamente inviato da ::silver73::
Devo creare una classe per calcolare il fattoriale di un numero usando BigIntegerVedi questa (http://forum.html.it/forum/showthread.php?threadid=1174223) discussione di qualche giorno fa. ;)

::silver73::
17-10-2007, 20:26
Spiegazione chiarissima...grazie davvero! :D

Ma se io volessi dare all'utente la possibilità di inserire un numero a piacere di cui calcolare il fattoriale?

Vorrei inserire una serie di stampe a video come queste:


System.out.println("::CALCOLO DEL FATTORIALE::");
System.out.println("Inserisci un numero:" + numero);
System.out.println("Il fattoriale calcolato del numero" + numero + "!" + "è:" + FattorialeCalcolato);


e dare la possibilità di calcolare il fattoriale di qualsiasi numero...

Cosa dovrei modificare del codice...non posso inizializzare il new BigInteger a cui tu hai assegnato "12" perchè non avrebbe senso... :madai!?:

:bhò: come faccio?

andbin
17-10-2007, 21:36
Originariamente inviato da ::silver73::
Ma se io volessi dare all'utente la possibilità di inserire un numero a piacere di cui calcolare il fattoriale?Se l'input è fatto dallo standard-input, puoi usare la classe Scanner (passando al costruttore System.in) ed usare il metodo nextBigInteger() per leggere un BigInteger.

Ma in generale, se hai una stringa puoi sempre creare un BigInteger partendo da quella.

::silver73::
17-10-2007, 21:51
Scusami se sono proprio di coccio :dhò: ma mi potresti fare l'esempio col codice, perchè in teoria vado alla grande ma a scrivere il codice correttamente una schiappa...vedi codice che avevo scritto sopra!!! :jam:

andbin
17-10-2007, 21:59
import java.math.*;
import java.util.*;
...

Scanner sc = new Scanner (System.in);
System.out.print ("Inserisci un numero: ");
BigInteger bi = sc.nextBigInteger ();

Da notare che nextBigInteger() può lanciare diverse eccezioni e quindi dovresti gestirle. Ma puoi fare anche una gestione dell'input più "sofisticata", del tipo: finché non si inserisce un BigInteger valido, continua a stampare il testo di prompt e a fare l'input.

::silver73::
17-10-2007, 22:04
Ma se decidessi di non gestire alcuna eccezione perchè le richieste per l'esercizio sono minime potrei lasciarlo vuoto? :confused:

andbin
17-10-2007, 22:15
Originariamente inviato da ::silver73::
Ma se decidessi di non gestire alcuna eccezione perchè le richieste per l'esercizio sono minime potrei lasciarlo vuoto? :confused: Lasciare vuoto cosa?
Le eccezioni che i metodi di Scanner possono lanciare sono praticamente tutte "unchecked", quindi non sei obbligato a gestirle/dichiararle. Ovvio che se non gestisci le eccezioni, alla prima che viene lanciata, il programma termina.

::silver73::
17-10-2007, 22:25
ok era quello che volevo sapere
ero in dubbio se poter lasciare non dichiarato il


BigInteger bi = sc.nextBigInteger ();


nextBigInteger...il programma non richiede la gestione di eccezioni perciò non vorrei strafare visto che già me la cavo poco e male con le basi più semplici di java :mame:

Loading