Aplicação Matrizes

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.

[code]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]);
		}
	}
}

}[/code]
Obrigado

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.

[code]
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]);
		}
	}
}

}[/code]