Programa Java com algumas caixas de diálogos não aparecendo

Como é para funcionar o programa:
1- pedir o nome do usuário com a seguinte pergunta: Qual é o seu nome:

2- pedir para o usuário confirmar se o nome que está na tela está correto, fazendo a seguinte pergunta: Seu nome é nome digitado.

3- Se o usuário clicar no botão “YES”, executa um if com a mensagem: Bem-vindo nome digitado à Programação Java!

4- Se o usuário clicar no botão “NO”, executa um if pedindo para que o usuário digite novamente seu nome. Mostrando na tela seu nome, dessa vez o nome correto do usuário.

Obs.: Os comandos ifs não estão sendo executados.

Código do programa:

  // Obtendo a entrada de usuário a partir de um diálogo.

  import javax.swing.JOptionPane;

  public class NomeDialogo
  {
      public static void main(String[] args)
      {
	      // variáveis
	      String nome1,
		         nome2,
		         confirmacao,
		         mensagem1,
	             mensagem2;
	
   	      // pede para o usuário inserir seu nome
	      nome1 = JOptionPane.showInputDialog("Qual é o seu nome: ");
	
	      // pergunta para o usuário se o seu nome é realmente o digitado
	      confirmacao = String.format("Seu nome é %s?", nome1);
	      JOptionPane.showConfirmDialog(null, confirmacao);
	
	      if (confirmacao == "YES")
   	      {
		      // cria a mensagem
		      mensagem1 = String.format("Bem-vindo %s à Programação Java!", nome1);
	
		      //exibe a mensagem para cumprimentar o usuário pelo nome
		     JOptionPane.showMessageDialog(null, mensagem1);
	      }
	
	      if (confirmacao == "NO")
	      {
		      // pede para o usuário inserir seu nome novamente
		      nome2 = JOptionPane.showInputDialog("Digite novamente seu nome: ");
		
		      // cria a mensagem
		      mensagem2 = String.format("Bem-vindo %s à Programação Java!", nome2);
	
		      //exibe a mensagem para cumprimentar o usuário pelo nome
		      JOptionPane.showMessageDialog(null, mensagem2);
	      }
      } // fim do método main
  } // fim da classe NomeDialogo

Não compare String usando ==. Em vez disso, use o método equals:

