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 