Aplicação Matrizes

1 resposta
J

Boa noite, pessoal
estou fazendo um trabalho técnico e estou travado,insiro duas matrizes,porem na hora da soma ocorre um erro, gostaria de saber como resolver isso. a primeira matriz inserida é identificada como numero 0 e a segunda 1.

package Matriz;

import java.util.ArrayList;
import java.util.Scanner;

public class Principal {

	public Principal() {

	}

	public static void main(String[] args) {

		menu();

		System.out.printf("\n");
	}

	public static void menu() {
		System.out.println("\tManipução de Matrizes!");
		System.out.println("Grupo:Lucas Araujo,Igor Lemos e Homero Costa");
		System.out.println("0. Fechar Programa");
		System.out.println("1. Operações entre duas Matrizes");
		System.out.println("6. Inserir Matrizes");
		System.out.println("Opcao:");
		int opcao = 99;
		int[][] a;
		int[][] b;
		int num = 0, num2 = 0;
		ArrayList<int[][]> matrizes = new ArrayList<int[][]>();
		Scanner entrada = new Scanner(System.in);
		Scanner ler = new Scanner(System.in);
		opcao = entrada.nextInt();
		if (opcao != 0) {
			String subopcao;
			Scanner entrada2;
			switch (opcao) {
			case 1:
				System.out.println("a. Soma");
				System.out.println("b. Subtração");
				System.out.println("c. Multiplicar");
				entrada2 = new Scanner(System.in);
				subopcao = entrada2.next();
				switch (subopcao) {
				case "a":
					System.out.println("Quais marizes voce deseja somar ? ");
					System.out.println("Numero da primeira matriz: ");
					num = ler.nextInt();
					System.out.println("Numero da segunda matriz: ");
					num2 = ler.nextInt();
					a = matrizes.get(num);
					b = matrizes.get(num2);
					soma(a, b);

					menu();
					break;
				case "b":

					menu();
					break;
				case "c":

					menu();
					break;
				}
				menu();
				break;

			case 6:
				System.out.println("a. Manualmente");
				entrada2 = new Scanner(System.in);
				subopcao = entrada2.next();
				switch (subopcao) {
				case "a":

					int i,
					j,
					linhas,
					colunas,
					numero;
					System.out.println("Primeira matriz:\n");
					System.out.println("Digite o numero de linhas");
					linhas = ler.nextInt();
					System.out.println("Digite o numero de colunas");
					colunas = ler.nextInt();
					int m[][] = new int[linhas][colunas];
					for (i = 0; i < linhas; i++) {
						for (j = 0; j < colunas; j++) {
							m[i][j] = 0;
						}
					}

					for (i = 0; i < linhas; i++) {
						for (j = 0; j < colunas; j++) {
							System.out.printf("m[%d][%d] = ", i, j);
							m[i][j] = ler.nextInt();
						}
					}
					matrizes.add(m);
					menu();
					break;
				}

			}
		}
	}

	static void soma(int[][] m, int[][] m2) {

		int i, j;
		int a, b;
		a = m.length;
		b = m[0].length;
		int result[][] = new int[a][b];

		for (i = 0; i < a; i++) {
			for (j = 0; j < b; j++) {
				result[i][j] = m[i][j] + m2[i][j];
				System.out.printf("[%d][%d] = %d ", i, j, result[i][j]);
			}
		}
	}
}
Obrigado

1 Resposta

A

Olá,
O problema está ocorrendo na linha 30. Toda vez que o método "menu()" é chamado a variável "matrizes" é zerada. Para resolver isso basta declarar "matrizes" fora do método.

Segue abaixo a correção do código. Como não havia a necessidade do "static" nos métodos eu os removi.
package Matriz;  

import java.util.ArrayList;
import java.util.Scanner;

public class Principal{
	
	ArrayList<int[][]> matrizes = new ArrayList<int[][]>();

	public Principal() {

	}

	public static void main(String[] args) {
		Principal principal =  new Principal();
		principal.menu();

		System.out.printf("\n");
	}

	public void menu() {
		System.out.println("\tManipução de Matrizes!");
		System.out.println("Grupo:Lucas Araujo,Igor Lemos e Homero Costa");
		System.out.println("0. Fechar Programa");
		System.out.println("1. Operações entre duas Matrizes");
		System.out.println("6. Inserir Matrizes");
		System.out.println("Opcao:");
		int opcao = 99;
		int[][] a;
		int[][] b;
		int num = 0, num2 = 0;
		
		Scanner entrada = new Scanner(System.in);
		Scanner ler = new Scanner(System.in);
		opcao = entrada.nextInt();
		if (opcao != 0) {
			String subopcao;
			Scanner entrada2;
			switch (opcao) {
			case 1:
				System.out.println("a. Soma");
				System.out.println("b. Subtração");
				System.out.println("c. Multiplicar");
				entrada2 = new Scanner(System.in);
				subopcao = entrada2.next();
				switch (subopcao) {
				case "a":
					System.out.println("Quais marizes voce deseja somar ? ");
					System.out.println("Numero da primeira matriz: ");
					num = ler.nextInt();
					System.out.println("Numero da segunda matriz: ");
					num2 = ler.nextInt();
					a = matrizes.get(num);
					b = matrizes.get(num2);
					soma(a, b);

					menu();
					break;
				case "b":

					menu();
					break;
				case "c":

					menu();
					break;
				}
				menu();
				break;

			case 6:
				System.out.println("a. Manualmente");
				entrada2 = new Scanner(System.in);
				subopcao = entrada2.next();
				switch (subopcao) {
				case "a":

					int i,
					j,
					linhas,
					colunas,
					numero;
					System.out.println("Primeira matriz:\n");
					System.out.println("Digite o numero de linhas");
					linhas = ler.nextInt();
					System.out.println("Digite o numero de colunas");
					colunas = ler.nextInt();
					int m[][] = new int[linhas][colunas];
					for (i = 0; i < linhas; i++) {
						for (j = 0; j < colunas; j++) {
							m[i][j] = 0;
						}
					}

					for (i = 0; i < linhas; i++) {
						for (j = 0; j < colunas; j++) {
							System.out.printf("m[%d][%d] = ", i, j);
							m[i][j] = ler.nextInt();
						}
					}
					matrizes.add(m);
					menu();
					break;
				}

			}
		}
	}

	void soma(int[][] m, int[][] m2) {

		int i, j;
		int a, b;
		a = m.length;
		b = m[0].length;
		int result[][] = new int[a][b];

		for (i = 0; i < a; i++) {
			for (j = 0; j < b; j++) {
				result[i][j] = m[i][j] + m2[i][j];
				System.out.printf("[%d][%d] = %d ", i, j, result[i][j]);
			}
		}
	}
}
Criado 15 de abril de 2015
Ultima resposta 21 de abr. de 2015
Respostas 1
Participantes 2