Matrizes(colocando 3 elementos (X,Y,Z) em cada posiçao de uma matriz)[Resolvido]

35 respostas
tonydesign

Olá pessoal estou desenvolvendo um algoritmo em java para a implementação de uma matriz no qual desejo colocar em cada posição da matriz x,y,z . Gostaria que alguem me ajuda-se nesse trabalho.

public static void main(String[] args) {
                int tamx = 3,tamy = 3;
               int lin,col;
               int mat[][] = new int[3][3];

        System.out.println("Matriz");
       for(lin = 0; lin < mat.length; lin++){
          for(col = 0; col < mat[lin].length; col++) {
              System.out.printf("[%d]", mat[lin][col]);
          }
          System.out.println();
       }
   }

Eu gostaria que a saida do algoritmo fosse assim:

É apenas um exemplo de uma matriz 3 X 3;

[1,0,0] [2,0,0] [2,4,5]
[2,3,4] [3,7,5] [3,4,5]
[3,2,0] [3,3,3] [3,4,5]

Alguem conseguiu entender o que eu to querendo ?

Inserir 3 valores em cada posição de uma Matriz !
X , Y , Z

35 Respostas

diego.urban

Você deve declarar a matriz assim:

int mat[][][] = new int[3][3][3];

caso queira trabalhar com x, y e z.

tonydesign

Mais têm como você me passar um exemplo ?
exibindo esses dados ?

tonydesign

desse jeito ae aparece esse erro :

Matriz

Exception in thread main java.util.IllegalFormatConversionException: d != [I
        at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:3992)
        at java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2708)
        at java.util.Formatter$FormatSpecifier.print(Formatter.java:2660)
        at java.util.Formatter.format(Formatter.java:2432)
        at java.io.PrintStream.format(PrintStream.java:920)
        at java.io.PrintStream.printf(PrintStream.java:821)
        at antoniotcc.Main.main(Main.java:14)
[Java Result: 1]
A
int matriz[][][] = new int[3][3][3];

        for(int i = 0; i< 3; i++){// roda as linhas
            for(int j = 0; j<3; j++){//roda as colunas
                for(int k=0; k<3 ; k++){// rodas os indices do vetor x,y,z
                    //algum código
                }
            }
        }

no codigo comentado algum codigo é so fazer a impressão dos digitos, ou setar algum valor.

diego.urban

Desculpa ai.. acho que agora entendi o que você está querendo fazer.
Você quer trabalhar com uma matriz bidimensional, porém em cada posição da matriz, inserir um conjunto de valores(x, y e z) certo?

Nesse seu exemplo você está querendo adicionar uma lista contendo 3 valores(x, y e z) em cada posição da matriz, porém ela só aceita um número inteiro em cada posição pois ela foi declarada desta forma:

int mat[][] = new int[3][3];

Creio que a melhor forma seria encapsular estar 3 posições(x, y e z) em uma classe, e fazer uma matriz bidimensional desta classe e não de int.

a definição de sua matriz seria assim:
Posicao mat[][] = new Posicao[3][3];

sendo que a classe Posicao seria algo assim:

public class Posicao {		
		private int x;
		private int y;
		private int z;
		
		// construtor
		
		// getters e setters
}
A

Seguindo o seu código!

public static void main(String[] args) {  
		int tamx = 3,tamy = 3;  
		int lin,col;  
		int mat[][][] = new int[3][3][3]; 
		
		String[] s = new String[]{"1", "2", "3"};
		  
		System.out.println("Matriz");  
		for(lin = 0; lin < mat.length; lin++){  
			for(col = 0; col < mat[lin].length; col++) {
				System.out.print("[");
				for(int z = 0; z < mat[lin].length; z++) {
					System.out.print(mat[lin][col][z] + ",");
				}
				System.out.print("]");
			} 
			System.out.println();
		} 
	}
tonydesign

É isso mesmo o diego.urban , meu codigo ficou assim :

public class Posicao{
        private int x;
        private int y;
        private int z;
    }

    public static void main(String[] args) {
               Posicao mat[][] = new Posicao[3][3];
        System.out.println("Matriz");
       for(int lin = 0; lin < mat.length; lin++){
          for(int col = 0; col < mat[lin].length; col++) {
              System.out.printf("[%d]", mat[lin][col]);
          }
          System.out.println();
       }
   }