if ("YES".equals(confirmarcao)) {

Ao usar o ==, vc estará comparando a referência da String (que é um objeto e não um tipo primitivo). Com o equals será comparado o conteúdo da String.

Além do que o Lucas apontou, vc precisa também guardar o valor retornado pelo método showConfirmDialog().

É ele que vai te dizer a resposta que o usuário deu. 0 para “yes”, 1 para “no” e 2 para “cancel”. Então vc faria algo assim:

int resposta = JOptionPane.showConfirmDialog(null, confirmacao);

if (resposta == 0) {
  // Sim
} else if (resposta == 1) {
  // Não
} else {
  // Usuário clicou em Cancel(2) ou apertou a tecla ESC(-1)
}

Daria para simplificar um pouco seu código usando while, olha só:

import javax.swing.JOptionPane;

public class App {
  public static void main(String... args) {
    String nome = JOptionPane.showInputDialog("Qual é o seu nome?");

    while (true) {
      String mensagem = "Seu nome é " + nome + "?";

      int resposta = JOptionPane.showConfirmDialog(null, mensagem, "Confirmação", JOptionPane.YES_NO_OPTION);

      if (resposta == 0) {
        JOptionPane.showMessageDialog(null, "Bem-vindo, " + nome + ", à Programação Java!");
        break;
      } else {
        nome = JOptionPane.showInputDialog("Digite novamente seu nome: ");
      }
    }
  }
}
1 curtida

Fiz a seguinte modificação:
// Obtendo a entrada de usuário a partir de um diálogo.

      import javax.swing.JOptionPane;

      public class NomeDialogo
      {
          public static void main(String[] args)
          {
	          // variáveis
	          String nome1,
		             nome2,
		             confirmacao,
		             mensagem1,
	                 mensagem2;
	
               // pede para o usuário inserir seu nome
               nome1 = JOptionPane.showInputDialog("Qual é o seu nome: ");
	
	          // pergunta para o usuário se o seu nome é realmente o digitado
	          confirmacao = String.format("Seu nome é %s?", nome1);
	          JOptionPane.showConfirmDialog(null, confirmacao);
	
	          if ("YES".equals(confirmacao))
	          {
		          // cria a mensagem
		          mensagem1 = String.format("Bem-vindo %s à Programação Java!", nome1);
	
		          //exibe a mensagem para cumprimentar o usuário pelo nome
		          JOptionPane.showMessageDialog(null, mensagem1);
	          }
	
	          if ("NO".equals(confirmacao))
	          {
		          // pede para o usuário inserir seu nome novamente
		          nome2 = JOptionPane.showInputDialog("Digite novamente seu nome: ");
		
	          	  // cria a mensagem
		          mensagem2 = String.format("Bem-vindo %s à Programação Java!", nome2);
	
		          //exibe a mensagem para cumprimentar o usuário pelo nome
		          JOptionPane.showMessageDialog(null, mensagem2);
	          }
          } // fim do método main
      } // fim da classe NomeDialogo

Obs.: O programa ainda não executa os comandos ifs.

@wldomiciano eu gostaria de manter os comandos ifs, pois sou iniciante.
Aplicando a seguinte linha de comando:
int resposta = JOptionPane.showConfirmDialog(null, confirmacao);
Ainda os comandos ifs não são executados.

Posso ver como ficou o código final?

// Obtendo a entrada de usuário a partir de um diálogo.

import javax.swing.JOptionPane;

public class NomeDialogo
{
	public static void main(String[] args)
	{
		// variáveis
		String nome1,
			   nome2,
			   confirmacao,
			   mensagem1,
		       mensagem2;
	    int resposta;
		
		// pede para o usuário inserir seu nome
		nome1 = JOptionPane.showInputDialog("Qual é o seu nome: ");
		
		// pergunta para o usuário se o seu nome é realmente o digitado
		confirmacao = String.format("Seu nome é %s?", nome1);
		resposta = JOptionPane.showConfirmDialog(null, confirmacao);
		
		if ("YES".equals(confirmacao))
		{
			// cria a mensagem
			mensagem1 = String.format("Bem-vindo %s à Programação Java!", nome1);
		
			//exibe a mensagem para cumprimentar o usuário pelo nome
			JOptionPane.showMessageDialog(null, mensagem1);
		}
		
		if ("NO".equals(confirmacao))
		{
			// pede para o usuário inserir seu nome novamente
			nome2 = JOptionPane.showInputDialog("Digite novamente seu nome: ");
			
			// cria a mensagem
			mensagem2 = String.format("Bem-vindo %s à Programação Java!", nome2);
		
			//exibe a mensagem para cumprimentar o usuário pelo nome
			JOptionPane.showMessageDialog(null, mensagem2);
		}
	} // fim do método main
} // fim da classe NomeDialogo

Moço, lê minha resposta, eu sugeri mudar os ifs para isso:

int resposta = JOptionPane.showConfirmDialog(null, confirmacao);

if (resposta == 0) {
  // Sim
} else if (resposta == 1) {
  // Não
} else {
  // Usuário clicou em Cancel(2) ou apertou a tecla ESC(-1)
}

Do jeito que vc tá fazendo seus ifs nunca serão executados, pois vc está testando se confirmacao é igual a “YES” ou “NO”, só que confirmacao é igual a ““Seu nome é XXX?””

1 curtida

@wldomiciano teria uma possibilidade de usar somente os comandos ifs?

Teria sim, olha como ficaria:

import javax.swing.JOptionPane;

public class NomeDialogo {
  public static void main(String[] args) {
    String nome1,
        nome2,
        confirmacao,
        mensagem1,
        mensagem2;
    int resposta;

    nome1 = JOptionPane.showInputDialog("Qual é o seu nome: ");
    confirmacao = String.format("Seu nome é %s?", nome1);
    resposta = JOptionPane.showConfirmDialog(null, confirmacao);

    if (resposta == 0) {
      mensagem1 = String.format("Bem-vindo %s à Programação Java!", nome1);
      JOptionPane.showMessageDialog(null, mensagem1);
    }

    if (resposta == 1) {
      nome2 = JOptionPane.showInputDialog("Digite novamente seu nome: ");
      mensagem2 = String.format("Bem-vindo %s à Programação Java!", nome2);
      JOptionPane.showMessageDialog(null, mensagem2);
    }
  }
}

Do seu código original eu só removi os comentários para ficar menos poluído.

Estranho, eu tinha feito desse jeito uns instantes atrás, mas não tinha funcionada :sweat_smile:
@wldomiciano muito obrigado :pray::smile:

1 curtida