Problema com exercício de loop da apostila caelum. RESPONDIDO

Estou começando agora e na apostila da caelum tem um exercício.
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
[color=darkred]SÓ QUE EU QUERIA EM VEZ DE COLOCAR UM VALOR FIXO, deixar o usuário inserir[/color]. Mas meu código está dando loop infinito por exemplo quando digito 13 a saída está 40, 40, 40, 40, 40, 40, 40… dêem uma conferida (obs troquei o nome da variável “y” que pede no enunciado acima por “regra”).
Código:

[code]import javax.swing.JOptionPane;
public class calculo {

public static void main (String [ ] args) {

int regra;
String y = JOptionPane.showInputDialog("Digite um número");
int x = Integer.parseInt(y);

while(x>0) {
	if (x%2==0){
	regra = x/2;
	}
	else{
	regra = 3 * x +1;
	}
System.out.print(regra+", ");}
System.exit(0);
}

}[/code]

Queria colocar a saída com o JOptionPane.showMessageDialog, mas deixei com o método System.out.print.

Tente assim:

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

Sem atualizar o valor de x e definir a condição de parada do algoritmo ele vai continuar gerando loops infinitos

Eu ia só dar umas dicas sem entregar a solução, mas como o s4nchez foi mais camarada (porém menos didático) só vou acrescentar que caso você não queira saber o número informado, a variável regra é desnecessária.

Muito obrigado, S4nches, estou tentando aprender Java meio autoditada será que um dia eu fico bom?

Ola!!
Pessoal sou + q iniciante em java, e estou tentando fazer um exercio bem tranquilo so q estou apalhando, alguem poderia me ajudar no seguinte exercicio abaixo;

Faça uma classe que receba o sexo (m ou f) e imprima sé é homem ou mulher utilizando o switch…case…default.

import javax.swing.JOptionPane;;
public class Notas {

public static void main (String args[]){

char sexo = JOptionPane.showInputDialog("Qual o sexo: "); //Esta apresentando erro nessa linha

switch (sexo) {
case ‘m’: JOptionPane.showMessageDialog(null, “Maculino”);
break;
case ‘f’: JOptionPane.showConfirmDialog(null, “Feminino”);
break;
default: JOptionPane.showConfirmDialog(null, “Bichona”);
}
}
}

Olá lueferraz;

primeiramente sempre q for postar codigos coloque dentro das tags Code, ajuda na visualização do codigo…

e qnto ao erro ta dando devido q o JOptionPane.showInputDialog("Qual o sexo: ");

lhe retorna uma String e vc declarou o sexo do tipo char, mude para String q funciona de boa…

abraços e boa sorte nesse mundo louco
rsrs

[quote=lueferraz]Ola!!
Pessoal sou + q iniciante em java, e estou tentando fazer um exercio bem tranquilo so q estou apalhando, alguem poderia me ajudar no seguinte exercicio abaixo;

Faça uma classe que receba o sexo (m ou f) e imprima sé é homem ou mulher utilizando o switch…case…default.

import javax.swing.JOptionPane;;
public class Notas {

public static void main (String args[]){

char sexo = JOptionPane.showInputDialog("Qual o sexo: "); //Esta apresentando erro nessa linha

switch (sexo) {
case ‘m’: JOptionPane.showMessageDialog(null, “Maculino”);
break;
case ‘f’: JOptionPane.showConfirmDialog(null, “Feminino”);
break;
default: JOptionPane.showConfirmDialog(null, “Bichona”);
}
}
} [/quote]

Switch aceita só int e Tipo Numerado.

Ae LuanMelo vlw pela dica, so q como comentou o marcio_gs, switch ñ aceita String por isso q ñ estou sabendo como fzer.

Ae, como faço pra corrigir ou o q ta errado nesse comando? to precisando entregar esse exercicio até às 00h de hj.

char sexo = JOptionPane.showInputDialog("Qual o sexo: "); [color=green]//Esta apresentando erro nessa linha[/color]

