Problema com algoritmo o laço do while não está sendo executado corretamente

Galera é o seguinte estou com problema no meu algoritmo e preciso de ajuda.
Estou estudando lógica de programação em 2 linguagens Pascal e Java, o exercício proposto foi o este:

Faça um algoritmo que leia o numero inicial e número final, sendo que o número final não pode ser menor que o inicial(caso o usuário digite o final menor que o inicial informar o erro). Entre o número inicial e número final mostrar o usuário quantos números são pares e quantos são impares.

Temos que realizar o exercício usando laços de repetição. No Pascal seguindo esse lógica, é claro com algumas diferenças típica da linguagem como por exemplo em vez de chaves para abrir e fechar um bloco de comando, utiliza o begin e end, e entre outras. Rodou perfeitamente sem nenhuma falha.
Mas, no Java o programa ta vazando, se eu digito o Valor inicial menor que o Valor final, em vez de ele ir direto ao fim do laço enquanto e mostrar para o usuário a mensagem final usando o Swing
JOptionPane.showMessageDialog(null,“Ente o número “+num_inicial+” e o número “+num_final+” existem “+pares+” e “+impares+” impares”);

A tela simplesmente fica preta sem retorno nenhum. Já se o usuário digitar o valor final menor que o inicial, erra para entrar no laço do while e até que o usuário digita-se o valor final maior que o inicial a mensagem de erro continuaria aparecendo.

do
{

       if (num_final < num_inicial) //condição do bloco
       {
         num_final= Integer.parseInt(JOptionPane.showInputDialog("Valor inválido! Digite um número maior que o valor inicial: "));
    
        }
}
 while(num_final >= num_inicial); 

E depois qndo digita-se o valor final maior ou igual ao valor inicial executaria o laço while. Atualmente basta eu digitar uma vez no laço do while o valor final sendo menor ou maior que surge outro erro. Aparece a mensagem informando Entre o número “x” e número “y” existem 0 pares e 0 impares.

Andei pesquisando na net e olhei bem o algoritmo do meu professor e não encontrei o erro, está praticamente igual uma diferença ou outra, mas, que não afeta o resultado do algoritmo.
Oq pode há de errado com o meu algoritmo. Alguém pode me ajudar? Agradeço! :cry:

public class exc_35_enquanto_e_repita_pares_impares {
public static void main(String args[]){
int num_inicial, num_final, pares, impares, i;
pares=0;
impares=0;
i=0;
num_final=0;
num_inicial= Integer.parseInt(JOptionPane.showInputDialog("Digite o valor inicial: "));
i= num_inicial;
num_final= Integer.parseInt(JOptionPane.showInputDialog("Digite o valor final: "));
do
{

       if (num_final < num_inicial) //condição do bloco
       {
         num_final= Integer.parseInt(JOptionPane.showInputDialog("Valor inválido! Digite um número maior que o valor inicial: "));
    
        }
}
 while(num_final >= num_inicial);  //até que o valor seja o oposto da condição do bloco
 
 while (i <= num_final)
 {
 
      if (i % 2 == 0)
         pares=pares+1;  //realiza a contagem dos números pares
      else
      {
         impares=impares+1; //realiza a contagem dos números impares
  }
      i=i+1;

}
JOptionPane.showMessageDialog(null,“Ente o número “+num_inicial+” e o número “+num_final+” existem “+pares+” e “+impares+” impares”);

}
}

Já consegui arrumar o erro. Na realidade há uma pequena diferença entre o laço de repetição Repeat do pascal e o laço Do While do java, as condições são diferentes.
Primeiro no Pascal o comando do laço Repeat será executado “Até que”= until a condição seja oposta a outra.
No java no entanto o comando será executado “Enquanto” = while a condição permanecer a mesma.
Agora mostrarei o código já realizada a devida alteração:
do
{

       if (num_final < num_inicial) //condição do bloco
       {
         num_final= Integer.parseInt(JOptionPane.showInputDialog("Valor inválido! Digite um número maior que o valor inicial " +num_inicial+": "));
    
        }
}
 while(num_final < num_inicial);  /*Enquanto permanecer  mesmo valor da condição do bloco, 
 					                    será executado o laço. */

Algoritmo executando o laço Do While corretamente:

public class exc_35_enquanto_e_repita_pares_impares {
public static void main(String args[]){
int num_inicial, num_final, pares, impares, i;
pares=0;
impares=0;
i=0;
num_final=0;
num_inicial= Integer.parseInt(JOptionPane.showInputDialog("Digite o valor inicial: "));
i= num_inicial;
num_final= Integer.parseInt(JOptionPane.showInputDialog("Digite o valor final: "));
do
{

       if (num_final < num_inicial) //condição do bloco
       {
         num_final= Integer.parseInt(JOptionPane.showInputDialog("Valor inválido! Digite um número maior que o valor inicial " +num_inicial+": "));
    
        }
}
 while(num_final < num_inicial);  /*Enquanto permanecer  mesmo valor da condição do bloco, 
 					                    será executado o laço. */
 
 while (i <= num_final)
 {
 
      if (i % 2 == 0)
         pares=pares+1;  //realiza a contagem dos números pares
      else
      {
         impares=impares+1; //realiza a contagem dos números impares
  }
      i=i+1;

}
JOptionPane.showMessageDialog(null,“Ente o número “+num_inicial+” e o número “+num_final+” existem “+pares+” e “+impares+” impares”);

}
}