Maior e menor valor. Resolvido

Dúvida em código para ler menor maior e menor valor.


import java.util.Scanner;

/*	Exercício
 * 	Crie uma aplicação console que deverá ler 4 valores numéricos 
 * 	e apresentar o maior e o menor.
 */

public class Exercicio {

	public static void main(String[] args) {

		Scanner sc = new Scanner (System.in);
		int valor[] = new int[4];
		int maior = 0, menor = 0; 
		
		for(int i = 0; i < valor.length; i++){
			System.out.print("Digite o " +(i+1)+"º valor: ");
			valor[i] = sc.nextInt();
			if(valor[i] > maior){ 
				maior = valor[i];
			}
		}
		for (int j = 0; j < valor.length; j++) {
			if(valor[j] < menor){
				menor = valor[j];
			}
		}
		System.out.println("Maior valor = "+ maior);
		System.out.println("Menor valor = "+ menor);
	}
}

Como eu faço para inicializar uma variável que não seja com 0 (zero)? Do jeito que está ele só pega o maior valor se esse for maior que o anterior, que nesse caso é zero. E o menor valor só pega se for menor que zero.
Qual outra maneira de resolver esse problema?

1 curtida

dica, qual é o valor maximo que a variavel pode receber e qual é o valor minimo?

Você pode usar um truque - inicializar a variável “maior” com o menor número inteiro possível, e “menor” com o maior número inteiro possível.

Meu amigo, uma forma simples (mas deselegante) de você resolver isso é atribuindo o valor 999999999999 a variável menor;

menor = 9999999999;

Mas acredito que o melhor a se fazer é ler a primeiro elemento do array fora e atribuir o valor maior e menor a ele:

[code]Scanner sc = new Scanner (System.in);
int valor[] = new int[4];

    System.out.print("Digite o 1º valor: ");  
    valor[0] = sc.nextInt();  
    int menor = valor[0]; int maior = valor[0];

    for(int i = 1; i < valor.length; i++){  
        System.out.print("Digite o " +(i+1)+"º valor: ");  
        valor[i] = sc.nextInt();  
        if(valor[i] > maior){   
            maior = valor[i];  
        }  
    }  
    for (int j = 1; j < valor.length; j++) {  
        if(valor[j] < menor){  
            menor = valor[j];  
        }  
    }  [/code]

Mais ou menos isso, não sei se vai rodar, porque não testei amigo =)

1 curtida

Acredito q a melhor forma de resolver seu problema é verificar se é a primeira inserção de dados e em caso positivo inserir o valor nas duas variáveis, segue exemplo:

        for(int i = 0; i &lt; valor.length; i++){  
            System.out.print(&quot;Digite o &quot; +(i+1)+&quot;º valor: &quot;);  
            valor[i] = sc.nextInt();  
            
            // Verifica se é o primeiro número inserido
            if (i = 0) {
                maior = valor[i];
                menor = valor[i];
            }

            if(valor[i] &gt; maior){   
                maior = valor[i];  
            }  
        }

Para o maior elemento, basta inicializar a variavel maior com o primeiro elemento do vetor.

E pro menor elemento, você pode usar o Integer.MAX_VALUE; Ou seja, ele vai armazenar na variavel menor o maior valor que uma variável int por armazenar.

O código ficaria assim:

[code]public class Exercicio {

public static void main(String[] args) {  

    Scanner sc = new Scanner (System.in);  
    int valor[] = new int[4];  
    int maior = valor[0], menor = Integer.MAX_VALUE;   
      
    for(int i = 0; i < valor.length; i++){  
        System.out.print("Digite o " +(i+1)+"º valor: ");  
        valor[i] = sc.nextInt();  
        if(valor[i] > maior){   
            maior = valor[i];  
        }  
    }  
    for (int j = 0; j < valor.length; j++) {  
        if(valor[j] < menor){  
            menor = valor[j];  
        }  
    }  
    System.out.println("Maior valor = "+ maior);  
    System.out.println("Menor valor = "+ menor);  
}  

} [/code]

Quando sua dúvida for esclarecida encerre o post por favor :smiley:

1 curtida

Existe uma forma bem trivial de responder isso. Segue código abaixo:

[code]import java.util.Scanner;

/* Exercício

  • Crie uma aplicação console que deverá ler 4 valores numéricos
  • e apresentar o maior e o menor.
    */

public class Exercicio {

public static void main(String[] args) {

	Scanner in = new Scanner(System.in);
	int a = 0, maior = 0, menor = 0;

	for(int x = 0; x < 4; x++){
		
		System.out.println("Insira um valor:");
		a = in.nextInt();
		
		if(x == 0){
			
			maior = a;
			menor = a;
		}
		
		if(a > maior){
			
			maior = a;
		}
		
		if(a < menor){
			
			menor = a;
		}
	}
	
	System.out.print("Maior: "+ maior +". Menor: "+ menor);

}

}[/code]

2 curtidas

Não precisa ressaltar que a dúvida é (básica) se você já abriu no fórum de Java Básico.

[quote=GilsnSilva]
Como eu faço para inicializar uma variável que não seja com 0 (zero)? Do jeito que está ele só pega o maior valor se esse for maior que o anterior, que nesse caso é zero. E o menor valor só pega se for menor que zero.
Qual outra maneira de resolver esse problema?[/quote]

