1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

NullPointerException de int[] para arraylist;

Bom dia, é sobre um trabalho de estrutura de dados, o qual tenho que exemplificar o codigo dos SORTS, e tenho que fazer um método que usa shuffle para embaralhar um vetor de 150000 posições.. e o método quicksort que eu fiz para embaralhar retorna um vetor int[].. preciso passar os valores desse vetor que se chama vetordefora, para um arrayList que se chama lista.. Estou usando esse for abaixo para pegar o valor do vetor e passar para a lista.. só que ta dando NullPointerException e eu não descobri o pq..

Sou novo aqui, desculpa qualquer erro grotesco e se puderem me ajudar fico muito grato!

public class Principal {

    private static int[] vetordefora;
    private static ArrayList<Integer> lista;
    private static int aux;
    static long tempoInicial;
    static long tempoFinal;
    static int inicio;
    static int fim;
    static int mileq = 1500;

    public static void main(String[] args) {



        vetordefora = embaralhar();
        tempoInicial = System.nanoTime();
        bubbleSort(vetordefora);
        tempoFinal = System.nanoTime();
        System.out.println("Tempo total do BubbleSort: " + ((tempoFinal - tempoInicial) * Math.pow(10, -9))
                + " segundos..");

        vetordefora = embaralhar();
        tempoInicial = System.nanoTime();
        bubbleSort2(vetordefora);
        tempoFinal = System.nanoTime();
        System.out.println("Tempo total do BubbleSort2: " + ((tempoFinal - tempoInicial) * Math.pow(10, -9))
                + " segundos..");

        vetordefora = embaralhar();
        tempoInicial = System.nanoTime();
        selectionSort(vetordefora);
        tempoFinal = System.nanoTime();
        System.out.println("Tempo total do SelectionSort :" + ((tempoFinal - tempoInicial) * Math.pow(10, -9))
                + " segundos..");

        vetordefora = embaralhar();
        tempoInicial = System.nanoTime();
        cocktailSort(vetordefora);
        tempoFinal = System.nanoTime();
        System.out.println("Tempo total do CocktailSort:" + ((tempoFinal - tempoInicial) * Math.pow(10, -9))
                + " segundos..");

        vetordefora = embaralhar();
        tempoInicial = System.nanoTime();
        merjaoSort(vetordefora);
        tempoFinal = System.nanoTime();
        System.out.println("Tempo total do MergeSort :" + ((tempoFinal - tempoInicial) * Math.pow(10, -9))
                + " segundos..");

        vetordefora = embaralhar();
        for (int i = 0; i < vetordefora.length; i++) {
            lista.set(i, vetordefora[i]);
        }

        tempoInicial = System.nanoTime();

        quickSort(lista, inicio, fim);
        tempoFinal = System.nanoTime();
        System.out.println("Tempo total do QuickSort :" + ((tempoFinal - tempoInicial) * Math.pow(10, -9))
                + " segundos..");


    }



    private static void bubbleSort(int[] vetordedentro) {
        for (int i = 0; i < mileq; i++) {
            for (int j = 0; j < mileq - 1; j++) {
                if (vetordedentro[j] > vetordedentro[j + 1]) {
                    aux = vetordedentro[j];
                    vetordedentro[j] = vetordedentro[j + 1];
                    vetordedentro[j + 1] = aux;
                }

            }

        }


    }

    // Ordenador do Bubble Sort 2
    private static void bubbleSort2(int[] vetordedentro) {
        for (int i = 0; i < mileq; i++) {
            for (int j = mileq - 1; j > i; j--) {
                if (vetordedentro[j] < vetordedentro[j - 1]) {
                    aux = vetordedentro[j];
                    vetordedentro[j] = vetordedentro[j - 1];
                    vetordedentro[j - 1] = aux;
                }

            }

        }
    }

    // Ordenador do Selection Sort
    private static void selectionSort(int[] vetordedentro) {

        // armazena o menor valor e o índice de menor valor
        int menor, indiceMenor;

        for (int i = 0; i < vetordedentro.length; i++) {

            // considera o menor o valor atual do laço
            menor = vetordedentro[i];
            indiceMenor = i;

            // laço interno compara com os outros valores do vetor
            for (int j = i + 1; j < vetordedentro.length; j++) {

                if (vetordedentro[j] < menor) {
                    menor = vetordedentro[j];
                    indiceMenor = j;

                }

            }

            // variaveis auxiliares fazem a troca dos valores
            vetordedentro[indiceMenor] = vetordedentro[i];
            vetordedentro[i] = menor;

        }


    }

