Ajuda para solucionar BUG!

3 respostas
J

Caros amigos,
Estou estudando Java através do livro dos DEITEL ed.4. To seguindo passo a passo os exercicios, o que implica dizer que só devem ser resolvidos através do que foi visto pelos capitulos respectivos. O que implica dizer que o BUG que irei descrever a baixo dever ser corrigtido somente com a estrutura if e os operadores.
OK! O bug está no seguinte código:

import javax.swing.*;
import java.awt.*;

public class E3XE311 extends JApplet{
	
	String resultM,resultMM,resultm,resultmm;
	
	public void init(){
		
		int a,b,c,d,e,a1,b1,c1,d1,e1,maior,maior1,menor1,menor;
		String aval,bval,cval,dval,eval;
		
		aval = JOptionPane.showInputDialog("Digite um numero");
		bval = JOptionPane.showInputDialog("Digite um numero");
		cval = JOptionPane.showInputDialog("Digite um numero");
		dval = JOptionPane.showInputDialog("Digite um numero");
		eval = JOptionPane.showInputDialog("Digite um numero");
		
		a=Integer.parseInt(aval);
		b=Integer.parseInt(bval);
		c=Integer.parseInt(cval);
		d=Integer.parseInt(dval);
		e=Integer.parseInt(eval);
		
		
		resultM="";
		 maior=a;
		if (a>=b)
			maior=a;
		if (b>=a)
			maior=b;
		if (c>=b)
			maior=c;
		if (d>=c)
			maior=d;
		if (e>=d)
			maior=e;
			
		resultM=resultM+maior;
		
		
		
		//menor
		
		resultm="";
		
		 menor=a;
	    	if (a<=b)
				menor=a;
			if (b<=a)
				menor=b;
			if (c<=b)
				menor=c;
			if (d<=c)
				menor=d;
			if (e<=d)
				menor=e;
		 
		resultm=resultm+menor;	
		
		//
		
		resultmm=""; 
		menor1=maior;
		menor1=menor1-menor;
		    if (a<maior)
		    	menor1=a;
		    if (b<a)
				menor1=b;
			if (c<b)
				menor1=b;
			if (d<c)
				menor1=d;
			if (e<d)
				menor1=e;
			if (e<menor)
				menor1=a;
		
		resultmm=resultmm+menor1;	
	}	
	public void paint (Graphics g){
			super.paint(g);
		g.drawString ("O maior é "+resultM,25,40);
		g.drawString ("O menor é "+resultm+" e "+resultmm,25,55);
		
	}
}

ATT: Este código deveria determinar o maior e o menor valor entre as variaveis fornecidas pelo usuario, no entanto o que percebo é que dependendo da ordem que estas são dispostas pelo usuario temdem a não seguir resultados corretos ou pelo menos plausiveis ao que sugere o comando do exercicio.

Exemplo: se o usuario digitar :1,2,3,4,5 na respectiva ordem citada o programa acusa legal o maior e o menor, no entanto se disposto: 1,5,4,2,3. Ele já gera um resultado inesperado.

Desde já muito grato,
[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - AnjoSupremo[/color][/size] :joia:

3 Respostas

H

Olha…vendo mais ou menos código, encontrei o seguinte bug.

Como vc disse:
Se vc digita 1,2,3,4,5 ele pega o resultado correto.
Agora se vc digita, 1,5,4,2,3.

Ele passa por todos os ifs, neste caso, o maior deveria ser o 5 não é?
Mas como ele passa por todos, o último verifica if(e>=d).

Como é maior, ele vai pegar como resultado o número 3.

O que vc vai ter que fazer, acho que é o seguinte:

if((a>=b)&&(a>=c)&&(a>=d)&&(a>=e)) maior = a; if((b>=a)&&(b>=c)&&(b>=d)&&(b>=e)) maior = a; ....

E assim por diante, inclusive com a verificação do menor número!
Espero ter ajudado, e avise se deu certo!

J

Fico muito grato pela contibuição. No entanto nesse capitulo o livro ainda não permiti a ultilização de “&&”, confesso que ja tinha pensado a respeito mas é algo que acho muito interessante aprender a criar códigos com estruturas mais básicas. É como eu disse eu to apenas estudando e preciso seguir a risca o que o livro propõe vc entende?
Valeu amigão.

L

Olá,

Se não é permitido usar &&, você poderá fazer um aninhamento de if. Por exemplo:

if((a>=b))
    if(a>=c)
        if(a>=d)

… e assim por diante. O && somente simplifica esse trabalho.

:wink:

Criado 15 de maio de 2006
Ultima resposta 15 de mai. de 2006
Respostas 3
Participantes 3