Montar um nova Matriz por parâmetro[Resolvido]

Caso um post semelhante a esse já exista, eu peço desculpas.

Considere uma matriz com os seguintes elementos:
1 1 1
2 2 2
3 3 3

Deve-se fazer um vetor de objetos do tipo Linha com tamanho igual a 3.
Cada objeto individual do tipo linha, ficará com um linha da matriz.
Então linha[1] ficará com 1,1,1
linha [2] ficará com 2,2,2

Eu gostaria de saber com eu implemento isso em java.
Segue o código (há erros)

package matriximplementation;

public class MatrixImplementation {

    public static void main(String[] args) {
        // TODO code application logic here

        int[][] m1 = {1,1,1},{2,2,2},{3,3,3};

        Linha[] linha = new Linha[3];


        //Passe linha 1 para o objeto linha[1], passe linha 2 para o obj linha[2] e etc.
        for (int i = 0; i < linha.length; i++) {
            for (int j = 0; j < linha.length; j++) {
                
                 for (int k = 0; k < linha.length; k++) {
                    linha[i] = new Linha(m1, j, k, (j + 3), (k + 3));
                }
            }
        }
    }
}


package matriximplementation;


public class Linha {
    
    // Para cada objeto em Linha, será montada uma matriz de 1 por 3(uma linha e três colunas)
    static int[][] matrizinterna;
    static int x, y, linha, coluna;

    public Linha(int[][] matriz, int x, int y, int linha, int coluna) {
        matrizinterna = matriz;
        this.x = x;
        this.y = y;
        this.linha = linha;
        this.coluna = coluna;

    }
    
    // retorno da matriz??
}

Eu estou tentando entender a sua duvida cara ! :?

[quote=dfarias]Caso um post semelhante a esse já exista, eu peço desculpas.

Considere uma matriz com os seguintes elementos:
1 1 1
2 2 2
3 3 3

Deve-se fazer um vetor de objetos do tipo Linha com tamanho igual a 3.
Cada objeto individual do tipo linha, ficará com um linha da matriz.
Então linha[1] ficará com 1,1,1
linha [2] ficará com 2,2,2

Eu gostaria de saber com eu implemento isso em java.
Segue o código (há erros)

[code]
package matriximplementation;

public class MatrixImplementation {

public static void main(String[] args) {
    // TODO code application logic here

    int[][] m1 = {1,1,1},{2,2,2},{3,3,3};

    Linha[] linha = new Linha[3];


    //Passe linha 1 para o objeto linha[1], passe linha 2 para o obj linha[2] e etc.
    for (int i = 0; i < linha.length; i++) {
        for (int j = 0; j < linha.length; j++) {
            
             for (int k = 0; k < linha.length; k++) {
                linha[i] = new Linha(m1, j, k, (j + 3), (k + 3));
            }
        }
    }
}

}

package matriximplementation;

public class Linha {

// Para cada objeto em Linha, será montada uma matriz de 1 por 3(uma linha e três colunas)
static int[][] matrizinterna;
static int x, y, linha, coluna;

public Linha(int[][] matriz, int x, int y, int linha, int coluna) {
    matrizinterna = matriz;
    this.x = x;
    this.y = y;
    this.linha = linha;
    this.coluna = coluna;

}

// retorno da matriz??

}
[/code][/quote]

Veja se isso resolve seu problema:

public class Matrix {

	public static void main(String[] args) {
		new Matrix().test();
	}

	private void test() {
		
		int[][] m1 = { { 1, 1, 1 }, { 2, 2, 2 }, { 3, 3, 3 } }; // faltava chaves aqui

		Linha[] linhas = new Linha[m1.length]; // deixei no plural pra deixar mais claro que ha varias linhas e deixei o tamanho em funcao do tamanho de m1

		for (int i = 0; i < m1.length; i++) { 
			
			int[] arrayLinha = new int[m1.length];
			
			for (int j = 0; j < m1[i].length; j++) {
				
				arrayLinha[j] = m1[i][j];
				
			}
			
			Linha linha = new Linha(arrayLinha, i);
			linhas[i] = linha;
			
		}
		
                //testando...
		for (Linha linha : linhas) {
			System.out.println(linha);
		}
		
	}

	public class Linha {

		private int[] arrayLinha; // ela só precisa de uma dimensao
		private int linhaDaMatriz; // nao entendi pra que vc precisa dos outros atributos, entao os apaguei. deixei apenas o atributo linha, pra saber a qual linha da matriz original ela pertence

		public Linha (int[] arrayLinha, int linhaDaMatriz) {
			this.arrayLinha = arrayLinha;
			this.linhaDaMatriz = linhaDaMatriz;
		}

