Boa noite, seguinte pessoal estou fazendo alguns exercícios em minha aula de algoritmos um dos programas passado foi esse:
Faça um programa que, dado um conjunto de N números, determine o menor valor, o
maior valor e a soma dos valores.
Usado while e do.
Ele passou que assim que digitamos 0 o programa encerra. blz no maior na soma tudo blz
mas quando é o menor que emperra se digito tudo positivo ele le o 0 como menor valor. tem como mudar isso ja quebrei a kbeca umas 2 horas aqui ja.
import java.util.Scanner;
public class Ex16 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner entrada = new Scanner(System.in);
int valor = 0;
int soma = 0;
int maior = 0;
int menor =0;
do{
System.out.print("Digite um número e [0] para sair: ");
valor = entrada.nextInt();
soma = soma +valor;
if (valor>maior)
maior=valor;
if (valor<menor)
menor=valor;
}while(valor!=0);
System.out.println("A soma dos números digitado: "+soma);
System.out.println("O maior número digitado: "+maior);
System.out.println("O menor número digitado: "+menor);
}
}
Uma maneira bem estúpida de se resolver isso (citando o entanglement, rs) seria colocar um if perguntando se é 0 antes dos seus ifs, algo assim:if(valor != 0){
if (valor>maior)
maior=valor;
if (valor<menor)
menor=valor;
}
Ah, sempre que for postar seu código coloque ele entre as tags [ code][/code], pra ficar bonitinho como o meu ali acima, hehehe ![:smiley: :smiley:](https://www.guj.com.br/images/emoji/twitter/smiley.png?v=9)
Não funciona porque você inicia a variável menor com 0. Como qualquer número positivo é maior que 0 ele nunca vai entrar no if.
Inicia sua variável com um número bem alto, ou melhor, use Integer.MAX_VALUE.
[quote=Caikeke]Não funciona porque você inicia a variável menor com 0. Como qualquer número positivo é maior que 0 ele nunca vai entrar no if.
Inicia sua variável com um número bem alto, ou melhor, use Integer.MAX_VALUE.[/quote]
E o que acontece quando o usuário digitar um 0? Faça o teste de mesa.
o Caikeke esta certo vc tem que usar o Integer.MAX_VALUE.
Faz assim que vai da certo:
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
int valor;
int soma = 0;
int maior = 0;
int menor = Integer.MAX_VALUE;
do {
System.out.print("Digite um número e [0] para sair: ");
valor = entrada.nextInt();
soma = soma + valor;
if (valor > maior) {
maior = valor;
}
// se o valor for = 0 ele encerra o laço e mostra os resultados
if (valor == 0) {
break;
} else if (valor < menor) {
menor = valor;
}
} while (valor != 0);
System.out.println("A soma dos números digitado: " + soma);
System.out.println("O maior número digitado: " + maior);
System.out.println("O menor número digitado: " + menor);
}
Pensando assim, ele deve usar Integer.MIN_VALUE para o maior também, se for pensar que o usuário pode digitar somente números negativos.
Muito obrigado pessoal, pelo que o ulysses passou funcinou certinho. Desde já muito obrigado.