Os valores estão saindo nulos pois ainda num coloquei nenhum valor !!
Mais desse jeito tem como vc colocar um exemplo colocando os valores e exibindo ae ?
para ser visualizado assim:

[1,0,0] [2,0,0] [2,4,5]
[2,3,4] [3,7,5] [3,4,5]
[3,2,0] [3,3,3] [3,4,5]

Ae o diego.urban muito obrigado ae pela ajuda hen !!

diego.urban

tonydesign:
É isso mesmo o diego.urban , meu codigo ficou assim :

public class Posicao{
        private int x;
        private int y;
        private int z;
    }

    public static void main(String[] args) {
               Posicao mat[][] = new Posicao[3][3];
        System.out.println("Matriz");
       for(int lin = 0; lin < mat.length; lin++){
          for(int col = 0; col < mat[lin].length; col++) {
              System.out.printf("[%d]", mat[lin][col]);
          }
          System.out.println();
       }
   }

Os valores estão saindo nulos pois ainda num coloquei nenhum valor !!
Mais desse jeito tem como vc colocar um exemplo colocando os valores e exibindo ae ?
para ser visualizado assim:

[1,0,0] [2,0,0] [2,4,5]
[2,3,4] [3,7,5] [3,4,5]
[3,2,0] [3,3,3] [3,4,5]

Ae o diego.urban muito obrigado ae pela ajuda hen !!

Defina o construtor na classe Posicao passando como parâmetro as 3 posições e armazenando-as nos respectivos atributos.

Esse código abaixo irá adicionar um objeto do tipo Posicao em cada posição da matriz contendo x, y e z igual a 1, 2 e 3 respectivamente.

for (int y = 0; y < mat.length; y++) { for (int x = 0; x < mat[y].length; x++) { mat[y][x] = new Posicao(1,2,3); } }

Na classe Posicao, implemente o método toString() desta forma:

@Override public String toString() { return "[" + x + "," + y + "," + z + "]"; }

ao invés de:

System.out.printf("[%d]", mat[lin][col]);

faça:

System.out.print(mat[y][x].toString());
tonydesign

meu codigo ficou assim:

public class Posicao{
        private int x;
        private int y;
        private int z;

        @Override
      public String toString() {
        return "[" + x + "," + y + "," + z + "]";
 }
    }

    public static void main(String[] args) {
               Posicao mat[][] = new Posicao[3][3];

         System.out.println("Matriz");
           for (int y = 0; y < mat.length; y++) {
                for (int x = 0; x < mat[y].length; x++) {
                    mat[y][x] = new Posicao(1,2,3);
                }
    }
             System.out.print(mat[y][x].toString());
          }

mais ta dando erro no mat[y][x] = new Posicao(1,2,3);

voce sabe o que eh !!
parece que esta reclamando de y e x.
O codigo esta correto ?

diego.urban

tonydesign:
meu codigo ficou assim:

public class Posicao{
        private int x;
        private int y;
        private int z;

        @Override
      public String toString() {
        return "[" + x + "," + y + "," + z + "]";
 }
    }

    public static void main(String[] args) {
               Posicao mat[][] = new Posicao[3][3];

         System.out.println("Matriz");
           for (int y = 0; y < mat.length; y++) {
                for (int x = 0; x < mat[y].length; x++) {
                    mat[y][x] = new Posicao(1,2,3);
                }
    }
             System.out.print(mat[y][x].toString());
          }

mais ta dando erro no mat[y][x] = new Posicao(1,2,3);

voce sabe o que eh !!
parece que esta reclamando de y e x.
O codigo esta correto ?

Defina o construtor na classe Posicao passando como parâmetro as 3 posições e armazenando-as nos respectivos atributos.

tonydesign

diego.urban:
tonydesign:
meu codigo ficou assim:

public class Posicao{
        private int x;
        private int y;
        private int z;

        @Override
      public String toString() {
        return "[" + x + "," + y + "," + z + "]";
 }
    }

    public static void main(String[] args) {
               Posicao mat[][] = new Posicao[3][3];

         System.out.println("Matriz");
           for (int y = 0; y < mat.length; y++) {
                for (int x = 0; x < mat[y].length; x++) {
                    mat[y][x] = new Posicao(1,2,3);
                }
    }
             System.out.print(mat[y][x].toString());
          }

