Problema para mostrar o maior numero e menor utilizando o loop [Resolvido]

Ola pessual ta complicado essas lógicas.

Elaborar um programa que efetue a leitura de valores positivos inteiros até que o valor negativo seja informado. Ao final devem ser apresentados o maior e o menor valores informados pelo usuário.

[code]package Exercicios;

import java.text.DecimalFormat;

import javax.swing.*;

public class menor_maior
{

public static void main(String[] args) 
{
	int num=0,cont=0,men_valor=0, mai_valor=0;
	
    while (true)   
    {   
        num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite um numero", "Numero", JOptionPane.QUESTION_MESSAGE));   
        	if (num >= 0)   
        	{         
        		cont++;   
        	}   
        	else   
        	{   
            break;   
        	}   
    }
    		   
    		System.out.println("A quantidade de numeros digitados é " + cont);   
    		   
}

}
[/code]

Ate consegui contar os numeros mas como vou saber qual foi o menor e qual foi o maior, pessual se tiver algum livro ou curso de lógica também eu agradeço pois estou apanhando dessas lógicas e sei que não são das mais dificeis, abraços.

Crie uma variável para armazenar o maior valor e uma para armazenar o menor valor.

Faça um “if” verificando se o valor digitado é maior que o valor armazenado nessa variável, caso for, substitua o valor dela pelo novo número.
Faça o mesmo para o número menor.

Espero que eu tenha sido compreensível… se não fui me fala que eu tento explicar de outra forma :wink:

hum legal vou tentar, entendi a ideia, interesante o raciocinio.

Brigadãooooooooooo!!!

Então consegui fazer a condicional mas agora ele parou de fazer loop, vou colocar o que fiz.

[code]package Exercicios;

import java.text.DecimalFormat;

import javax.swing.*;

public class menor_maior
{

public static void main(String[] args) 
{
	int num=0,cont=0,men_valor=0, mai_valor=0;
	
    while (true)   
    {   
        num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite um numero", "Numero", JOptionPane.QUESTION_MESSAGE));   
        	if (num >= 0)   
        	{         
        		cont++;   
        	}
    				if(num>mai_valor)
    				{
        				mai_valor=num;
        			}
        				if(num<men_valor)
        				{
        					men_valor=num;
        				}
    }		

    		System.out.println("A quantidade de numeros digitados é: " + cont);   
    		System.out.println("O maior valor digitado foi: " +mai_valor);   
    		System.out.println("O menor valor digitado foi: " +men_valor);
    }
}

[/code]

o comando break faz vc sair do looping!

Agora ele ta faznedo looping mas imprimindo tudo e so quero que imprima no final, mas fechei o while antes de imprimir e ta dando erro.

[code]package Exercicios;

import java.text.DecimalFormat;

import javax.swing.*;

public class menor_maior
{

public static void main(String[] args) 
{
	int num=0,cont=0,men_valor=0, mai_valor=0;
	
    while (true)   
    {   
        num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite um numero", "Numero", JOptionPane.QUESTION_MESSAGE));   
        	if (num >= 0)   
        	{         
        		cont++;   
        	}
    				if(num>mai_valor)
    				{
        				mai_valor=num;
        			}
        				if(num<men_valor)
        				{
        					men_valor=num;
        				}
    }		

    		System.out.println("A quantidade de numeros digitados é: " + cont);   
    		System.out.println("O maior valor digitado foi: " +mai_valor);   
    		System.out.println("O menor valor digitado foi: " +men_valor);
    }
}

[/code]

Você pode colocar os if’s verificando se o número é maior ou menor dentro do primeiro if (o que verifica se o número é maior que zero).
Acredito que ficaria mais ou menos assim:

import javax.swing.JOptionPane;

public class teste {

	public static void main(String[] args) {
		int num = 0, cont = 0, men_valor = 0, mai_valor = 0;

		while (true) {
			num = Integer
					.parseInt(JOptionPane.showInputDialog(null,
							"Digite um numero", "Numero",
							JOptionPane.QUESTION_MESSAGE));
			if (num >= 0) {
				cont++;
				if (num > mai_valor) {
					mai_valor = num;
				}
				if (num < men_valor) {
					men_valor = num;
				}

			} else {
				break;
			}

		}

		System.out.println("A quantidade de numeros digitados é " + cont);
		System.out.println("O maior valor digitado foi: " + mai_valor);
		System.out.println("O menor valor digitado foi: " + men_valor);
	}

}

Se não der certo mesmo assim, posta aqui o erro. :wink:

