Ajuda - Iniciante

Boa noite galera. Estou num curso de java faz 1 mês apenas. Ao fazer uma questão, meu laço fica num loop infinito após a terceira vez.

O meu código está incompleto e já descobri uma outra forma de executá-lo, mas gostaria de saber o que está impedindo que esta minha lógica seja bem executada.

Depois da terceira vez cadastrando Alunos, parece que não entra no “if(contPessoas > 0)” e fica pedindo o nome do Aluno infinitamente.

PS: Eu só quero entender o porquê da minha lógica não estar sendo executada com sucesso, não outro modo de executar esse code. Valeu!

package exercicios;

import javax.swing.JOptionPane;

public class Ex08 {

public static void main(String[] args) {

  // Vetores
  String[][] dados = new String[30][4];
  Object[] sexo = { "Homem", "Mulher" };

  // Variáveis
  int menuPrincipal = 0;
  String nome = "";
  double nota1 = 0;
  double nota2 = 0;
  double nota3 = 0;
  double media = 0;

  // Validadores
  boolean validaNome = false;
  boolean validaNota1 = false;
  boolean validaNota2 = false;
  boolean validaNota3 = false;

  // Contadores
  int contPessoas = 0;
  double homem = 0;
  double mulher = 0;

  // Menu
  String menu = "1) Cadastrar Alunos";
  menu += "\n2) Excluir Alunos";
  menu += "\n3) Estatísticas";
  menu += "\n4) Sair do Sistema";

  while (menuPrincipal != 4) {

  	menuPrincipal = Integer.parseInt(JOptionPane.showInputDialog(menu));

  	if (menuPrincipal == 1) {

  		for (int i = 0; i < 30; i++) {

  			if (dados[i][0] == null) {

  				validaNome = false;
  			
  				while (validaNome == false) {

  					nome = JOptionPane.showInputDialog("Qual o nome do aluno?");

  					if (contPessoas > 0) {
  						
  						for (int i2 = i - 1; i2 == 0; i2--) {

  							if (nome.equals(dados[i2][0])) {

  								JOptionPane.showMessageDialog(null, "Nome repetido.");
  								
  								validaNome = false;

  								break;

  							} else {

  								validaNome = true;

  							}

  						}
  						
  					}else{
  						validaNome = true;
  					}
  					
  					if(validaNome == true){
  						dados[i][0] = nome;
  					}
  					

  				}

  				dados[i][1] = (String) JOptionPane.showInputDialog(null, "Qual é o seu sexo?", "",
  						JOptionPane.PLAIN_MESSAGE, null, sexo, "");

  				if (dados[i][1].equals("Homem")) {
  					homem++;
  				} else {
  					mulher++;
  				}

  				try {
  					validaNota1 = false;
  					while (validaNota1 == false) {
  						nota1 = Double.parseDouble(JOptionPane.showInputDialog("Qual é a primeira nota?"));
  						if ((nota1 >= 0) && (nota1 <= 10)) {
  							validaNota1 = true;
  						}else{
  							JOptionPane.showMessageDialog(null, "Nota inválida.");
  						}
  					}
  					validaNota2 = false;
  					while (validaNota2 == false) {
  						nota2 = Double.parseDouble(JOptionPane.showInputDialog("Qual é a segunda nota?"));
  						if ((nota2 >= 0) && (nota2 <= 10)) {
  							validaNota2 = true;
  						}else{
  							JOptionPane.showMessageDialog(null, "Nota inválida.");
  						}
  					}
  					validaNota3 = false;
  					while (validaNota3 == false) {
  						nota3 = Double.parseDouble(JOptionPane.showInputDialog("Qual a terceira nota?"));
  						if ((nota3 >= 0) && (nota3 <= 10)) {
  							validaNota3 = true;
  						}else{
  							JOptionPane.showMessageDialog(null, "Nota inválida.");
  						}
  					}
  				} catch (Exception e) {
  					JOptionPane.showMessageDialog(null, "Informação inválida.");
  				}

  				media = (nota1 + nota2 + nota3) / 3;

  				dados[i][2] = String.valueOf(String.format("%.2f", media));

  				if (media >= 7) {
  					dados[i][3] = "Aprovado!";
  				} else if (media >= 5) {
  					dados[i][3] = "Em exame.";
  				} else {
  					dados[i][3] = "Reprovado.";
  				}
  				
  				contPessoas++;

  				break;

  			}

  		}

  	} else if (menuPrincipal == 2) {

  	}

  }

}

}

se for maior q zero, ele inicia… seu contPessoas esta inicilizado com zero
entao ele nao vai ser maior

Então, eu coloquei um else para fazer a validação caso ele não seja maior que 0.
Deste modo, o primeiro cadastro dá certo.

No segundo cadastro, ele pega tudo normal também, inclusive entra nesse if do “contPessoas > 0” e se colocar um nome repetido, ele não permite. O segundo cadastro efetua tudo normalmente.

O terceiro, eu não estou enxergando por qual motivo, ele fica pedindo o nome infinitamente e preciso interromper o programa.