Java calcolo fattoriale
allora ho creato questa classe che non dà errori in compilazione/ esecuzione
import java.util.Scanner;
public class EnterNumber
{
public int input ()
{
Scanner input=new Scanner(System.in);
System.out.println("inserire numero");
int number=input.nextInt();
return number;
}
}
in seguito ho scritto questo in un'altra classe
public class NumeroFattoriale
{
public static void main(String args[])
{
EnterNumber numeroinserito= new EnterNumber();
int numeroDaFattorizzare= numeroinserito.input();
if (numeroDaFattorizzare==0)
{System.out.println("il fattoriale è 1");}
else if (numeroDaFattorizzare==1)
{System.out.println("il fattoriale è 1");}
else{
for (int i=numeroDaFattorizzare; i>0;i--)
{System.out.println("il fattoriale e'"+ i*i--);
}
}
}
}
quest'ultimo codice se i dati inseriti sono 1 o 0 non dà errori, se invece tali numeri sono altri dà errori... l'errore credo sia nel ciclo for/stampa a video finale perchè riflettendoci è come se moltiplicasse a uno ad uno... idee di come correggere questo ciclo for??
import java.util.Scanner;
public class EnterNumber
{
public int input ()
{
Scanner input=new Scanner(System.in);
System.out.println("inserire numero");
int number=input.nextInt();
return number;
}
}
in seguito ho scritto questo in un'altra classe
public class NumeroFattoriale
{
public static void main(String args[])
{
EnterNumber numeroinserito= new EnterNumber();
int numeroDaFattorizzare= numeroinserito.input();
if (numeroDaFattorizzare==0)
{System.out.println("il fattoriale è 1");}
else if (numeroDaFattorizzare==1)
{System.out.println("il fattoriale è 1");}
else{
for (int i=numeroDaFattorizzare; i>0;i--)
{System.out.println("il fattoriale e'"+ i*i--);
}
}
}
}
quest'ultimo codice se i dati inseriti sono 1 o 0 non dà errori, se invece tali numeri sono altri dà errori... l'errore credo sia nel ciclo for/stampa a video finale perchè riflettendoci è come se moltiplicasse a uno ad uno... idee di come correggere questo ciclo for??
Risposte
Il calcolo del fattoriale non viene eseguito per n > 1, inoltre la classe NumeroFattoriale potresti corredarla di un metodo che calcola il fattoriale:
public class NumeroFattoriale { public static int fatt(int n){ if( n == 0 || n == 1) return 1; int i = n; while(--i >= 2){ n *= i; } return n; } public static void main(String args[]) { EnterNumber numeroinserito = new EnterNumber(); int num = numeroinserito.input(); System.out.println("Fattoriale di " + num + " = " + NumeroFattoriale.fatt(num) ); } }
Devi memorizzare le somme parziali da qualche parte. Nel tuo codice visualizzi solo dei prodotti, ma non stai calcolando niente di utile. Inoltre, tratti diversamente 0 e 1, ma non i numeri negativi che sono il vero caso particolare da considerare. Non esiste infatti il fattoriale di un numero negativo, ma può essere inserito da input. Io avrei scritto il fattoriale nel seguente modo:
P.S. Ma che motivo hai di creare una classe come EnterNumber? Mi sembra poco utile, potevi semplicemente inserire il codice per la lettura del numero nel main, riducendo enormemente il numero di righe richiesto. Inoltre, ogni volta che richiami input viene creato un nuovo Scanner, ma nel caso avessi avuto bisogno di leggere più numeri sarebbe stato meglio crearne uno solo e riutilizzarlo.
public class NumeroFattoriale { public static void main(String args[]) { Scanner input=new Scanner(System.in); System.out.print("Inserire numero: "); int n = input.nextInt(); if (n < 0) { System.out.println("Impossibile calcolare il fattoriale di un numero negativo."); return; } int fat = 1; for (int i = n; i > 0; --i) { fat *= n; } System.out.println("Il fattoriale di " + n + " è " + fat); } }
P.S. Ma che motivo hai di creare una classe come EnterNumber? Mi sembra poco utile, potevi semplicemente inserire il codice per la lettura del numero nel main, riducendo enormemente il numero di righe richiesto. Inoltre, ogni volta che richiami input viene creato un nuovo Scanner, ma nel caso avessi avuto bisogno di leggere più numeri sarebbe stato meglio crearne uno solo e riutilizzarlo.
anche per me sarebbe più facile mettere tutto nel main, ma nella prova la prof vuole che si usino tante classi, e ci fece un esempio in cui usava una classe separata dal codice per inserire i dati... comunque grazie mille
Immaginavo fosse una richiesta dell'esercizio..
