Problema com While

7 respostas
X

Nesses dois problemas,apenas o primeiro ocorre do programa não continuar caso o número seja menor ou maior que 2,já no segundo,ele não para,continua… gostaria de saber o que estou fazendo de errado,e esse programa deve ser feito com o while,então peço que não me mandem fazer com o for.

Primeiro:

Programa para saber quantos votos e o percentual de votos de cada chapa.
Obs:Onde está vermelho é onde o programa para e não continua caso o número seja menor que 1 ou maior que 2.É isso que quero que ocorra no segundo.

import javax.swing.JOptionPane;

public class Um {
	public static void main(String[] args) {
		int cont, voto, contA, contB;
		cont = 0;
		contA = 0;
		contB = 0;
		while (cont < 4) {
			do {
				voto = Integer
						.parseInt(JOptionPane
								.showInputDialog("1 para a chapa A e 2 para a chapa B"));
				[color=red]if (voto < 1 || voto > 2) {
					JOptionPane.showMessageDialog(null, "Não sabe ler?1ou2");[/color]

				}
			} while (voto < 1 || voto > 2);
			if (voto == 1) {
				contA++;
			} else {
				contB++;
			}
			cont++;

		}
		JOptionPane.showMessageDialog(null, "Votos da chapa A:" + contA
				+ "\nVotos para a chapa B:" + contB + "\nPercentual da chapa A:"
				+ ((double) contA / cont * 100.0) + "\nPercentual da chapa B:"
				+ ((double) contB / cont * 100.0));
	}
}

Segundo:
Obs: Não o terminei porque não consigo prosseguir com esta parte,talvez eu tenha colocado atributos a mais ou a menos,pois o problema pede o maior e o menor número e a subtração do maior pelo menor[color=blue](Devem ser números pares positivos)[/color].Onde está verde é onde quero que o programa não prossiga,e fique travando até que seja digitado um número correto,assim como no outro problema acima,acredito que não precise do else mas já tentei de diversas formas e não consigo.

import javax.swing.JOptionPane;

public class Dois {
	public static void main(String[] args) {
		int v, vmaior, vmenor, cont,contm, sub;
		cont = 0;
		vmaior = 0;
		vmenor = 0;
		contm=0;
		while (cont < 2){
			do {
				v = Integer.parseInt(JOptionPane
						.showInputDialog("Digite um número par positivo:"));
				if (v > 0 && v % 2 == 0) {JOptionPane
						.showMessageDialog(null,"Digite outro valor:");
				
				}[color=green]else{JOptionPane
					.showMessageDialog(null,"Inválido!");}[/color]
				

			} while (v > 0 && v % 2 == 0);
		if (v > vmaior) {
			vmaior = v;
		}if (v<vmaior){vmenor=v;}
		else{JOptionPane
			.showMessageDialog(null,"Inválidooo");}

		cont++;
		
	}JOptionPane.showMessageDialog(null,"maior:"+vmaior);
}}

7 Respostas

marcoslogan

quando você vai digitar qualquer texto aqui no guj. tem um botao chamado Code, clica nele e coloca o texto lá. O código fica mais legível.

S

xrafael:
Nesses dois problemas,apenas o primeiro ocorre do programa não continuar caso o número seja menor ou maior que 2,já no segundo,ele não para,continua… gostaria de saber o que estou fazendo de errado,e esse programa deve ser feito com o while,então peço que não me mandem fazer com o for.

Primeiro:

Programa para saber quantos votos e o percentual de votos de cada chapa.
Obs:Onde está vermelho é onde o programa para e não continua caso o número seja menor que 1 ou maior que 2.É isso que quero que ocorra no segundo.

import javax.swing.JOptionPane;

public class Um {

public static void main(String[] args) {

int cont, voto, contA, contB;

cont = 0;

contA = 0;

contB = 0;

while (cont < 4) {

do {

voto = Integer

.parseInt(JOptionPane

.showInputDialog(1 para a chapa A e 2 para a chapa B));

[color=red]if (voto < 1 || voto > 2) {

JOptionPane.showMessageDialog(null, Não sabe ler?1ou2);[/color]
}
		} while (voto < 1 || voto > 2);
		if (voto == 1) {
			contA++;
		} else {
			contB++;
		}
		cont++;

	}
	JOptionPane.showMessageDialog(null, "Votos da chapa A:" + contA
			+ "\nVotos para a chapa B:" + contB + "\nPercentual da chapa A:"
			+ ((double) contA / cont * 100.0) + "\nPercentual da chapa B:"
			+ ((double) contB / cont * 100.0));
}

}


