Jump to content
darkangel_13

Erros de codigo.. Out of bounds

Recommended Posts

darkangel_13

Boa tarde estava terminei agora um codigo que tem como função tratamento de matrizes , mas quando compilei não me deu erro quando executo da-me este erro

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at OperaMatriz.calculaSoma(OperaMatriz.java:128)
at RunMatriz.main(RunMatriz.java:37)

public class FornecedorMatriz{

public static boolean eMatrizQuadrada(int[][] m){
  if(m.length==m[0].length)
      return true;
      return false;
  }

public static int[] vectorDiagonal(int[][] matrizquadrada){
  int[] vectorDiagonal=new int[matrizquadrada.length];
  for(int i=0;i<matrizquadrada.length;i++){
       for(int j =0;j<matrizquadrada[i].length;j++){
             if(i==j){
                    vectorDiagonal[i]=matrizquadrada[i][j];

                }
          }
  }
  return vectorDiagonal;
}

/**o traço de uma matriz quadrada é o somatório dos elementos do seu vector diagonal. Esta função, dada uma matriz quadrada de entrada, devolve o seu traço escalar.
**/
public static int calculaTraco(int[][] matrizquadrada){

      return calculaSoma(matrizquadrada,1,3);
}
/**método que devolve uma matriz que se obtém multiplicando um número inteiro por cada um dos elementos da matriz dada.**/
public static int[][] multiplicaEscalar(int[][] matriz, int escalar){
  int multiplicada[][]=new int[matriz.length][matriz[0].length];
  for(int i=0;i<matriz.length;i++){
         for(int j=0;j<matriz[0].length;j++){
               multiplicada[i][j]=matriz[i*escalar][j*escalar];
         }
  }
  return multiplicada;
}
/** método que devolve uma matriz que se obtém multiplicando um número inteiro por uma e uma só linha da matriz dada.**/
public static int[][] multiplicaEscalarLinha(int[][] matriz, int escalar, int linha){
     int multiplicada[][]=new int[matriz.length][matriz[0].length];
     for(int i=0;i<matriz.length;i++){
                 for(int j=0;j<matriz[i].length;j++){
                               if(i==linha)
                                    multiplicada[linha][j]=matriz[linha*escalar][j*escalar];
                               else
                                    multiplicada[i][j]=matriz[i][i];
                 }
     }
     return multiplicada;
}

/** subtrai os valores de uma linha da matriz dada dos valores respectivos de todas as outras linhas, excepto da linha indicada. Devolve a matriz modificada.
**/
int[][] subtraiLinha(int[][] matriz, int linha) {
     int [][]subtraida=new int [matriz.length][matriz[0].length];
     for(int i=0;i<subtraida.length;i++){
             for(int j=0;j<subtraida[i].length;j++){
                   if(i!=linha){
                          subtraida[i][j]-=matriz[linha][j];
                   }
             }
     }
     return subtraida ;
}

/** método que devolve o somatório da linha, coluna, ou da diagonal principal da matriz, consoante o valor do parâmetro de entrada tipo:

**/
public static int calculaSoma(int[][] matriz, int n, int tipo){
    int soma = 0;

    if(tipo==1) { // a função devolve a soma da linha n da matriz
             for(int i=0;i<matriz.length;i++)
            soma+=matriz[n][i];
    }
    else if(tipo==2){ //a função devolve a soma da coluna n da matriz
         for(int i=0;i<matriz[n].length;i++){
              soma+=matriz[i][n];
         }
    }
    else if(tipo==3){ //a função devolve a soma da diagonal da matriz (o valor n é ignorado)
              int [][] temp=diagonal(matriz);
              for(int i =0;i<temp.length;i++){
                   for(int j =0;j<temp[i].length;j++){
                         soma+=temp[i][j];
                   }
              }
    }
    else
            System.out.print("Obrigado");
    return soma;
}
public static int[][] diagonal(int[][] matrizquadrada){
        int diagonal[][]=new int [matrizquadrada.length][matrizquadrada[0].length];
        int tamanho=(matrizquadrada.length)*(matrizquadrada.length);


        for(int i=0;i<matrizquadrada.length;i++){
              for(int j =0;j<matrizquadrada[i].length;j++){
                      if(i==j)
                         diagonal[i][j]=matrizquadrada[i][j];
                      else
                         diagonal[i][j] =0;
                 }
        }
        return diagonal;
}
}

import java.util.Scanner;
import java.io.*;
public class ClienteMatriz{
public static void main(String[] args)throws IOException{
Scanner leitor=new Scanner(new FileReader("ficheiro.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("teste.txt"));
int x= leitor.nextInt();
int y= leitor.nextInt();
int[][]matriz=new int[x][y];
 if( leitor.hasNextInt()==false)
       System.out.println("ficheiro nao contem matriz");
  else{
      leitor.nextLine();
           for(int i =0;i<x;i++){
                   for(int j=0;j<y;j++){
                       matriz[i][j]=leitor.nextInt();
                 }
             }

           for(int h =0;h<matriz.length;h++){
                   for(int z =0;z<matriz[h].length;z++){
                             System.out.print(matriz[h][z]);}
                     System.out.println("");
                 }
if(OperaMatriz.eMatrizQuadrada(matriz)==true){
        int[][] mquadrada=OperaMatriz.diagonal(matriz);
        int[] diagonal=OperaMatriz.vectorDiagonal(mquadrada);
        int traco=OperaMatriz.calculaTraco(mquadrada);
   }
       for(int i=0;i<matriz.length;i++){
         int linha = OperaMatriz.calculaSoma(matriz,i,1);
         bw.write(linha+"\n");
              for(int j=0;j<matriz[i].length;j++){

                 int coluna = OperaMatriz.calculaSoma(matriz,j,2);
                bw.write(coluna+"\n");
        }
  }
System.out.println("Escreva um inteiro :");
int n=leitor.nextInt();
int[][] multiplicada=OperaMatriz.multiplicaEscalar(matriz,n);
bw.write(multiplicada.length+""+multiplicada[0].length);
            for(int i=0;i<multiplicada.length;i++){
                     for(int j=0;j<multiplicada[i].length;j++){
                         bw.write(multiplicada[i][j]);
              }
                bw.write("");
        }
}
bw.close();
}
}

Se alguem poder dar uma ajuda cumps!

edit: obrigado pela observação

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
HappyHippyHippo

um código sem indentação e sem o uso correcto das tags do GeSHi, é impossível saber que linha é esta : at OperaMatriz.calculaSoma(OperaMatriz.java:128)


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.