Vc poderia inicializar suas variáveis com Integer.MAX_VALUE ou Integer.MIN_VALUE, contudo essa solução seria ainda “ad doc”.

O correto é iniciar com o primeiro valor do array e iterar no laço apenas a partir do segundo elemento.
Isto garante a comparação correta.

public class Exercicio {  
  
    public static void main(String[] args) {  
  
        Scanner sc = new Scanner (System.in);  
        int valor[] = new int[4];  
        
     // primeiro obtenha o input sem fazer mais nada
        for(int i = 0; i < valor.length; i++){  
            System.out.print("Digite o " +(i+1)+"º valor: ");  
            valor[i] = sc.nextInt();  
        }  

// depois obtenha o maior e o menor
        int maior = valor[0];
        for (int i = 1 ; i < valor.length; i++){
                if ( valor[i] > maior) {
                      maior = valor[i];
               }
          }

        int menor = valor[0];
        for (int i = 1; i < valor.length; i++) {  
            if(valor[i] < menor){  
                menor = valor[j];  
            }  
        }  
        System.out.println("Maior valor = "+ maior);  
        System.out.println("Menor valor = "+ menor);  
    }  
}  

Obrigado à todos pelas dicas.

Obrigado à todos pelas dicas.

Pessoal aproveitando a pergunta do amigo ae, como faço pra armazenar em uma variavel o segundo menor e o segundo maior número??

import java.util.Arrays;
import java.util.Scanner;  
  
/*  Exercício 
*  Crie uma aplicação console que deverá ler 4 valores numéricos  
*  e apresentar o maior e o menor. 
*/  
  
public class Exercicio {  
  
    public static void main(String[] args) {  
  
        Scanner sc = new Scanner (System.in);  
        int valor[] = new int[4];  
          
        for(int i = 0; i < valor.length; i++){  
            System.out.print("Digite o " +(i+1)+"º valor: ");  
            valor[i] = sc.nextInt();  
        }  

        Arrays.sort(valor);

        System.out.println("Maior valor = "+ valor[1]);                          <------------ segunda linha do vetor
        System.out.println("Menor valor = "+ valor[valor.length-2]);      <------------ penultima linha do vetor ou 3o. linha
    }  
} 

Ajuda! Maior e menor valor

Faça um programa console Java que receba as notas prova de 60 alunos. Considere que a digitação deverá ser de 0 até 35. Como resultado intermediário, exiba o nome e o aproveitamento do aluno. Exemplo. O aluno que tirou 35 pontos na prova teve um aproveitamento de 100% Pergunte ao usuário se deseja finalizar o programa (S – Sim / N – Não) Ao final exiba: A média das notas A quantidade de alunos que tiveram aproveitamento acima de 60% Exibir a menor nota da turma. Como faço?

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Scanner leia = new Scanner (System.in);
	
	//Declaracao de variaveis
		int  nota, //receber nota via teclado
		     contador = 0,//Contar alunos max 60
		     soma = 0, //Somar notas digitadas
			 contadorAcima60 = 0;//Contar qtos alunos tiveram nota maior que 60%
		char resposta;//Informar se deseja encerrar ou nao
		String nome;//Receber nome via teclado
		int aproveitamento,
			media;
			
			 //Loop para executar 60 vezes
			do {
				//Receber nome
				System.out.print("Nome: ");
				leia.next();
				
				//Receber nota porem so de 0 a 35
				do {
					System.out.println("Digite sua nota: ");
					nota = leia.nextByte();
					if (nota < 0 || nota > 35) {
					System.out.println("Nota invalida. Digite novamente.");	
					}
				} while (nota < 0 || nota > 35);
				aproveitamento = (100 * nota) / 35;
				System.out.println("Aproveitamento: "+ aproveitamento+"%");
				soma = soma + nota;
				contador++;
			} while (contador < 60);
			
			media = soma / 60;
			System.out.println("A média das notas foi: " + media);
		
}

//É só colocar “menor = maior;” antes do segundo “for” e tá resolvido! Porque a variável “menor” vai sempre iniciar com o valor máximo. Já testei assim e funcionou.

public class Exercicio {
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
int valor[] = new int[4];
int maior = 0, menor = 0;
for(int i = 0; i < valor.length; i++){
System.out.print("Digite o " +(i+1)+"º valor: ");
valor[i] = sc.nextInt();
if(valor[i] > maior){
maior = valor[i];
}
}
menor = maior;
for (int j = 0; j < valor.length; j++) {
if(valor[j] < menor){
menor = valor[j];
}
}
System.out.println("Maior valor = "+ maior);
System.out.println("Menor valor = "+ menor);
}
}

eu escrevi esse código para fazer o teste , porem eu criei as variáveis , menor e maior , no inicio do código e o código só verificou o maior numero, ai rodei o código igual ta aqui , e deu certo, alguém pode me explicar qual o motivo.

eu escrevi esse código para fazer o teste , porem eu criei as variáveis , menor e maior , no inicio do código e o código só verificou o maior numero, ai rodei o código igual ta aqui , e deu certo, alguém pode me explicar qual o motivo.