mais ta dando erro no mat[y][x] = new Posicao(1,2,3);

voce sabe o que eh !!
parece que esta reclamando de y e x.
O codigo esta correto ?

Defina o construtor na classe Posicao passando como parâmetro as 3 posições e armazenando-as nos respectivos atributos.

Poxa velho eu agradeço sua ajuda mais não to entendendo vc naum pode por um exemplo completo pra mim ?

tonydesign

Eu criei o construtor dentro da classe Posicao desse modo:

public Posicao(int x, int y, int z) {
            this.x = 10;
            this.y = 20;
            this.z = 30;
        }

Mais continua dando erro

diego.urban

Qual erro que está dando?

tonydesign

Ae vlw eu fiz alguns ajustes aqui e esta funcionando !!

diego.urban

Ok,

Se o seu tópico foi respondido e você está satisfeito, segue:

  • Pressione o botão de seu primeiro post
  • Acrescente no final do título a tag [RESOLVIDO].

Obrigado.

jessicaange

Faça um procedimento que retorna, por parâmetro, um vetor A(5) com os 5 primeiros números perfeitos como posso resolver este?

tonydesign

Como eu faço para pode pegar o X , Y e Z no segundo FOR , e add um parametro para que o X,Y e Z eu possa somar
cada um com um parametro diferente ?

System.out.println("Matriz");  
        for (int y = 0; y < mat.length; y++) {  
             for (int x = 0; x < mat[y].length; x++) {  
                 mat[y][x] = new Posicao(1,2,3);
          
            //Quero pegar o x,y,z aqui  e colocar eles para somar com um outro parametro
  
             }  
 }
diego.urban
tonydesign:
Como eu faço para pode pegar o X , Y e Z no segundo FOR , e add um parametro para que o X,Y e Z eu possa somar cada um com um parametro diferente ?
System.out.println("Matriz"); // imprime "Matriz"  
        for (int y = 0; y < mat.length; y++) { // varre as linhas da matriz
             for (int x = 0; x < mat[y].length; x++) { // varre as colunas da matriz
                 mat[y][x] = new Posicao(1,2,3); // para cada célula na matriz, adiciona um objeto do tipo Posicao contendo X = 1, Y = 2 e Z = 3
          
            //Quero pegar o x,y,z aqui  e colocar eles para somar com um outro parametro
  
             }  
 }
Desta forma você armazena na matriz um objeto do tipo Posicao:
mat[y][x] = new Posicao(1,2,3);
Na linha y e coluna x você está inserindo o objeto. Desta forma você recupera da matriz o objeto adicionado anteriormente:
Posicao p = mat[y][x];
O conteúdo da matriz na linha y e coluna x é armazenado na variável p do tipo Posicao.

Caso você implementou os métodos get de cada atributo na classe Posicao, você consegue recuperar o X, Y e Z.
Assim, basta fazer o seu cálculo com o outro parâmetro em questão.

Obs: Essa sua rotina acima deveria ser só de insercão na matriz.
Fica meio sem sentido adicionar algo na matriz e logo depois pegar esse mesmo objeto novamente na mesma rotina, nesse caso você poderia fazer isso sem a matriz...
Faça duas rotinas, uma para inserir e outra para buscar, que fica melhor.

tonydesign

vlw vou ver o que eu faço aqui e já te falo

diego.urban
tonydesign:
System.out.println("Mapa");

        // Inserindo os dados na matriz

           for (int lin = 0; lin < mat.length; lin++) {
                for (int col = 0; col < mat[lin].length; col++) {
                    mat[lin][col] = new Posicao(1,2,3);           
                }
    }

        // Criando outra rotina para a soma dos parametros

          for (int lin = 0; lin < mat.length; lin++) {
                for (int col = 0; col < mat[lin].length; col++) {
                    mat[lin][col] = new Posicao(1,2,3); // porque você está adicionando novamente se você já preencheu a matriz na rotina de cima?
                    Posicao p = mat[lin][col];
                    p.getX(); //eu quero soma o X (exemplo Ndivx)
                    p.getY(); //eu quero soma o X (exemplo Ndivy)
                   // p.getZ(); // aqui vou deixar com o valor de (0.0)

                    System.out.print(mat[lin][col].toString());
                }
               System.out.println();
    }

