Resposta que só dá 0

Eaí, é a primeira vez que entro aqui e gostaria de fazer uma pergunta…

Estou fazendo um exercício e meu resultado sempre dá 0, alguém pode me dizer o pq?

O código:

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    Scanner leitor = new Scanner(System.in);
    int elemento = leitor.nextInt();
    int vetor [] = new int[elemento];
    criaVetor (vetor);
    calcVet (vetor);
  }

  public static void criaVetor(int [] vetor) {
    Scanner leitor = new Scanner(System.in);
    for(int i = 0; i < vetor.length; i++) {
      System.out.println("Numero " + i + ":");
      vetor [i] = leitor.nextInt();
    }
  }

  public static void calcVet(int [] vetor) {
    int nMaior = vetor[0];
    int nMenor = vetor[0];

    for(int i = 0; i < vetor.length; i++) {
      if(vetor[i] > nMenor) 
      {nMenor = vetor[i];}
      if(vetor[i] < nMaior) 
      {nMaior = vetor[i];}
    }
    int diferenca = vetor[0];
  diferenca = (nMaior - nMenor);
  System.out.println("A difereça entre o maior elemento e o menor é de: " +diferenca);
  }

}

Depois que digito o primeiro número, que seria o “0”

a seguinte mensagem aparece:

“A diferença entre o maior elemento e o menor é 0”

Preciso que o programa leia um determinado número de elementos determinados pelo próprio usuário.

O erro ta na forma como calcVet foi utilizado.

    int vetor [] = new int[elemento]; <-- cria o vetor
    criaVetor (vetor); <-- adiciona valores ao vetor
    calcVet (vetor); <-- calcula a diferenca

O vetor que você passa como parâmetro em calcVet está vazio, os valores que você adiciona à ele com criaVetor desaparecem assim que o método termina a execução. O certo seria fazer criaVetor retornar o vetor já com os valores setados e depois fazer isso:

int vetor [] = new int[elemento];
int vetorComValores[] = criaVetor(vetor);
calcVet(vetorComValores);

Não desaparecem, vetores são objetos. A variável “vetor” está guardando uma referência para o vetor e o método criaVetor modifica a mesma. Ou seja, a mudança é refletida mesmo ao fim do método.

O problema tá no calcVet mesmo.

1 curtida
    int nMaior = vetor[0];
    int nMenor = vetor[0];

    for(int i = 0; i < vetor.length; i++) {
      if(vetor[i] < nMenor) {
           nMenor = vetor[i];
      }
      if(vetor[i] > nMaior) {
           nMaior = vetor[i];
      }
    }

Os sinais < e > estavam invertidos.

Só precisa alterar tua função:

public static void calcVet(int [] vetor) {
    int nMaior = vetor[0];
    int nMenor = vetor[0];

    for(int i = 0; i < vetor.length; i++) {
        if(vetor[i] < nMenor){
            nMenor = vetor[i];
        }
        if (vetor[i] > nMaior){
            nMaior = vetor[i];
        }
    }
    System.out.println("A difereça entre o maior elemento e o menor é de: " + (nMaior - nMenor));
}

Dessa forma vai funcionar.