Fatorial

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

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–;

[code]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)

}

}}
[/code]

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){   

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--;
    }