O Ndivy, Ndivx estao na classe Mapa

Eu fiz desse jeito ae mais naum sei esta certo

De preferência poste no fórum, desta forma mais pessoas poderão lhe ajudar.

Cara, não entendi muito bem o que você está querendo fazer...

tonydesign
System.out.println("Mapa");  
  
         // Inserindo os dados na matriz  
   
            for (int lin = 0; lin < mat.length; lin++) {  
                 for (int col = 0; col < mat[lin].length; col++) {  
                     mat[lin][col] = new Posicao(1,2,3);             
                 }  
     }  
   
         // Criando outra rotina para a soma dos parametros  
   
           for (int lin = 0; lin < mat.length; lin++) {  
                 for (int col = 0; col < mat[lin].length; col++) {  
                 //    mat[lin][col] = new Posicao(1,2,3); so depois que eu vi vlw  
                     Posicao p = mat[lin][col];  
                     p.getX(); //eu quero soma o X (exemplo Ndivx)  
                     p.getY(); //eu quero soma o X (exemplo Ndivy)  
                    // p.getZ(); // aqui vou deixar com o valor de (0.0)  
   
                     System.out.print(mat[lin][col].toString());  
                 }  
                System.out.println();  
     }

Como eu te disse o Ndivx, Ndivy estao na classe Mapa
ae eu gostaria de somar o:
x + Ndivx
y + Ndivy

diego.urban

tonydesign:

Como eu te disse o Ndivx, Ndivy estao na classe Mapa
ae eu gostaria de somar o:
x + Ndivx
y + Ndivy

Interessante, você consegue pegar o X e o Y da classe Posicao porém está com dificuldades para pegar o Ndivx e Ndivy da classe Mapa…

Cara, de boa…
Da uma lida no Capítulo 4 dessa apostila.

Creio que isso vai esclarecer as tuas dúvidas um pouco.

tonydesign

vlw vou da uma olhada ae eu volto aqui

mais minha dificuldade e como eu faço para somar ??
os dos parametros !!

pois eu tentei de alguns jeitos aqui e fica dando erro

diego.urban
tonydesign:
vlw vou da uma olhada ae eu volto aqui

mais minha dificuldade e como eu faço para somar ??
os dos parametros !!

pois eu tentei de alguns jeitos aqui e fica dando erro

:shock: Pra somar, basta inserir um operador(+) entre dois operandos e armazenar o resultado numa variável(caso queira).
public class Teste {
	
	public static void main(String[] args) {	
		int operando1 = 2;
		int operando2 = 3;	
		int resultado = operando1 + operando2;	
		System.out.println(resultado);
	}
}

Poste o código-fonte do jeito que você está tentando para que possamos verificar o erro.

tonydesign

Não desse jeito ae eh trankil !!

So que eu tava querendo somar os valores dentro da Matriz, para em quanto ela for dando o Loop ele vai somando
o X com o Ndivx e o Y com o Ndivy

tonydesign

Vamos lá !!

Classe Principal

// Criando outra rotina para a soma dos parametros
          for (int lin = 0; lin < mat.length; lin++) {
                for (int col = 0; col < mat[lin].length; col++) {
                    Posicao p = mat[lin][col];
                    
                    

                    System.out.print(mat[lin][col].toString());
                }
               System.out.println();
    }

Vê ae eu quero somar X com Ndivx e Y Ndivy no loop da segunda rotina !
sendo que essa soma vai acumulando.
Exemplo: Ndivx =10

Estou iniciando X com
0.0 apartir da ae vai …

10
20
30
40

Agora deu para entender ?

diego.urban

Classe Posicao

public class Posicao {
	
	//... atributos ...

	public Posicao() {
		// se for pra zerar as atributos, opte por um construtor sem parâmetros
		this.x = 0.0;
		this.y = 0.0;
		this.z = 0.0;
	}

	public Posicao(double x, double y, double z) {
		// como esse construtor recebe parâmetros, opte por usá-los, caso
		// contrário não haveria a necessidade dele existir pois na classe Principal você faz new Posicao(1,2,3) porém aqui você não está fazendo uso destes parâmetros..
		
		// this.x = 0.0;
		this.x = x;
		// this.y = 0.0;
		this.y = y;
		// this.z = 0.0;
		this.z = z;
	}

