correção do trabalho!

4 respostas
J

bom eu ainda to seguindo com as aulas da apostila da caelum, proximo exercico foi esse:

  1. (opcional) Escreva um programa que, dada uma variável x (com valor 180, por exemplo), temos y de acordo
    com a seguinte regra:

se x é par, y = x / 2
se x é impar, y = 3 * x + 1
imprime y
O programa deve então jogar o valor de y em x e continuar até que y tenha o valor final de 1. Por
exemplo, para x = 13, a saída será:
//40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1

class Teste4 {
   public static void main(String[] args){


int x=13;
int y;



      if(x % 2 == 0){

         System.out.print("NUMERO PAR -->> "+x);

      }else{

       System.out.print("NUMERO IMPAR -->> "+x);

       x = 3*x+1;

       y = x;

      }
    


  for(int i = x; i > 1; i++){

         

    if(x % 2 != 0){                                          

       x = 3*x+1; 
      
       System.out.print("-->> "+x);

       y = x / 2;
 
       x = y;

        System.out.print("-->> "+x);
   

    }else{
   
       y = x / 2;
 
       x = y;
           
        System.out.print("-->> "+x);

    if(x==1){

     break;
      
            }        
                 }
                          }
         }
            }

Alguém pode corrigir pra mim, e se puder agradeceria se comentasem o código, caso achem erros.
E tb quanto a identação, será que está certo assim?
Ainda to no começo, então criticas são muito bem aceitas.
Sei que para quem analizar, é facil, mas pra mim ainda está complicado…eheheheh
VLW

4 Respostas

D

seu if (o que verifica se é PAR), só esta verificando a entrada, e a questao esta pedindo que a cada atribuição de x ele verifique isso…

entao esse if tem que ser dentro do laço…

e seu for, entrou em loop.
vc começa com i = x, e faz isso até que seja maior que 1, entao vai fik incrementeando ate…

eu sugiro o seguinte, vc fazer um
do{} while(x ==0);

e dentro dele é onde vc vai verificar se é par, se for vc faz a divisão e imprimi Y,
e se nao for vc faz a conta e imprime novamente Y.

e embaixo (ainda detro do do…while vc atribui Y a x (X = Y).

e fica dentro do laço ate que seja igual a 1…

pronto seu problema ta resolvido!!!

vlw

umendonca

Olá, Javaini.

Eu já fiz esse exercício e ficou um pouco mais simples.
Pelo enunciado não é preciso imprimir se é par ou impar, ok? É só para imprimir o valor de "y".

Faça uma revisão no seu for pois ele ficou um pouco confuso e você está fazendo as duas operações ao mesmo tempo, o que não é o correto.

Não sei se tenho muito para ajudar pois terminei o FJ-11 ontem mas se precisar é só entrar em contato.
Segue a minha resolução para você ter uma base.

class Teste4 {
	public static void main(String[] args) {

		int x = 13;
		int y = 0;

		do {
			if((x % 2) == 0) {
				y = (x/2);
				System.out.print(y + " ");
				if(y != 1) System.out.print("-> ");
			} else {
				y = (3 * x) + 1;
				System.out.print(y + " ");
				if(y != 1) System.out.print("-> ");
			}
			x = y;
		} while (y > 1);
	}
}

Ulysses

J

é eu baguncei pokim o meu código, mas esse foi o segundo desafio, num tá perfeito, mas acho qeu to no caminho certo…, é que aqui não tem ninguem pra dar uma luz, estou somente lendo o fj11 da caelum, e tentando resolver, to lendo ainda lógica de programação, nem posso dizer se estou indo bem ou muito mal, se alguem puder dizer algo sobre, quem fez o curso, qeum ja sabe muito tb, será qeu eu estou indo bem? Precisava ver uma escola como é, mas aqui o curso so abre em dezembro.
Umendonça: acho que tem que imprimir sim, o valor par e impar, ve ai:
se x é par, y = x / 2
se x é impar, y = 3 * x + 1
imprime y

isso tava sendo complicado pra mim entender, pq tentava dar break quando ele imprime par, mas quando for impar, ele tem que continuar ate dar resultado 1

tipo se digitar 14, acaba ali, mas se for 13 ele tem que continuar, vou colocar tudo dentro de laços pra ver como fica. vlw gente

umendonca

Se você reparar direito o teste de par e ímpar é só para saber qual o valor vai para "y"... Somente depois disso é que imprime o "y".

Quanto ao código, reparei que coloquei uma coisa que pode ser simplificada.
É nas linhas de teste para a impressão do "->". Coloquei duas vezes mas se ficar depois dos "ifs" pode ser uma vez só (linhas 13 e 14):

class Teste4 {   
    public static void main(String[] args) {   
  
        int x = 13;   
        int y = 0;   
  
        do {   
            if((x % 2) == 0) {   
                y = (x/2);   
            } else {   
                y = (3 * x) + 1;   
            }   
            System.out.print(y + " ");   
            if(y != 1) System.out.print("-> ");   
            x = y;   
        } while (y > 1);   
    }   
}
Criado 14 de novembro de 2010
Ultima resposta 14 de nov. de 2010
Respostas 4
Participantes 3