Fatorial

3 respostas
T

Estou com uma duvida no laço for , uma vez q o loop eh executado ‘x’ decrementa, o valor de ‘x’ entao eh atribuido a variavel ‘i’ porem ‘i’ continua a valer 5 ateh o fim, nao era pra ele ir decrementando junto com o ‘x’?
Considere como valor de entrada o numero 5 ae.

import java.io.*;
class FAT{

public static void main(String args[]) throws Exception{

 BufferedReader l = new BufferedReader(new InputStreamReader(System.in));
 String t ;
 int z=1,x;
  
 t=l.readLine();
 x=Integer.parseInt(t);
 
 for(int i=x;x>0;x--){
      
     z = z*x;     
    System.out.println("Z:"+z+"\nX:"+x+"\nI:"+i+"\nT:"+t);
    } 
 
 
  
 
 
 }}

Output :

5
Z:5
X:5
I:5
T:5
Z:20
X:4
I:5
T:5
Z:60
X:3
I:5
T:5
Z:120
X:2
I:5
T:5
Z:120
X:1
I:5
T:5

3 Respostas

thiagolopes

Amigo, ficou faltando duas linhas de código :

1 - Um
System.out.Println("Digite um número por favor");

Para saber o numero de variações do código

2- Colocar o decremento i--;
import java.io.*;
class FAT{

public static void main(String args[]) throws Exception{

 BufferedReader l = new BufferedReader(new InputStreamReader(System.in));
 String t ;
 int z=1,x;
//Um detalhe que eu vi aqui , por que você não usou o método l.read(); (Já da uma saida do tipo int)
 t=l.readLine();
 x=Integer.parseInt(t);
//Usando o l.read(); , você não precisará fazer o casting de String para int, mas tera que criar a variavel como int.
 
 for(int i=x;x>0;x--){
      
     z = z*x;     
    System.out.println("Z:"+z+"\nX:"+x+"\nI:"+i+"\nT:"+t);
    i--;
//Ficou faltando apenas esta linha para o decremento ser feito
//O decremento estava sendo feito apenas no x(dentro do for)    

} 
 
 
  
 
 
 }}
ViniGodoy

O primeiro "pedaço" do comando for é a inicialização. Ela só é executada uma vez.

Portanto, por mais que ali vc faça int i = x, esse comando só rodará uma vez, antes do primeiro laço.

Se você quer que essa atribução ocorra toda vez, terá que coloca-la na terceira parte do for também:

for(int i=x;x>0;i = --x){
T

olha soh o do ‘for’ nem sabia, pensei q era executado toda hora

qto ao l.read - ele le um int direto ?
como uso ele
agora se eu entro com valor 5 ele me retorna 16 e vai diminuindo…horrivel ehehe

obrigado pessoas por ajudarem.

class FAT{

public static void main(String args[]) throws Exception{

 BufferedReader l = new BufferedReader(new InputStreamReader(System.in));
 String t ;
 int z=1,x;
  
 System.out.println();
 x=l.read();
 //x=Integer.parseInt(t);
 

     for(int i=x;x>0;i = --x){   
      
     z = z*x;     
    System.out.println("Z:"+z+"\nX:"+x+"\nI:"+i);
    i--;
    }
Criado 8 de dezembro de 2008
Ultima resposta 8 de dez. de 2008
Respostas 3
Participantes 3