switch (sexo) {
case ‘m’: JOptionPane.showMessageDialog(null, “Maculino”);
break;
case ‘f’: JOptionPane.showConfirmDialog(null, “Feminino”);
break;
default: JOptionPane.showConfirmDialog(null, “Bichona”);

char sexo = JOptionPane.showInputDialog("Qual o sexo: "); //Esta apresentando erro nessa linha

Um char não pode receber o conteúdo de uma String. Pense nisso como dois copos. Um grande e um pequeno. Ao tentar transferir o liquido do copo grande para o copo pequeno, o líquido pode transbordar, e a gente não quer isso.

O que você pode fazer é impedir que o usuário digita mais de um caractere.

Eu entendi, so ñ to conseguindo é implantar ou seja se eu colocar String da erro na parte:

x switch (sexo) {

pode até parecer bincadeira mais eu já to desde de sabádo rolando a madruga pra fzer esse, sem falar q tenho +++ 4 tb pra hj.

Basta pegar o texto com uma String e fazer uma variável char que recebe o primeiro caractere dessa String:

String sexo = JOptionPane.showInputDialog("Qual o sexo: "); char s = sexo.charAt(0); switch (s) { case 'm': JOptionPane.showMessageDialog(null, "Maculino"); break; case 'f': JOptionPane.showConfirmDialog(null, "Feminino"); break; default: JOptionPane.showConfirmDialog(null, "Bichona");

como o marcio_gs ja disse, o switch so aceita int e tipo numerado…entao vc pode fazer o seguinte…

qndo vc pegar a entrada do q foi digitado, vc pode comparar o valor e setar um int em sexo, para poder usar o switch…tipo

String sexo = JOptionPane.showInputDialog("Qual o sexo: "); int opcao; if (sexo.equalsIgnoreCase("M")) // isso ele compara strings opcao = 1; else opcao = 2;

ai apartir disso vc pode usar o switch tranquilo…so q ao inves de usar assim:

switch (sexo) { case 'm': JOptionPane.showMessageDialog(null, "Maculino"); break; case 'f': JOptionPane.showConfirmDialog(null, "Feminino");

vc usa assim :

switch opcao { case 1: JOptionPane.showMessageDialog(null, "Maculino"); break; case 2: JOptionPane.showConfirmDialog(null, "Feminino"); . . .

acho q assim vai…tenta ai

pronto o marcio_gs ja resolveu de um jeito muito mais simples…boiei nessa viu
aauhauaa
compliquei demais :shock:

Ae deu certinho agora!!!
Ae marcio_gs e LuanMelo esta é a 1ª vez q participo de um Forum p/ tirar dúvidas e agradeço mto por essa atitude de vcs em ajudar aqles q buscam em foruns um meio uma ajuda e são correspondidos.
++++ uma vez mto obrigado e a certeza de q brve precisarei da ajuda novamente vlw mesmo!!!

Olá pessoal,
Alguem poderia me ajudar no exercicio abaixo, qdo executo so fica o tempo tdo pedindo a idade, nem ai e nem da o resultado.

[b]Escreva uma classe q receba a idade de n pessoas, calcule e imprima a quantidade
de pessoas maiores de idade(idade >= 18 anos).sair quando idade=0. Utilize o while

import javax.swing.JOptionPane;

public class ExeWhile {

public static void main(String[]args){
	
	int id = Integer.parseInt(JOptionPane.showInputDialog("Informe a Idade: "));
	int cont=0;
	
	while (id > 0){
		if(id <=18 ){
			cont+=1;
		}
		id = Integer.parseInt(JOptionPane.showInputDialog("Informe a Idade: "));
	}
	JOptionPane.showMessageDialog(null,"o numero de pessoas maior de idade e : "+cont);
	
}

}

???

Você sabe o que o while faz? Já ouviu falar na expressão “loop infinito”? Ele acontece quando a condição para o loop parar nunca é satisfeita.