Escreva um programa em Java que leia uma sequência N de números inteiros (negativos, positivos e o zero) para um vetor. No início do programa é solicitado ao usuário (pelo teclado) qual é a quantidade de elementos que serão lidos para o vetor e depois disso os números são lidos para o vetor.
Em seguida você deve implementar para cada um dos itens abaixo uma função:
a) Calcule e retorna o valor da maior diferença entre dois elementos distintos no vetor.
b) Verifica se o vetor está em ordem crescente, e retorna true caso esteja e false caso contrário.
Soluções para a tarefa
Observação: a resposta da "a)" está na função "maiorDiferenca", já a resposta da "b)" está na função "ordemCrescente".
Programa:
import java.util.Scanner;
public class MeuPrograma {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
if (N > 0) {
int[] vetor = new int[N];
for (int i = 0; i < N; i++) {
vetor[i] = scanner.nextInt();
}
System.out.println();
System.out.println(maiorDiferenca(vetor));
System.out.println(ordemCrescente(vetor));
}
}
public static int maiorDiferenca(int vetor[]) {
int maior, segundoMaior;
maior = vetor[0];
segundoMaior = maior;
for (int i = 1; i < vetor.length; i++) {
if (vetor[i] > maior) {
segundoMaior = maior;
maior = vetor[i];
} else if (vetor[i] > segundoMaior && vetor[i] != maior) {
segundoMaior = vetor[i];
}
}
if (maior == segundoMaior) {
return 0;
}
return maior - segundoMaior;
}
public static boolean ordemCrescente(int vetor[]) {
for (int i = 1; i < vetor.length; i++) {
if (vetor[i] < vetor[i - 1]) {
return false;
}
}
return true;
}
}
int maior = vetor[0], menor = vetor[0];
for (int i = 1; i < vetor.length; i++) {
if (vetor[i] > maior) {
maior = vetor[i];
}
if (vetor[i] < menor){
menor = vetor[i];
}
}
return maior - menor;
}
Apenas para complementar a resposta do nosso colega Moises, que fez um excelente trabalho.
A funcao maiorDiferenca nao esta retornando a maior diferenca entre dois valores distintos.
Supomos que o vetor esta organizado e tem os seguintes elementos: 1, 2, 3, 4, 5. O maior valor da diferença de dois valores distintos seria 4, resultado de 5 - 1.
A funcao do nosso colega Moises esta pegando os dois maiores valores dentro do vetor e os subtraindo, o que imagino que nao condiz com o resultado esperado da questao A.
Alterei a funcao para retornar o valor correto, segue ela abaixo:
public static int maiorDiferenca(int vetor[]) {
int maior = 0;
int index = 1;
while (index < vetor.length){
int contador = 0;
while (contador < vetor.length){
int novo_valor = vetor[index] - vetor[contador];
if (novo_valor > maior){
maior = novo_valor;
}
contador++;
}
index++;
}
return maior;
}