    // ordenador do Cocktail Sort
    private static void cocktailSort(int[] vetordedentro) {
        int tam, inicio, fim, trocaswap, aux;
        tam = vetordedentro.length;
        inicio = 0;
        fim = tam - 1;
        trocaswap = 0;


        while (trocaswap == 0 && inicio < fim) {
            trocaswap = 1;
            for (int i = inicio; i < fim; i = i + 1) {
                if (vetordedentro[i] > vetordedentro[i + 1]) {
                    aux = vetordedentro[i];
                    vetordedentro[i] = vetordedentro[i + 1];
                    vetordedentro[i + 1] = aux;
                    trocaswap = 0;
                }
            }
            fim = fim - 1;
            for (int i = fim; i > inicio; i = i - 1) {
                if (vetordedentro[i] < vetordedentro[i - 1]) {
                    aux = vetordedentro[i];
                    vetordedentro[i] = vetordedentro[i - 1];
                    vetordedentro[i - 1] = aux;
                    trocaswap = 0;
                }

            }
            inicio = inicio + 1;
        }
    }

    static int[] merjaoSort(int[] array) {
        if (array.length <= 1) {
            return array;
        }
        int meio = array.length / 2;
        int[] dir = array.length % 2 == 0 ? new int[meio] : new int[meio + 1];
        int[] esq = new int[meio];

        int[] aux = new int[array.length];

        for (int i = 0; i < meio; i++) {
            esq[i] = array[i];
        }

        int auxIndex = 0;
        for (int i = meio; i < array.length; i++) {
            dir[auxIndex] = array[i];
            auxIndex++;
        }

        esq = merjaoSort(esq);
        dir = merjaoSort(dir);

        aux = mergesort(esq, dir);

        return aux;
    }

    static int[] mergesort(int[] esq, int[] dir) {
        int[] aux = new int[esq.length + dir.length];

        int indexDir = 0, indexEsq = 0, indexAux = 0;

        while (indexEsq < esq.length || indexDir < dir.length) {
            if (indexEsq < esq.length && indexDir < dir.length) {
                if (esq[indexEsq] <= dir[indexDir]) {
                    aux[indexAux] = esq[indexEsq];
                    indexAux++;
                    indexEsq++;
                } else {
                    aux[indexAux] = dir[indexDir];
                    indexAux++;
                    indexDir++;
                }
            } else if (indexEsq < esq.length) {
                aux[indexAux] = esq[indexEsq];
                indexAux++;
                indexEsq++;
            } else if (indexDir < dir.length) {
                aux[indexAux] = dir[indexDir];
                indexAux++;
                indexDir++;
            }
        }
        return aux;
    }


    private static void quickSort(ArrayList<Integer> array, Integer esquerda,
            Integer direita) {

        if (array == null || array.size() < 2)
            return;

        if (esquerda >= direita)
            return;

        // Escolhe o pivo para divisao dos arrays
        int pivo = array.get(esquerda);

        // esquerda < pivo e direita > pivo
        int esq = esquerda;
        int dir = direita;

        // Enquanto não forem iguais, ou seja, enquanto nao forem igual ao pivo
        while (esq <= dir) {

            // movendo no proprio array pra frente
            while (array.get(esq) < pivo)
                esq++;

            // movendo no proprio array pra traz
            while (array.get(dir) > pivo)
                dir--;

            // Comparando
            if (esq <= dir) {
                int aux = array.get(esq);
                array.set(esq, array.get(dir));
                array.set(dir, aux);
                // Já ordenei a posicao atual, por isso mecher nelas
                esq++;
                dir--;
            }
        }

        // Recursividade
        quickSort(array, esquerda, dir);
        quickSort(array, esq, direita);

    }

    private static int[] embaralhar() {
        List<Integer> numeros = new ArrayList<Integer>();
        int[] vetor = new int[mileq];
        for (int i = 0; i < mileq; i++) {
            numeros.add(i);
        }

        Collections.shuffle(numeros);
        for (int y = 0; y < numeros.size(); y++) {
            vetor[y] = numeros.get(y);
            inicio = vetor[0];
            fim = vetor[y];
        }
        return vetor;
    }

}
  • Posta como definiu o ArrayList

    A H Gusukuma   24 de set de 2015
  • private static ArrayList lista;

    José Luiz   24 de set de 2015
  • Você está usando a lista sem te-la criado, e também está usando o método set, que é usado para substituir um item já existente.

    A H Gusukuma   24 de set de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java exception arraylist ou faça a sua própria pergunta.