	//... getters e setters ...
}

Classe Principal

// ...
		double somaX = 0.0;
		double somaY = 0.0;
		// Criando outra rotina para a soma dos parametros
		for (int lin = 0; lin < mat.length; lin++) {
			for (int col = 0; col < mat[lin].length; col++) {
				Posicao p = mat[lin][col];
				
				somaX = somaX + (p.getX() + m.getNdivx()); // somando o resultado de x + ndivx na variável somaX
				somaY = somaY + (p.getY() + m.getNdivy()); // somando o resultado de y + ndivy na variável somaY
				System.out.print(p);
			}
			System.out.println();
		}
		
		// ...
tonydesign

Bom dia !!

Voce chegou colocar para rodar ae ?

pois o meu aqui a saida ta assim:

[1.0,2.0,3.0][1.0,2.0,3.0][1.0,2.0,3.0][1.0,2.0,3.0][1.0,2.0,3.0][1.0,2.0,3.0][1.0,2.0,3.0][1.0,2.0,3.0]

double somaX = 0.0;  
 double somaY = 0.0;  
 // Criando outra rotina para a soma dos parametros  
 for (int lin = 0; lin < mat.length; lin++) {  
     for (int col = 0; col < mat[lin].length; col++) {  
         Posicao p = mat[lin][col];  // acho que o System.out.print que pega esse aqui ae ele pula a soma !!
           
         somaX = somaX + (p.getX() + m.getNdivx()); // somando o resultado de x + ndivx na variável somaX  
         somaY = somaY + (p.getY() + m.getNdivy()); // somando o resultado de y + ndivy na variável somaY  
         System.out.print(p);  // aqui ele ta pegando o p antes de fazer a soma 
     }  
    System.out.println();  
}
diego.urban

Bom dia.

sim

tonydesign:
pois o meu aqui a saida ta assim:

[1.0,2.0,3.0][1.0,2.0,3.0][1.0,2.0,3.0][1.0,2.0,3.0][1.0,2.0,3.0][1.0,2.0,3.0][1.0,2.0,3.0][1.0,2.0,3.0]

meu tbm, até tem mais linhas que isso pois lá na classe principal que você postou antes, a matriz criada era 8x8.

double somaX = 0.0;  
 double somaY = 0.0;  
 // Criando outra rotina para a soma dos parametros  
 for (int lin = 0; lin < mat.length; lin++) {  
     for (int col = 0; col < mat[lin].length; col++) {  
         Posicao p = mat[lin][col];  // aqui ele pega o p da matriz
           
         // bom.. de acordo com o que você falou no post anterior..
         // você gostaria de somar X com Ndivx e Y com Ndivy
         // sendo que essa soma vai se acumulando...
         somaX = somaX + (p.getX() + m.getNdivx()); // somando o resultado de x + ndivx na variável somaX  
         somaY = somaY + (p.getY() + m.getNdivy()); // somando o resultado de y + ndivy na variável somaY

         System.out.print(p);  // aqui ele so imprime o p, no formato do método toString(): [1.0,2.0,3.0]
     }  
    System.out.println();  
}

Cara, me responde uma coisa…
Qual é o objetivo de você implementar isso?

tonydesign

Aqui o meu to.String() eu tirei da classe Principal.

double somaX = 0.0;  
 double somaY = 0.0;
 // Criando outra rotina para a soma dos parametros  
 for (int lin = 0; lin < mat.length; lin++) {  
     for (int col = 0; col < mat[lin].length; col++) {  
         Posicao p = mat[lin][col];
           
         somaX = somaX + (p.getX() + m.getNdivx()); // somando o resultado de x + ndivx na variável somaX  
         somaY = somaY + (p.getY() + m.getNdivy()); // somando o resultado de y + ndivy na variável somaY  
        
  
         System.out.print(p);
     }  
    System.out.println();  
}
tonydesign

Ae arrumei aqui

Olha como ficou

