Erro de compilaçao

1 resposta
java
ASHAMM

Quando o rodo o seguinte programa com uma matriz de ordem 4

package combinacoes1;

import java.util.*;


public class Combinacoes1 {
        
    
 
    //numero da permutacao atual
    private static int cont=0; 
     
    //armazena a permutacao corrente
    private static int[] p;    
    private static int[][] matriz;  
     
    /**
     * metodo principal: recebe o vetor cujos elementos que serao permutados
     * @param vet
     */
    public static void permuta1(int [] vet) {
         
        p = new int[vet.length];
        permuta(vet,0);
        
    }
    private final Scanner entrada = new Scanner(System.in);
    
    public void executarMatrizInserida(){
        // Introdução dos valores da matriz no formato x,y,z,...
        System.out.println("Introduza os valores: ");
        String stringDeNumeros = entrada.nextLine();
        // converte a string para um vetor de strings
        String[] vetorString = stringDeNumeros.split(",");
        int[] vetorInt = stringsParaInts(vetorString);

        // converte o vetor para uma matriz
        int[][] matriz = converteVetorEmMatriz(vetorInt);

        // imprime a matriz
    }
    private int[][] converteVetorEmMatriz(int[] vetor) {
        
        int ordem = (int) Math.sqrt(vetor.length);
        matriz = new int[ordem][ordem];
        try {
            int posicao = 0;
            for (int linha = 0; linha < ordem; linha++) {
                for (int coluna = 0; coluna < ordem; coluna++) {
                    matriz[linha][coluna] = vetor[posicao++];
                }
            }
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Erro: Não introduziu valores correspondentes a uma matriz quadrada! " + e);
        }
        return matriz;
    }
    
    private int[] stringsParaInts(String[] strings) {
        
        int ints[] = new int[strings.length];
        try {
            for (int i = 0; i < strings.length; ++i) {
                ints[i] = Integer.parseInt(strings[i].trim());
            }
        } catch (NumberFormatException e) {
            System.out.println("Erro: Não introduziu apenas numeros! " + e);
        }
        return ints;
    }
 
    
    private static void permuta(int []vet, int n) {
         
        if (n==vet.length) {
            cont++;
            imprime();
                             
        } else {
                     
            for (int i=0; i < vet.length; i++) {
             
                boolean achou = false;
             
                for (int j = 0; j < n; j++) {
                 
                    if (p[j]==vet[i]) achou = true;
                }
             
                if (!achou) {
                     
                    p[n] = vet[i];
                    permuta(vet,n+1);
                }
                 
            } //--for
             
        } //--if/else
         
    } //--permuta
     
     
    /** imprime a permutacao corrente */
    private static void imprime() {
         
        System.out.println();
        int soma=0;
        for (int i=0; i < p.length; i++) {
            System.out.print(p[i] + " ");
            if ( i+1>=p.length){
                soma=soma+matriz[p[1]][p[p.length]];   
            }
            else {
                soma=soma+matriz[p[i]][p[i+1]];
            }
            
        }
        System.out.println("Soma: " +soma);
            
         
    } //--imprime
    
 
    /** metodo principal para teste da classe */
    
    public static void main(String[] args) {
        
        int v[] = {0, 1, 2, 3};
        Combinacoes1 programa = new Combinacoes1();
        programa.menu();
        Combinacoes1.permuta1(v);
    }
    public void menu(){
       executarMatrizInserida(); 
    }
     
}

dá o seguinte erro:

Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 4

at combinacoes1.Combinacoes1.imprime(Combinacoes1.java:121)

at combinacoes1.Combinacoes1.permuta(Combinacoes1.java:87)

at combinacoes1.Combinacoes1.permuta(Combinacoes1.java:103)

at combinacoes1.Combinacoes1.permuta(Combinacoes1.java:103)

at combinacoes1.Combinacoes1.permuta(Combinacoes1.java:103)

at combinacoes1.Combinacoes1.permuta(Combinacoes1.java:103)

at combinacoes1.Combinacoes1.permuta1(Combinacoes1.java:34)

at combinacoes1.Combinacoes1.main(Combinacoes1.java:141)

0 1 2 3 C:\Users\filip\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53:

Obrigado :slight_smile:

1 Resposta

darlan_machado

Manual prático, direto e objetivo de como resolver problemas de compilação:
1 - Leia atentamente a mensagem de erro (se preciso, coloque no google para entender)
2 - Encontre a linha citada onde o erro ocorre
3 - Verifique o que está associado ao tipo de erro apresentado
4 - Altere a linha indicada, a fim de evitar o erro
5 - Tente rodar novamente

Criado 6 de maio de 2019
Ultima resposta 6 de mai. de 2019
Respostas 1
Participantes 2