Segundo:
Obs: Não o terminei porque não consigo prosseguir com esta parte,talvez eu tenha colocado atributos a mais ou a menos,pois o problema pede o maior e o menor número e a subtração do maior pelo menor[color=blue](Devem ser números pares positivos)[/color].Onde está verde é onde quero que o programa não prossiga,e fique travando até que seja digitado um número correto,assim como no outro problema acima,acredito que não precise do else mas já tentei de diversas formas e não consigo.

import javax.swing.JOptionPane;

public class Dois {

public static void main(String[] args) {

int v, vmaior, vmenor, cont,contm, sub;

cont = 0;

vmaior = 0;

vmenor = 0;

contm=0;

while (cont < 2){

do {

v = Integer.parseInt(JOptionPane

.showInputDialog(Digite um número par positivo:));

if (v > 0 && v % 2 == 0) {JOptionPane

.showMessageDialog(null,Digite outro valor:);
}[color=green]else{JOptionPane
				.showMessageDialog(null,"Inválido!");}[/color]
			

		} while (v > 0 && v % 2 == 0);
	if (v > vmaior) {
		vmaior = v;
	}if (v<vmaior){vmenor=v;}
	else{JOptionPane
		.showMessageDialog(null,"Inválidooo");}

	cont++;
	
}JOptionPane.showMessageDialog(null,"maior:"+vmaior);

}}

Confira a condição do segundo [color=blue]while[/color]:

do {
    v = ...
    ...
} while (v > 0 && v % 2 == 0);

Esse laço vai repetir enquanto “v > 0 && v%2 == 0”, ou seja, enquanto “v” for positivo e par vai exigir um novo valor - exatamente o contrário do que você quer fazer!
O laço deveria repetir enquanto o valor for não-positivo (negativo ou zero) ou não for par.

Obs:

  1. está usando um [color=blue]do[/color]-[color=blue]while [/color]e não um [color=blue]while[/color];
  2. acho melhor testar o número uma única vez, num único local do programa;
  3. sempre use as tags [code] e [/code] para marcar códigos (veja como fazer)

Exemplo:

boolean valido = false; while (!valido) { v = ... if (v > 0 && (v % 2) == 0) { valido = true; } else { JOptionPane... } } o [color=blue]do[/color]-[color=blue]while [/color]seria semelhante, até mais indicado pois testa a condição no fim do laço

X

Ainda não estou conseguindo e também não consegui aplicar esse exemplo com o boolean

X
do {  
    v = ...  
    ...  
} while (v > 0 && v % 2 == 0);

Bom,inverti isso mesmo assim não está dando certo,o número continua contando no cont,pois quero que quando ele nao for par positivo ele não continue contando no cont

S

xrafael:
do { v = ... ... } while (v > 0 && v % 2 == 0);
Bom,inverti isso mesmo assim não está dando certo,o número continua contando no cont,pois quero que quando ele nao for par positivo ele não continue contando no cont

inverteu? e como é que ficou o respectivo trecho do código?

X

Inverti deixando v<0 && v%2!=0 só que mesmo assim quando o número não é o que quero ele está contando.
Preciso fazer com que o número que não for o que eu quero fique enviando uma mensagem cada vez que for digitado mandando digitar de novo até digitar os 2 corretos que irão parar o programa e dar o resultado final de qual é maior e qual é o menor.

Afinal como faço pra descobrir qual é o maior e qual é o menor??? acho que a resposta para essa pergunta já me ajuda muito.

o ideal era fazer o programa apenas com while sem o do,não sei se é possível e não precisa ser um número par,apenas positivo.

X

Agradeço muito pela ajuda :smiley: mas consegui resolver:

package rafa;

import javax.swing.JOptionPane;

public class Doissss {
	public static void main(String[] args) {
		int v,v1, vmaior, vmenor, cont;
		cont = 0;
		vmaior=0;
		vmenor=0;
		
		while (cont < 2){do {
			v= Integer
					.parseInt(JOptionPane
							.showInputDialog("Digite um número positivo"));
			v1=v;
			if (v< 0 || v==0) {
				JOptionPane.showMessageDialog(null, "Inválido!"+"\nTente novamente!");
			
			} 
			}while(v<0 || v==0);
		if (cont==0){
            vmaior=v1;
            vmenor=v1;
        }
        if (v1>vmaior){
            vmaior = v1;
        }
        if (v1<vmenor){
            vmenor = v1;
        }
cont++;
		}	


			JOptionPane.showMessageDialog(null,"Maior: "+vmaior+"\nMenor: "+vmenor);
		
		
	}
}
Criado 16 de abril de 2013
Ultima resposta 17 de abr. de 2013
Respostas 7
Participantes 3