O seu men_valor ja esta recebendo 0 no inicio do programa por isso o menor numero sempre sera 0, mesmo q vc nao digite o 0.
Faz o seguinte:

public class menor_maior
{
    public static void main(String[] args)
    {
        int num = 0, cont = 0, men_valor, mai_valor;
        num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite um numero", "Numero", JOptionPane.QUESTION_MESSAGE));
        men_valor = num;
        mai_valor = num;
        while (true)
        {
            if (num >= 0)
            {
                cont++;
                if (num > mai_valor)
                {
                    mai_valor = num;
                }
                if (num < men_valor)
                {
                    men_valor = num;
                }
            }
            else
            {
                break;
            }
            num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite um numero", "Numero", JOptionPane.QUESTION_MESSAGE));
        }
        System.out.println("A quantidade de numeros digitados é " + cont);
        System.out.println("O maior valor digitado foi: " + mai_valor);
        System.out.println("O menor valor digitado foi: " + men_valor);
    }
}
1 curtida

olá meu uma dica…
tente evitar ao maximo o break.
Voce pode usar o

do {
 // sua operacao
}
while(condição);

[]'s

[quote=carlaum]O seu men_valor ja esta recebendo 0 no inicio do programa por isso o menor numero sempre sera 0, mesmo q vc nao digite o 0.
Faz o seguinte:

public class menor_maior
{
    public static void main(String[] args)
    {
        int num = 0, cont = 0, men_valor, mai_valor;
        num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite um numero", "Numero", JOptionPane.QUESTION_MESSAGE));
        men_valor = num;
        mai_valor = num;
        while (true)
        {
            if (num >= 0)
            {
                cont++;
                if (num > mai_valor)
                {
                    mai_valor = num;
                }
                if (num < men_valor)
                {
                    men_valor = num;
                }
            }
            else
            {
                break;
            }
            num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite um numero", "Numero", JOptionPane.QUESTION_MESSAGE));
        }
        System.out.println("A quantidade de numeros digitados é " + cont);
        System.out.println("O maior valor digitado foi: " + mai_valor);
        System.out.println("O menor valor digitado foi: " + men_valor);
    }
}
[/code][/quote]



Entao fiz do jeito que vc disse inicializand as variaveis com num, mas as duas acabavam com o mesmo numero ai fiz o seguinte:

[code]package Exercicios;

import java.text.DecimalFormat;

import javax.swing.*;

public class menor_maior 
{

	public static void main(String[] args) 
	{
		int num=0,cont=0,men_valor, mai_valor;
	
    	mai_valor = num;
        while (true)   
        {   
        	num = Integer   
            .parseInt(JOptionPane.showInputDialog(null,   "Digite um numero", "Numero",JOptionPane.QUESTION_MESSAGE));   
        	men_valor = num;
        	if (num >= 0) {   
        cont++;   
        if (num > mai_valor) {   
            mai_valor = num;   
        }   
        if (num < men_valor) {   
            men_valor = num;   
        }   

    } else {   
        break;   
    }   

}   

System.out.println("A quantidade de numeros digitados é " + cont);   
System.out.println("O maior valor digitado foi: " + mai_valor);   
System.out.println("O menor valor digitado foi: " + men_valor);   
}   

}  

Valew mesmo em, Brigadão

[quote=marcosvidolin]olá meu uma dica…
tente evitar ao maximo o break.
Voce pode usar o

do {
 // sua operacao
}
while(condição);

[]'s[/quote]

Blz!
Aqui esta a solução utilizando o do while:

public static void main(String[] args)
    {
        int num = 0, cont = 0, men_valor, mai_valor;
        num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite um numero", "Numero", JOptionPane.QUESTION_MESSAGE));
        men_valor = num;
        mai_valor = num;
        do
        {
            if (num >= 0)
            {
                if (num > mai_valor)
                {
                    mai_valor = num;
                }
                if (num < men_valor)
                {
                    men_valor = num;
                }
                cont++;
            }
            num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite um numero", "Numero", JOptionPane.QUESTION_MESSAGE));
        }
        while (num >= 0);
        System.out.println("A quantidade de numeros digitados é " + cont);
        System.out.println("O maior valor digitado foi: " + mai_valor);
        System.out.println("O menor valor digitado foi: " + men_valor);
    }

Então, acredito que você tenha que deixar os dois valores = num, como a carlaum sugeriu.
Pois se você analisar a lógica, tem que mostrar o menor e o maior valor que você digitou… certo?

Se a pessoa digitar apenas um valor, o menor número e o maior número serão os mesmos, até porque não há termos de comparação.