Salve galera,
Meu professor lançou um trabalho que consiste no retorno de extremos de um gráfico, de acordo com a diferença entre pontos inserida pelo usuário.
Os critérios são os seguintes:
1. Sempre manter o primeiro e o último valor da lista;
2. Dado o valor de R, se dois ou mais itens consecutivos da lista estão a uma distância menor ou igual a R, devem ser retirados da lista.
E deu alguns exemplos de entrada e saída de valores, vou colocar dois aqui:
- 
PARA R=2: 
 [color=green]ENTRADA { -5; -15; 4; 2; 14; -1; 10; 8; 11; -22 }[/color]
 [color=blue]SAÍDA { -5; -15; 14; -1; 11; -22 }[/color]
- 
PARA R=3: 
 [color=green]ENTRADA { 20; 11; 15; -2; 18; 9; 13; 6; 17; -2; 19; 16; 17; 12; 25; 23 }[/color]
 [color=blue]SAÍDA { 20; 11; 15; -2; 18; 6; 17; -2; 19; 12; 25; 23 }[/color]
Cheguei até o seguinte código:
//importa a classe JOptionPane
import javax.swing.JOptionPane;
//início do programa
public class Main
{ public static void main (String[] Args)
    {
        //pergunta ao usuário a quantidade de pontos do gráfico (para iniciar o vetor)
        int tam = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de pontos do gráfico. (Valor inteiro maior e do que 3)"));
        
        //condição para perguntar novamente caso o usuário peça uma quantidade de pontos menor ou igual a 3
        while (tam < 3)
            {
                tam = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de pontos do gráfico. (Valor inteiro e maior do que 3)"));
            }
        
        // inicia o vetor do gráfico e o vetor de resultados
        double grafico [] = new double [tam + 2];
        double resultado [] = new double [tam];
        
        //pergunta ao usuário cada ponto do gráfico para povoar o vetor
        int cont = 0;
        while (cont < tam)
            {
                grafico [cont] = Double.parseDouble(JOptionPane.showInputDialog("Digite o " + (cont + 1) + "° número do gráfico."));
                cont++;
            }
            
        //pergunta ao usuário o valor de R
        double R = Double.parseDouble(JOptionPane.showInputDialog("Digite o valor de R"));
            
        //condição para eliminar os números de acordo com o que o exercício pede e povoar o vetor de respostas
        cont = 1;
        int aux = 1;
        //tamRes = variável para descobrir quantas posições válidas o vetor resposta irá ter (inicia em dois pq a primeira e última posição mantém sempre a mesma, portanto não entram na condição abaixo)
        int tamRes = 2;
        while (cont < (tam - 1))
            {   //compara a posição atual do vetor grafico menos a próxima e identifica se é maior do que o R dado
                //Math.abs() = método para retornar o módulo do resultado. Exemplo: |-2| = |2| = 2
                if (Math.abs(grafico [cont] - grafico [cont+1]) > R)
                {
                    //caso a condição acima seja verdadeira o vetor resultado recebe a posição atual do vetor grafico, portanto, o número não é excluído da resposta
                    resultado [aux] = grafico [cont];
                    aux++;
                    tamRes++;
                } else 
                    {
                        //caso a condição acima seja falsa ele pula o número atual e o próximo número do gráfico, excluindo-os da resposta
                        cont++;
                    }
                //adiciona 1 ao contador
                cont++;
            }
        //a primeira e última posição mantém sempre a mesma
        resultado [0] = grafico [0];
        resultado [aux] = grafico [tam - 1];
        
        //prepara a resposta para exibir ao usuário
        String result = "";
        cont = 0;
        while (cont < tamRes)
            {
                result += " | " + resultado [cont];
                cont++;
            }
        
        //exibe a resposta ao usuário
        JOptionPane.showMessageDialog(null, result);
            
        //fim do programa
        System.exit(0);
    }
}Ele dá certo para o exemplo 1, mas para o exemplo 2 tem algo que dá errado e que eu não consegui identificar no código, poderiam me ajudar?
Dica: Para ficar mais fácil de visualizar os exemplos, coloquem no excel e criem gráficos da entrada e saída de valores.
Muito Obrigado!