double somaX = 0.0;  
 double somaY = 0.0;  
 // Criando outra rotina para a soma dos parametros  
 for (int lin = 0; lin < mat.length; lin++) {  
     for (int col = 0; col < mat[lin].length; col++) {  
         Posicao p = mat[lin][col];
           
         somaX = somaX + (p.getX() + m.getNdivx()); // somando o resultado de x + ndivx na variável somaX  
         somaY = somaY + (p.getY() + m.getNdivy()); // somando o resultado de y + ndivy na variável somaY  
        
         p.setX(somaX); // Aqui setei o X
         p.setY(somaY); // Aqui setei o Y
         System.out.print(p);
     }  
    System.out.println();  
}

desse jeito ta saindo assim o programa

[11.0,12.0,3.0][22.0,24.0,3.0][33.0,36.0,3.0][44.0,48.0,3.0][55.0,60.0,3.0][66.0,72.0,3.0][77.0,84.0,3.0][88.0,96.0,3.0][99.0,108.0,3.0][110.0,120.0,3.0]
[121.0,132.0,3.0][132.0,144.0,3.0][143.0,156.0,3.0][154.0,168.0,3.0][165.0,180.0,3.0][176.0,192.0,3.0][187.0,204.0,3.0][198.0,216.0,3.0][209.0,228.0,3.0][220.0,240.0,3.0]
[231.0,252.0,3.0][242.0,264.0,3.0][253.0,276.0,3.0][264.0,288.0,3.0][275.0,300.0,3.0][286.0,312.0,3.0][297.0,324.0,3.0][308.0,336.0,3.0][319.0,348.0,3.0][330.0,360.0,3.0]
[341.0,372.0,3.0][352.0,384.0,3.0][363.0,396.0,3.0][374.0,408.0,3.0][385.0,420.0,3.0][396.0,432.0,3.0][407.0,444.0,3.0][418.0,456.0,3.0][429.0,468.0,3.0][440.0,480.0,3.0]
[451.0,492.0,3.0][462.0,504.0,3.0][473.0,516.0,3.0][484.0,528.0,3.0][495.0,540.0,3.0][506.0,552.0,3.0][517.0,564.0,3.0][528.0,576.0,3.0][539.0,588.0,3.0][550.0,600.0,3.0]
[561.0,612.0,3.0][572.0,624.0,3.0][583.0,636.0,3.0][594.0,648.0,3.0][605.0,660.0,3.0][616.0,672.0,3.0][627.0,684.0,3.0][638.0,696.0,3.0][649.0,708.0,3.0][660.0,720.0,3.0]
[671.0,732.0,3.0][682.0,744.0,3.0][693.0,756.0,3.0][704.0,768.0,3.0][715.0,780.0,3.0][726.0,792.0,3.0][737.0,804.0,3.0][748.0,816.0,3.0][759.0,828.0,3.0][770.0,840.0,3.0]
[781.0,852.0,3.0][792.0,864.0,3.0][803.0,876.0,3.0][814.0,888.0,3.0][825.0,900.0,3.0][836.0,912.0,3.0][847.0,924.0,3.0][858.0,936.0,3.0][869.0,948.0,3.0][880.0,960.0,3.0]
[891.0,972.0,3.0][902.0,984.0,3.0][913.0,996.0,3.0][924.0,1008.0,3.0][935.0,1020.0,3.0][946.0,1032.0,3.0][957.0,1044.0,3.0][968.0,1056.0,3.0][979.0,1068.0,3.0][990.0,1080.0,3.0]
[1001.0,1092.0,3.0][1012.0,1104.0,3.0][1023.0,1116.0,3.0][1034.0,1128.0,3.0][1045.0,1140.0,3.0][1056.0,1152.0,3.0][1067.0,1164.0,3.0][1078.0,1176.0,3.0][1089.0,1188.0,3.0][1100.0,1200.0,3.0]

diego.urban

é isso ai…

tonydesign

Vou colocar como resolvido ae quando eu for dar proceguimento eu volto ne !!

diego.urban

Ok, de acordo com a assunto, o problema era colocar 3 elemetos(x,y,z) em cada posição de uma matriz, que foi resolvido há alguns post atrás…

Se futuramente o seu problema for outro, de preferência crie outro tópico…
Porém somente crie um tópico se no fórum não existir outro tópico com um problema parecido.

Obrigado.

tonydesign

Eh eu sei muito obrigado !

Criado 9 de dezembro de 2009
Ultima resposta 11 de dez. de 2009
Respostas 35
Participantes 5