bom eu ainda to seguindo com as aulas da apostila da caelum, proximo exercico foi esse:
(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
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.
[code]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);
}
é 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
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):
[code]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);
}