Erro de compilação

Criei este codigo para descobrir as sequencias possiveis a partir dos elementos de um vetor.
Mas quando corro o programa dá-me o seguinte erro:

Exception in thread “main” java.lang.NullPointerException
at permutacao.Permutacao.imprime(Permutacao.java:54)
at permutacao.Permutacao.permuta1(Permutacao.java:45)
at permutacao.Permutacao.main(Permutacao.java:21)
C:\Users\filip\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53

package permutacao;

import java.io.PrintStream;
import java.util.ArrayList;

import java.util.*;
import java.lang.Math; 

public class Permutacao {
    private static int[] v;   
    private final PrintStream saida = System.out;
    
    public static void main(String[] args) {
         
        int v[] = {0, 1, 2, 3};
        permuta1(v);
        
    }
    
    public static void permuta1(int [] seq) {
        
        
    
        for ( int i=0; i<16; i++){
            int m=i;
            int n=4;
            int d = n;
            int r=0;
            int aux=0;
        
            do
            {   
                
                r = m%d;
                aux = seq[n-d+r];
                seq[n-d+r] = seq[n-d];
                seq[n-d] = aux;
                m = (int)Math.floor((m-r)/d);
                d = d-1;
                imprime();
                
            } while(d>1);
        } 
    }
    
    private static void imprime() {
         
        System.out.println();
        for (int e=0; e< v.length; e++) System.out.print(v[e] + " ");
         
    }
}

Obrigado :slight_smile:

Provavelmente você está tentando imprimir o valor de uma posição que está nula.

Aqui você definiu o int[] v como um variável estática da classe pra ser usada em todos os métodos da classe, beleza…

private static int[] v;

Mas no main() você tá criou uma outra variável local que não tem nada a ver com a variábel estática de classe acima, apesar de serem do mesmo nome:

public static void main(String[] args) {
        int v[] = {0, 1, 2, 3};  // essa variável é uma outra
        .....

Quando você tenta usar essa variável estática static int[] v no seu método imprime() dá erro porque ela não existe ainda, ela está como “null”, sem valor. Não dá pra fazer operação numa variável sem valor, causando o erro NullPointerException.

for (int e = 0; e < v.length; e++) {   // o v está como "null" aqui, por isso a operação **v.length** causa erro

Para resolver use a variável estática no main() em vez de criar uma nova. Substitua isso, no main():

int v[] = {0, 1, 2, 3};

por isso

v = new int[] {0, 1, 2, 3};
1 curtida

Muito obrigado, resolveu! :slight_smile:

Porque o output do programa é este: Algumas sequencias sao repetidas. Apenas deveriam sair 24 sequencias.

Output:

0 1 2 3
0 1 2 3
0 1 2 3
1 0 2 3
1 0 2 3
1 0 2 3
2 0 1 3
2 0 1 3
2 0 1 3
3 0 1 2
3 0 1 2
3 0 1 2
3 0 1 2
3 1 0 2
3 1 0 2
1 3 0 2
1 0 3 2
1 0 3 2
3 0 1 2
3 1 0 2
3 1 0 2
2 1 0 3
2 0 1 3
2 0 1 3
2 0 1 3
2 3 1 0
2 3 1 0
3 2 1 0
3 0 1 2
3 0 1 2
1 0 3 2
1 2 3 0
1 2 3 0
0 2 3 1
0 1 3 2
0 1 3 2
0 1 3 2
0 1 3 2
0 1 2 3
1 0 2 3
1 0 2 3
1 0 3 2
3 0 1 2
3 0 1 2
3 0 2 1
1 0 2 3
1 0 2 3
1 0 3 2