Cadastro de conteúdo usando usando if e while é o melhor caminho?

Boa noite guerreiros…
Estou fazendo o meu primeiro programa, trata-se de cadastro de conteúdo, poderiam verificar se estou indo no caminho certo? segue o código da classe main.
Vlw.

import java.io.IOException;
import java.util.Scanner;

public class Aplicacao {
public static void main(String[] args) throws IOException {

	try (Scanner leia = new Scanner(System.in)) {
		int total = 0, opcao = 0;

		while (opcao != 9) {
			System.out.println("Para Cadastro digite:");
			System.out.println("1 - MATÉRIA");
			System.out.println("2 - TÓPICO");
			System.out.println("9 - SAIR");
			opcao = leia.nextInt();

			if (opcao == 1) {
				Scanner leia2 = new Scanner(System.in);
				System.out.println("Digite o nome da materia:");
				String n1 = leia2.nextLine();

				Materia m = new Materia();
				m.setNome(n1);
				m.cadastrar();
				total++;

			} else {
				if (opcao == 2) {
					Scanner leia3 = new Scanner(System.in);
					System.out.println("Digite o nome do tópico:");
					String n1 = leia3.nextLine();
					Topico t = new Topico();
					t.setNome(n1);
					t.cadastrar();
					total++;
				}
			}
		}

		if (opcao == 9) {
			System.out.println("Quantidade de matérias cadastradas: " + total);
			System.out.println("Saindo do programa");
		}

	}

}

}

Boa noite, guerreiro!

No java (e não apenas nele) existe um comando chamado switch. Este comando avalia um certo dado (uma variável) e baseado no valor dela, realiza alguma ação. Processo semelhante a cadeia de if’s que você criou, porém mais organizado e legível:

   switch(opcao){
          case 1:
                 //ações para opção 1
                 break;
          case 2:
                 //ações para opção 2
                 break;
          case 9:
                 //ações para opção 9 (neste caso, poderia printar na tela "Saindo do programa" 
                 //e então de fato sair do programa.
                 break;
          default:
                 //ações que irão ocorrer no caso de ser outro dado alem de 1, 2 e 9.
                 break;
   }

Nesta estrutura condicional, é de extrema importância que você não esqueça do comando “break;”. Caso você não o coloque, ao entrar na opcao de número 2, por exemplo, irá executar ela, e todas as de baixo, até que encontre um comando break.

No caso do while, creio que está correto, para sua primeira aplicação.

De qualquer forma, pesquise sobre dividir as funcionalidades de sua aplicação em métodos (void). Você irá utiizar isto em qualquer linguagem de programação.

Abraços!