Duvida em switch!

6 respostas
C

Ola pessoal, vi um apple no livro do deitel, mas ele ta com erro. Tipo c eu digitar algum valor diferente de 1, 2 ou 3 ele da pau.
Sera q alguem podia me dizer o q estava acontecendo??
Ai vai o codigo:

// Applet que desenha várias formas geométricas

import javax.swing.*;
import java.awt.Graphics;

public class TestaSwitch extends JApplet {
   int escolha;
   
   public void init() {
      String entrada;
      
      entrada = JOptionPane.showInputDialog(
         " Digite 1 para desenhar LINHAS\n " +
         " Digite 2 para desenhar QUADRADOS\n " +
         " Digite 3 para desenhar CÍRCULOS\n " );
         
      escolha = Integer.parseInt( entrada );
   }
   
   public void paint( Graphics g ) {
      for( int i = 0; i < 10; i++ ) {
         switch( escolha ) {
            case 1:
               g.drawLine( 10, 10, 250, i * 10 );
               break;
            case 2:
               g.drawRect( 10 + i * 10, 10 + i * 10,
                           50 + i * 10, 50 + i * 10 );
               break;
            case 3:
               g.drawOval( 10 + i * 10, 10 + i * 10,
                           50 + i * 10, 50 + i * 10 );
               break;
            default:
               JOptionPane.showMessageDialog( null,
                  " Código Inválido " );
         }
      }
   }
}

Abracao e te +

6 Respostas

J

Oi

Rafael, bom se tu entrar com um valor inteiro, ele vai dar a mensagem de erro que está na DEFAULT do case, mas se tu entrar com outro valor que não seja inteiro, ele dará uma exeção na hora de converter com o parseInt.

T+

C

O meu problema e se eu digitar um numero inteiro diferente de 1, 2 ou 3 ele entra no default mas fica em um looping infinito, pq faz isso. Tente rodar o codigo!

Abracao e te+

D

ta faltando um break; depois da instrução do case default…
nao sei se é isso mas… tenta ae! :wink:

M

não precisa de break depois do default ai, o default ta sendo a ultima instrução, … e, oq ta acontecendo no teu código é q, se tu colocar um numero diferente do q tu quer, será chamado um showMessageDialog() 10x!

B

Oi Ratinho! Eu testei…

Nao sei se vai agradar, mas há uma soluçao pra nao fikar em loop infinito.

Tenta acrescentar ao switch:

case 4:break;

case 5:break;

case 6:break;

case 7:break;

case 8:break;

case 9:break;

P.S: Eventualmente podera meter uma mensagem tipo: “Inteiro invalido”

Espero ter ajudado!

Abraço

C

Obrigando pessoal pela dica, e q so fiquei confuso sobre o codigo, pois esta no livro da Deitel, n podia ter tantos erros assim. Isso q me chamou + atencao. o Matheus é isso mesmo q ta acontecendo, agora eu reparei por causa do for nao é?? E o contador q faz isso!! rsrs
Obrigado a tdos por terem me ajudado a exclarecer a minha duvida. Pois qdo vejo um codigo testo ele muitas vezes pra achar tds estes possiveis!!!

Abracao e te +

Criado 16 de maio de 2004
Ultima resposta 17 de mai. de 2004
Respostas 6
Participantes 5