		@Override
		public String toString () { //soh pra imprimir o conteudo da classe na hora do teste
			
			String arrayString = "[";
			for (int inteiro : arrayLinha) {
				arrayString += inteiro + " ";
			}
			arrayString += "]";
			
			return "linhaDaMatriz = " + linhaDaMatriz + ", arrayLinha = " + arrayString;
		}
	}

}

é isso mesmo.
agora e se eu tiver dois vetores e quiser somar-los?
segue abaixo o código.

[code]public Linha(int[] arrayLinhaM1,int[]arrayLinhaM2, int linhaDaMatriz) {//linha, agora é um vetor
this.arrayLinhaM1 = arrayLinhaM1;
this.arrayLinhaM2 = arrayLinhaM2;
this.linhaDaMatriz = linhaDaMatriz;

}

public void soma(){
for (int i = 0; i <arrayLinhaM1.length; i++) {
arrayResultado[i]=arrayLinhaM1[i]+arrayLinhaM2[i];
}
}[/code]

:twisted: tá dando erro: NullPointer

outra coisa. alguém pode me explicar essa outra parte do código:

String arrayString = "["; for (int inteiro : arrayLinha) { arrayString += inteiro + " "; }

:? Alguém pode me ajudar? No caso, suponha que ao invés de passar apenas as linhas de uma única matriz, passemos agora as linhas das matrizes 1 e 2. Eu quero somar arrayLinhaM1 com arrayLinhaM2 e colocar no arrayResultado. Só que o diabo tá dando erro. :oops:

[quote=dfarias]é isso mesmo.
agora e se eu tiver dois vetores e quiser somar-los?
segue abaixo o código.

[code]public Linha(int[] arrayLinhaM1,int[]arrayLinhaM2, int linhaDaMatriz) {//linha, agora é um vetor
this.arrayLinhaM1 = arrayLinhaM1;
this.arrayLinhaM2 = arrayLinhaM2;
this.linhaDaMatriz = linhaDaMatriz;

}

public void soma(){
for (int i = 0; i <arrayLinhaM1.length; i++) {
arrayResultado[i]=arrayLinhaM1[i]+arrayLinhaM2[i];
}
}[/code]

:twisted: tá dando erro: NullPointer

outra coisa. alguém pode me explicar essa outra parte do código:

String arrayString = "["; for (int inteiro : arrayLinha) { arrayString += inteiro + " "; } [/quote]

Acho que você não inicializou o arrayResultado. Até porque, acredito que ele seja um atributo e vc não saiba o tamanho dele antes de receber as linhas. Se for isso mesmo, no construtor, inicialize esse arrayResultado;

this.arrayResultado = new int[arrayLinhaM1.length];

O erro continua. NullPointer

[code]public Linha(int[] arrayLinhaM1,int[]arrayLinhaM2, int linhaDaMatriz) {//linha, agora é um vetor
this.arrayLinhaM1 = arrayLinhaM1;
this.arrayLinhaM2 = arrayLinhaM2;
this.linhaDaMatriz = linhaDaMatriz;

   this.arrayResultado = new int[arrayLinhaM1.length]; //alteracao feita, erro persiste
}  

public void soma(){ //soma e impressao do resultado
System.out.println("soma da linha "+i);
for (int i = 0; i <arrayLinhaM1.length; i++) {
arrayResultado[i]=arrayLinhaM1[i]+arrayLinhaM2[i];
System.out.println(arrayResultado[i])
}
} [/code]

Posta como está sendo feita a chamada do construtor e do método “soma” e como estão sendo inicializados/modificados os parâmetros passados.

[quote=dfarias]

outra coisa. alguém pode me explicar essa outra parte do código:

String arrayString = "["; for (int inteiro : arrayLinha) { arrayString += inteiro + " "; } [/quote]

Não tinha visto essa parte da dúvida.


            for (int inteiro : arrayLinha) {    //aqui, estou chamando cada um dos "int" de "arrayLinha" e atribuindo à variável "inteiro". Esse "for diferente" eh chamado "foreach"
                arrayString += inteiro + " ";  //aqui, pego a String arrayString e adiciono a variavel inteiro seguido de um espaco
            }  

Vale lembrar que concatenar String com “+” não é recomendável quando há muitas iterações. Se quiser saber mais sobre isso, pesquise sobre StringBuilder e StringBuffer

Pra ficar mais fácil de entender, o código acima seria equivalente a esse:


            for (int i = 0; i < arrayLinha.length; i++) {   
                   int inteiro = arrayLinha[i];
                   arrayString = arrayString + inteiro + " "; 
            }  

A vantagem do primeiro, é que utiliza a mesma sintaxe tanto pra array quanto outras estruturas como List e Set (que teriam que chamar o método size() pra saber o tamanho).

E quanto a passagem de duas linhas da matriz?

Obrigado! :smiley: