Minha dúvida é a seguinte, preciso realizar a soma dos elementos de apenas uma dimensão de uma matriz. Para teste fiz algo simples veja o código abaixo:
Nesse código fiz para realizar a soma dos elementos da dimensão [3], só que acredito que não esteja fazendo de maneira correta, pois quando peço para imprimir os valores dos elementos dessa dimensão esta vindo algo do tipo, só valores pares, não sei se fiz certo isso.
E mais uma coisa… não se esqueça de preencher o vetor com os valores antes… senão só aparecerá zero haushaushuash
C
carol_ana
Então…eu tb achei que iria vir só zero …mas esta exibindo valores, por isso não sei se esta certo.
Pq no print ele exibe isso:
1 2 3 4 5 6
soma 21
Isso quando faço a soma da matriz inteira…ele esta exibindo esses valores. Será que esta errado?
E
esdmorais
Então… eu percebi que tem um método ai que você não postou aqui, o
loadData(arr);
Provavelmente o seu vetor está sendo preenchido aí dentro, não?
C
carol_ana
Tinha esquecido desse metodo. Obrigada pelas respostas, pela ajuda.
C
carol_ana
Espera aí…acho que me perdi agora…nesse caso o for que vc fez acima, não esta fazendo a soma dos elementos da dimensão [2]? Não entendi.
E
esdmorais
Você disse que queria que calculasse a soma somente dos elementos da dimensão 3, né?
Foi isso o que eu fiz, coloquei para calcular a soma somente dos elementos da terceira dimensão, ou seja, dimensão com índice 2.
Entendeu?? hehe
C
carol_ana
Acho que entendi...
No caso leio a dimensão, veja o meu código:
importjava.io.DataInputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;publicclassReadFile{/**************************************************** * Metodo criado para receber as duas Matrizes 4D ****************************************************/publicstaticdouble[][][][]criaMatriz4D(intdim1,intdim2,intdim3,intdim4,DataInputStreaminput)throwsIOException{double[][][][]matriz=newdouble[dim1][dim2][dim3][dim4];for(intl=0;l<dim4;l++){for(intk=0;k<dim3;k++){for(intj=0;j<dim2;j++){for(inti=0;i<dim1;i++){matriz[i][j][k][l]=input.readDouble();}}}}returnmatriz;}/**************************************************** * Metodo criado para receber as duas Matrizes 3D ****************************************************/publicstaticfloat[][][]criaMatriz3D(intdim2,intdim3,intdim4,DataInputStreaminput)throwsIOException{float[][][]matriz=newfloat[dim2][dim3][dim4];for(intk=0;k<dim4;k++){for(intj=0;j<dim3;j++){for(inti=0;i<dim2;i++){matriz[i][j][k]=input.readFloat();}}}returnmatriz;}publicstaticvoidmain(Stringargs[])throwsIOException{// Realizando a leitura do arquivo binárioDataInputStreaminput=newDataInputStream(newFileInputStream(newFile("C:/Documents and Settings/Projeto_Estudo/data.dtb")));// Lendo as dimensões gravadas no bináriointdim1=4;// dimensão fixaintdim2=input.readInt();// dimensão lida do arquivo bináriointdim3=input.readInt();// dimensão lida do arquivo bináriointdim4=input.readInt();// dimensão lida do arquivo binário// Exibo os valores de cada dimensão, só para verificar se esta "pegando" valor corretoSystem.out.println("Dimensão1= "+dim1);System.out.println("Dimensão2= "+dim2);System.out.println("Dimensão3= "+dim3);System.out.println("Dimensão4= "+dim4);// Guardo os valores das respectivas matrizes double[][][][]mat_modImag=criaMatriz4D(4,dim2,dim3,dim4,input);double[][][][]mat_conjImag=criaMatriz4D(4,dim2,dim3,dim4,input);float[][][]mat_modScatter=criaMatriz3D(dim2,dim3,dim4,input);float[][][]mat_conjScatter=criaMatriz3D(dim2,dim3,dim4,input);// Fechando a leiturainput.close();// Imprime as posições das matrizesSystem.out.println(mat_modImag[0][0][16][16]);System.out.println(mat_conjImag[0][0][19][16]);System.out.println(mat_modScatter[1][2][1]);System.out.println(mat_conjScatter[14][16][3]);}// Metodo para imprimir as matrizesprivatestaticvoidimprimeMatriz(double[][][][]matriz){System.out.println("----");for(inti=0;i<matriz.length;i++){for(intj=0;j<matriz[i].length;j++){for(intk=0;k<matriz[i][j].length;k++){System.out.print(" ");for(intl=0;l<matriz[i][j][k].length;l++){//System.out.print(matriz[i][j][k][l] + " ");}System.out.println();}System.out.println("--");}System.out.println("----");}}}
Então se quero somar os elementos da dimensão [dim4] da matriz criaMatriz4D. Daí então ficaria assim: Pois nesse caso leio a dimensão de um arquivo.
Você tem que dizer ao programa que é a dimensão quatro que está dentro de uma determinada dimensão três que está dentro de uma dimensão dois que está dentro de uma dimensão um que você definir…
Pelo que percebi ele não esta entrando no metodo, pedi para exibir um simples Print e não exibiu nada, executei o “Debug” no Eclipse e tb não exibe nada de erro.
E
esdmorais
Então Carol, verifique pelo Debug nesse método qual é o valor da variável dim4 porque se o valor for menor que zero, ele não vai passar pelo for mesmo!
C
carol_ana
Então coloquei um breakpoint dentro do metodo “soma” esta exibindo isso. Esse “0” que ele exibe pode ser alguma coisa?
ReadFile [Java Application]
ReadFile at localhost:2138
<terminated, exit value: 0>C:\Arquivos de programas\Java\jre6\bin\javaw.exe (09/12/2011 13:50:44)
E
esdmorais
Quer dizer que não somou =/
Veja qual é o valor da variável dim4
Estou achando que dim4 está sendo definida como zero, por isso que não tem como ela entrar dentro do laço.
C
carol_ana
No código que enviei acima na linha 68 peço para exibir a dimensão de dim4: System.out.println("Dimensão4= " +dim4); esta exibindo a dimensão correta que no caso é 32, só que não entra dentro do metodo soma.
E
esdmorais
Faz um favor, manda a sua classe completa até agora, com tudo e até o seu método soma por favor.
C
carol_ana
Meu código completo:
importjava.io.DataInputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;publicclassReadFile{/**************************************************** * Metodo criado para receber as duas Matrizes 4D ****************************************************/publicstaticdouble[][][][]criaMatriz4D(intdim1,intdim2,intdim3,intdim4,DataInputStreaminput)throwsIOException{double[][][][]matriz=newdouble[dim1][dim2][dim3][dim4];for(intl=0;l<dim4;l++){for(intk=0;k<dim3;k++){for(intj=0;j<dim2;j++){for(inti=0;i<dim1;i++){matriz[i][j][k][l]=input.readDouble();}}}}returnmatriz;}/**************************************************** * Metodo criado para receber as duas Matrizes 3D ****************************************************/publicstaticfloat[][][]criaMatriz3D(intdim2,intdim3,intdim4,DataInputStreaminput)throwsIOException{float[][][]matriz=newfloat[dim2][dim3][dim4];for(intk=0;k<dim4;k++){for(intj=0;j<dim3;j++){for(inti=0;i<dim2;i++){matriz[i][j][k]=input.readFloat();}}}returnmatriz;}/********************************************* * Metodo para realizar somatorio das matrizes *********************************************/publicstaticdoublesoma(double[][][][]mat_modImag,intdim1,intdim2,intdim3,intdim4){System.out.println("dim4 ="+dim4);intsomatorio=0;for(intl=0;l<dim4;l++){somatorio+=mat_modImag[dim1][dim2][dim3][l];}System.out.println("a soma ="+somatorio);returnsomatorio;}publicstaticvoidmain(Stringargs[])throwsIOException{// Realizando a leitura do arquivo binárioDataInputStreaminput=newDataInputStream(newFileInputStream(newFile("C:/Documents and Settings/Projeto_Estudo/data.dtb")));// Lendo as dimensões gravadas no bináriointdim1=4;// dimensão fixaintdim2=input.readInt();// dimensão lida do arquivo bináriointdim3=input.readInt();// dimensão lida do arquivo bináriointdim4=input.readInt();// dimensão lida do arquivo binário// Exibo os valores de cada dimensão, só para verificar se esta "pegando" valor corretoSystem.out.println("Dimensão1= "+dim1);System.out.println("Dimensão2= "+dim2);System.out.println("Dimensão3= "+dim3);System.out.println("Dimensão4= "+dim4);// Guardo os valores das respectivas matrizes double[][][][]mat_modImag=criaMatriz4D(4,dim2,dim3,dim4,input);double[][][][]mat_conjImag=criaMatriz4D(4,dim2,dim3,dim4,input);float[][][]mat_modScatter=criaMatriz3D(dim2,dim3,dim4,input);float[][][]mat_conjScatter=criaMatriz3D(dim2,dim3,dim4,input);// Fechando a leiturainput.close();// Imprime as posições das matrizesSystem.out.println(mat_modImag[0][0][16][16]);System.out.println(mat_conjImag[0][0][19][16]);System.out.println(mat_modScatter[1][2][1]);System.out.println(mat_conjScatter[14][16][3]);}// Metodo para imprimir as matrizesprivatestaticvoidimprimeMatriz(double[][][][]matriz){System.out.println("----");for(inti=0;i<matriz.length;i++){for(intj=0;j<matriz[i].length;j++){for(intk=0;k<matriz[i][j].length;k++){System.out.print(" ");for(intl=0;l<matriz[i][j][k].length;l++){//System.out.print(matriz[i][j][k][l] + " ");}System.out.println();}System.out.println("--");}System.out.println("----");}}}