Como achar o Menor valor de um array?

estou com esta questão:

Desenvolva um programa, utilizando a classe Scanner, que obtenha 10 valores
de entrada e identifique o maior valor, o menor e a diferença entre os valores.

public static void main(String[] args) {
    
    int i,aux = 0;
    int vetor[]= new int [10];
    Scanner leitor= new Scanner(System.in);
    int maior = 0,menor =0;
    
    
    
    for(i=0;i<= vetor.length-1;i++){
        System.out.print("Digite 10 valores : ");
        vetor[i]=leitor.nextInt();
    }
    
    for(i = 0;i<= vetor.length-1;i++){
           

            if(vetor[i]>maior){
                maior= vetor[i];
            }
            if(vetor[i]<menor){
               menor=vetor[i]; 
            }
             aux=maior - menor;
        }
    System.out.println("o Menor valor digitado : "+menor);
    System.out.println("O maior valor digitado : "+maior);
    System.out.println("A diferença é : "+ aux);
    
}

A saída do valor Menor esta saindo “0” não sei o motivo
os demais resultados estão saindo certo .

digite um numero negativo e vc vai descobrir :wink:

2 curtidas

rapaz eu digitei o numero negativo e mostrou o numero negativo

mas eu continuo com a duvida :confused:

1 curtida

vc inicia a variavel menor como 0

vc digitou: 1, 2, 3

como vc vai encontrar o menor valor?

3 curtidas

Eu fiz assim:

   package javaapplication89;

import java.util.Arrays;
import java.util.Scanner;

public class GerarOrganizar {

    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int[] array = new int[10];

        for (int i = 0; i < 10; i++) {
            System.out.println("Digite o numero:");
            int num = entrada.nextInt();
            array[i] =num;
        }

        Arrays.sort(array); //isso ordena do menor para o maior
        
        int maior=array[9]; //o maior valor fica na última posição
        int menor=array[0]; // e o menor na primeira
        
        System.out.println("Maior = "+maior+"\nMenor = "+menor+"\nDiferença = "+(maior-menor));
    }
}
1 curtida

Valeu cara nem sabia que dava para fazer isso

1 curtida

Traz sempre 0 porque vc incializa com 0, entao qualquer valor > 0 que vc digitar, nao vai entrar na sua condicao if(vetor[i]<menor) :smiley:

1 curtida

existem varias estrategias.

inicializar o maior com o menor valor possivel, e o menor com o maior valor possivel é uma ( Math.MAX_INT por exemplo ). outra forma é vc ler o primeiro elemento e atribuir as duas variaveis, e começar a comparar do proximo valor ate o final.

agora a diferença ( aux ? aux ?? de um nome melhor pra variavel … como diff se vc tem preguiça ) vc só precisa calcular uma vez.

a vantagem de vc verificar o maior e menor a cada laço é que vc tem 2*N comparações ( sendo N o numero de items a comparar ) enquanto que, se vc ordenar o vetor, vc vai gastar bem mais do que N operações ( quicksort é N log N no melhor caso ). alias se vc ler em um loop e em seguida comparar vc não precisa de array, podendo comparar centenas ou mesmo uma infinita sequencia de numeros sem gastar muita memoria.

2 curtidas

No lugar de designar valores para maior e menor, tome como referência que sempre o menor e o maior valores serão o primeiro valor digitado pelo usuario ou como no seu caso, o primeiro valor da array, ai depois é só comparar com os demais valores.

1 curtida

Entendi!!

a questão do aux, estou aprendendo ainda,
então não estou me preocupando com a nomenclatura ( por enquanto )
e sim com a logica

o aux só foi um exemplo para identificar de uma forma mais fácil

abs;

1 curtida

Messias,

Pelo enunciado que você postou, Desenvolva um programa, utilizando a classe Scanner, que obtenha 10 valores
de entrada e identifique o maior valor, o menor e a diferença entre os valores., isso tem cara de ser um teste, ou avaliação, muito provavelmente eles não querem que você use, recursos da linguagem, e sim lógica…

Seu programa está sempre retornando menor como “0” porque você declarou ele em :
int maior = 0,menor =0;

E sua comparação :
if(vetor[i]<menor){
menor=vetor[i];
}

Nunca vai achar um valor menor que “0” … :wink:

Att,

L30.

Parceiro,

tenta iniciar os valores menor e maior desse jeito:

int maior = Integer.MIN_VALUE; int menor = Integer.MAX_VALUE;

ve se vai.

2 curtidas

refis
public static void main(String[] args) {

    int i,calculo = 0;
    int vetor[]= new int [10];
    Scanner leitor= new Scanner(System.in);
    int maior=0 ,menor=0 ;
    
    
    
    for(i=0;i<= vetor.length-1;i++){
        System.out.print("Digite 10 valores : ");
        vetor[i]=leitor.nextInt();
    }
    Arrays.sort(vetor);
    
    for(i = 0;i<= vetor.length-1;i++){
           
        {
            if(vetor[i]>=maior){
                maior= vetor[i];
            }
            
            if(vetor[i]<=vetor[0]){
               menor=vetor[i]; 
            }
       calculo = maior - menor;
        }
        }
    System.out.println("o Menor valor digitado : "+ menor);
    System.out.println("O maior valor digitado : "+maior);
    System.out.println("A diferença é : "+calculo);
    
}

Se você vai utilizar o Arrays.sort(), o segundo for é desnecessario

oi pessoal ajuda ai nisso…Crie um método que receba 3 números e retorne o maior valor, use o método Math.max().

:confounded::confounded::cold_sweat::scream::poop:

Não Sei :

ai sim :confused:

Bem se você souber os valores existentes no array ai você usa essa sintaxe que você usou
“int maior = 0 e int menor = o maior valor que você sabe do array”

No caso da sua atividade ai não tem como saber os valores digitados então o mais certo de usar seria o:
"maior = Integer.Min_Value e menor = Integer.Max_value

  • Crie uma variável menor e outra maior;
  • Inicialize as duas com o conteúdo do primeiro elemento do vetor;
  • Itere o vetor a partir do segundo elemento e vá comparando o conteúdo:
    se o conteúdo for maior que a variável maior, então maior recebe o valor do conteúdo;
    se o conteúdo for menor que a variável menor, então menor recebe o valor do conteúdo;
  • Ao final do laço imprima os resultados.

Eu estou no inicio aprendendo a programar, então eu peguei uma questão dessa que pedia maior e menor no vetor, e como eu sou uma lenda pra pensar, foi sofrido, mas depois que você soluciona, de fato você se sente uma lenda…
então eu fiz assim e deu certo:
maior = 0, menor = vetor[0];
for (int i = 0; i < n; i++) {
if (vetor[i] > maior) {
maior = vetor[i];
}else if(vetor[i]<menor) {
menor = vetor[i];
}
isso é só um trechinho do código, antes disso você precisa instanciar o vetor e em seguida dependendo do que está desenvolvendo, você atribui a variável “menor” o primeiro valor do vetor que fica na posição zero(0), não tem erro.