Problema em Matrizes

3 respostas Resolvido
java
L

Boa tarde, não estou conseguindo executar o código completamente.
Ele trava quando declaro o último valor da matriz. (numeros[3,3])

package com.loiane.cursojava.aula20;

import java.util.*;

public class Exer03_1 {

public static void main(String[] args) {

	int[][] numeros = declararValoresVetor();

	int contadorPar = obtendoValoresParaDeclararTamanhoDeParImpar(numeros);

	int[] par = new int[numeros.length - contadorPar];
	int aumentaPar = 0;

	int[] impar = new int[numeros.length - par.length];
	int aumentaImpar = 0;

	for (int i = 0; i < impar.length; i++) {
		for (int j = 0; j < impar.length; j++) {
			if ((numeros[i][j] % 2) == 0) {
				par[aumentaPar] = numeros[i][j];
				aumentaPar++;
			} else {
				impar[aumentaImpar] = numeros[i][j];
				aumentaImpar++;
			}
		}
	}

	imprimirVetorPrincipalMaisParImpar(numeros, par, impar);
}

public static void imprimirVetorPrincipalMaisParImpar(int[][] numeros, int[] par, int[] impar) {
	for (int i = 0; i < impar.length; i++) {
		for (int j = 0; j < impar.length; j++) {
			System.out.print(numeros[i][j] + " ");
		}
		System.out.println();
	}

	for (int i = 0; i < par.length; i++) {
		System.out.print("Numeros pares: " + par[i]);
	}

	System.out.println();
	for (int i = 0; i < impar.length; i++) {
		System.out.print("Numeros impares: " + impar[i]);
	}
}

public static int obtendoValoresParaDeclararTamanhoDeParImpar(int[][] numeros) {
	int contadorPar = 0;

	for (int i = 0; i < numeros.length; i++) {
		for (int j = 0; j < numeros.length; j++) {
			if ((numeros[i][j] % 2) == 0) {
				contadorPar++;
			}
		}
	}
	return contadorPar;
}

public static int[][] declararValoresVetor() {
	Scanner sc = new Scanner(System.in);

	int[][] numeros = new int[4][4];

	for (int i = 0; i < numeros.length; i++) {
		for (int j = 0; j < numeros.length; j++) {
			System.out.println("Informe um valor para a posicao [" + i + "," + j + "]: ");
			numeros[i][j] = sc.nextInt();
		}
	}
	return numeros;
}

}

3 Respostas

L

Gostaria de saber o que está errado e como resolver, se possível.

wldomiciano
Solucao aceita

Haviam algumas coisas erradas no main e no imprimirVetorPrincipalMaisParImpar.

Com as modificações ficou assim:

public static void main(String[] args) {
  int[][] numeros = declararValoresVetor();

  int contadorPar = obtendoValoresParaDeclararTamanhoDeParImpar(numeros);

  int[] par = new int[contadorPar];
  int aumentaPar = 0;

  int[] impar = new int[numeros.length * numeros[0].length - contadorPar];
  int aumentaImpar = 0;

  for (int i = 0; i < numeros.length; i++) {
    for (int j = 0; j < numeros[0].length; j++) {
      if ((numeros[i][j] % 2) == 0) {
        par[aumentaPar] = numeros[i][j];
        aumentaPar++;
      } else {
        impar[aumentaImpar] = numeros[i][j];
        aumentaImpar++;
      }
    }
  }

  imprimirVetorPrincipalMaisParImpar(numeros, par, impar);
}

public static void imprimirVetorPrincipalMaisParImpar(int[][] numeros, int[] par, int[] impar) {
  for (int i = 0; i < numeros.length; i++) {
    for (int j = 0; j < numeros[0].length; j++) {
      System.out.print(numeros[i][j] + " ");
    }
    System.out.println();
  }

  for (int i = 0; i < par.length; i++) {
    System.out.println("Numeros pares: " + par[i]);
  }

  System.out.println();
  for (int i = 0; i < impar.length; i++) {
    System.out.println("Numeros impares: " + impar[i]);
  }
}

Básicamente eu ajustei como o length do array impar é calculado pra ficar assim:

numeros.length * numeros[0].length - contadorPar

E os for que percorrem o array numeros que ficou assim:

for (int i = 0; i < numeros.length; i++) {
  for (int j = 0; j < numeros[0].length; j++) {
L

Muito obrigado, mano. Tava quebrando a cabeça aqui atoa, analisei o código e percebi que estava declarando muitos dos “for” como i<impar.length quando deveria ser “numeros”.

Valeuzao, de verdade!

Criado 30 de agosto de 2019
Ultima resposta 30 de ago. de 2019
Respostas 3
Participantes 2