none
Aplicação neste caso simples do switch case. RRS feed

  • Pergunta

  • Alguem pode me socorrer?

    Pessoal,  não estou conseguindo voltar do while e entrar em um switch.

    O problema é essa minha varivável m.

    Código bem simples...já dá erro no primeiro case ("1")

     int m;
    
                bool numeroMolas = true;
    
                while (numeroMolas)
                {
                    Console.WriteLine("");
                    Console.Write("ESCREVA A QUANTIDADE DE MOLAS DA ESTRUTURA: ");
    
                    m = int.Parse(Console.ReadLine());
    
                    Console.WriteLine("");
    
                    if (m > 5)
                    {
    
                        Console.Write("QUANTIDADE MÁXIMA DE MOLAS DO PROGRAMA = 5   ");
    
    
                    }
    
                    else
                    {
                        //Se for um valor menor ou igual a 5
                        numeroMolas = false;
                    }
                }
    
    
                switch (numeroMolas)
                {
                    case ("1"):
                        Console.Write("Escreva a rigidez da mola 1: ");
                        double k1; k1 = Convert.ToDouble(Console.ReadLine());

    quinta-feira, 21 de fevereiro de 2013 21:34

Respostas

  • Daniel,

    A variável m é do tipo int, e no switch você utiliza o valor "1" (entre aspas) que é uma string.

    Tente isso:

    switch (m)
    {
       case (1):
          Console.Write("Escreva a rigidez da mola 1: ");
          double k1; 
          k1 = Convert.ToDouble(Console.ReadLine());
    }


    Carlos Eduardo Ferreira

    quinta-feira, 21 de fevereiro de 2013 22:44
  • Bom @Daniel Vamos lá...

    Vc passa um int para o switch e no case vc trata uma string ("1")....

    seu case deve ser tradado da seguinte forma:

            

    switch (m) { case 1: Console.Write("Escreva a rigidez da mola 1: "); double k1; k1 = Convert.ToDouble(Console.ReadLine());
    }


    "A mente que se abre para uma nova idéia, jamais voltará a seu tamanho original".


    quinta-feira, 21 de fevereiro de 2013 22:51
  • Sim, eu postei o código errado. Era pra ter colocado a variável m mesmo. Todavia o erro é o mesmo. Eu to fazendo agora e cheguei até ai, nao tenho o resto. Mesmo colocando o m, esse case 1 não aceita.

    Diz assim o erro:

    Impossível converter spring to int. O switch é apenas para variáveis strings??

    Olá.

    Como já avisaram você está passando um inteiro no Switch() e fazendo uma condição String. 

    Neste caso, você tem duas alternativas: 

    Recomendado:

    switch (m)
    {
    case(1)
    /// ... Condição um
    case(2)
    /// ... Condição dois 
    case(3) Condição três
    }

    Alternativo (apenas para aprendizagem, não utilize dessa forma neste caso):

    switch (m.ToString())
    {
    case("1")
    /// ... Condição um
    case("2")
    /// ... Condição dois 
    case("3") Condição três
    }

    Repare que na primeira forma passei um inteiro e fiz condições PARA INTEIROS, e na segunda linha passei um inteiro, fiz uma conversão para string e depois passei condições string. 

    Essa era sua dúvida? Se ajudou, marque as respostas certas, por favor.

    Se a resposta foi útil, não deixe de clicar na setinha verde. Alguma ajuda neste tópico te levou a solução do problema? Então proponha como resposta para o tópico ser melhor identificado.


    sexta-feira, 22 de fevereiro de 2013 01:53
  • Cara, posta o resto do código,

    você está colocando no switch  a sua variavel booleana numeroMolas

    e ta colocando no case o numero 1,

    Tipo se seu booleano valer 1 faça isso, o que não vai acontecer... talvez isso resolva

    switch (m){
    case(1)
    //seu código
    }

    e não esqueça do case default , acho que isso resolve.

    Boa sorte e qualquer coisa posta aqui ;D


    • Editado Ruan Caruzzo quinta-feira, 21 de fevereiro de 2013 21:41
    • Sugerido como Resposta Ruan Caruzzo quinta-feira, 21 de fevereiro de 2013 23:19
    • Marcado como Resposta Levi DomingosModerator sexta-feira, 22 de fevereiro de 2013 19:28
    quinta-feira, 21 de fevereiro de 2013 21:40
  • Você olhou o código que eu havia te mandado?

    Case(1): // sem aspas

    e você fará cases para todos os casos possiveis?

    Você pode também usar um 

    default:

    //Seu código

    Para caso nenhum deles sejam executados, aí o default será :

    Espero ter ajudado,

    Qualquer dúvida, posta aê

    quinta-feira, 21 de fevereiro de 2013 23:09
  • Realmente resolvi o problema tirando as "aspas" e assim corrigiu o tipo de variável.

    Todavia ele dava que a variável m não estava declarada. Então tive que jogar o switch para dentro do while. Achei estranho mas só consegui assim:

    int m;
                bool numeroMolas = true;
                while (numeroMolas)
                {
                    Console.WriteLine("");
                    Console.Write("ESCREVA A QUANTIDADE DE MOLAS DA ESTRUTURA: ");
                    m = int.Parse(Console.ReadLine());
                    Console.WriteLine("");
                    if (m > 5)
                    {
                        Console.Write("QUANTIDADE MÁXIMA DE MOLAS DO PROGRAMA = 5   ");
                    }
                    else
                    {
                        //Se for um valor menor ou igual a 5
                        numeroMolas = false;
                    }
                    switch (m)
                    {
                        case (1):
                            Console.Write("Escreva a rigidez da mola 1: ");
                            double k1; k1 = Convert.ToDouble(Console.ReadLine());
                            break; //continua o código...

    sexta-feira, 22 de fevereiro de 2013 17:53

Todas as Respostas

  • Cara, posta o resto do código,

    você está colocando no switch  a sua variavel booleana numeroMolas

    e ta colocando no case o numero 1,

    Tipo se seu booleano valer 1 faça isso, o que não vai acontecer... talvez isso resolva

    switch (m){
    case(1)
    //seu código
    }

    e não esqueça do case default , acho que isso resolve.

    Boa sorte e qualquer coisa posta aqui ;D


    • Editado Ruan Caruzzo quinta-feira, 21 de fevereiro de 2013 21:41
    • Sugerido como Resposta Ruan Caruzzo quinta-feira, 21 de fevereiro de 2013 23:19
    • Marcado como Resposta Levi DomingosModerator sexta-feira, 22 de fevereiro de 2013 19:28
    quinta-feira, 21 de fevereiro de 2013 21:40
  • Cara, posta o resto do código,

    você está colocando no switch  a sua variavel booleana numeroMolas

    e ta colocando no case o numero 1,

    Tipo se seu booleano valer 1 faça isso, o que não vai acontecer... talvez isso resolva

    switch (m){
    case(1)
    //seu código
    }

    e não esqueça do case default , acho que isso resolve.

    Boa sorte e qualquer coisa posta aqui ;D


    Sim, eu postei o código errado. Era pra ter colocado a variável m mesmo. Todavia o erro é o mesmo. Eu to fazendo agora e cheguei até ai, nao tenho o resto. Mesmo colocando o m, esse case 1 não aceita.

    Diz assim o erro:

    Impossível converter spring to int. O switch é apenas para variáveis strings??

    quinta-feira, 21 de fevereiro de 2013 22:16
  • Alguem pode me socorrer?

    Pessoal,  não estou conseguindo voltar do while e entrar em um switch.

    O problema é essa minha varivável m.

    Código bem simples...já dá erro no primeiro case ("1")

     int m;
    
                bool numeroMolas = true;
    
                while (numeroMolas)
                {
                    Console.WriteLine("");
                    Console.Write("ESCREVA A QUANTIDADE DE MOLAS DA ESTRUTURA: ");
    
                    m = int.Parse(Console.ReadLine());
    
                    Console.WriteLine("");
    
                    if (m > 5)
                    {
    
                        Console.Write("QUANTIDADE MÁXIMA DE MOLAS DO PROGRAMA = 5   ");
    
    
                    }
    
                    else
                    {
                        //Se for um valor menor ou igual a 5
                        numeroMolas = false;
                    }
                }
    
    
                switch (m)
                {
                    case ("1"):
                        Console.Write("Escreva a rigidez da mola 1: ");
                        double k1; k1 = Convert.ToDouble(Console.ReadLine());


    quinta-feira, 21 de fevereiro de 2013 22:17
  • Daniel,

    A variável m é do tipo int, e no switch você utiliza o valor "1" (entre aspas) que é uma string.

    Tente isso:

    switch (m)
    {
       case (1):
          Console.Write("Escreva a rigidez da mola 1: ");
          double k1; 
          k1 = Convert.ToDouble(Console.ReadLine());
    }


    Carlos Eduardo Ferreira

    quinta-feira, 21 de fevereiro de 2013 22:44
  • Bom @Daniel Vamos lá...

    Vc passa um int para o switch e no case vc trata uma string ("1")....

    seu case deve ser tradado da seguinte forma:

            

    switch (m) { case 1: Console.Write("Escreva a rigidez da mola 1: "); double k1; k1 = Convert.ToDouble(Console.ReadLine());
    }


    "A mente que se abre para uma nova idéia, jamais voltará a seu tamanho original".


    quinta-feira, 21 de fevereiro de 2013 22:51
  • Você olhou o código que eu havia te mandado?

    Case(1): // sem aspas

    e você fará cases para todos os casos possiveis?

    Você pode também usar um 

    default:

    //Seu código

    Para caso nenhum deles sejam executados, aí o default será :

    Espero ter ajudado,

    Qualquer dúvida, posta aê

    quinta-feira, 21 de fevereiro de 2013 23:09
  • Sim, eu postei o código errado. Era pra ter colocado a variável m mesmo. Todavia o erro é o mesmo. Eu to fazendo agora e cheguei até ai, nao tenho o resto. Mesmo colocando o m, esse case 1 não aceita.

    Diz assim o erro:

    Impossível converter spring to int. O switch é apenas para variáveis strings??

    Olá.

    Como já avisaram você está passando um inteiro no Switch() e fazendo uma condição String. 

    Neste caso, você tem duas alternativas: 

    Recomendado:

    switch (m)
    {
    case(1)
    /// ... Condição um
    case(2)
    /// ... Condição dois 
    case(3) Condição três
    }

    Alternativo (apenas para aprendizagem, não utilize dessa forma neste caso):

    switch (m.ToString())
    {
    case("1")
    /// ... Condição um
    case("2")
    /// ... Condição dois 
    case("3") Condição três
    }

    Repare que na primeira forma passei um inteiro e fiz condições PARA INTEIROS, e na segunda linha passei um inteiro, fiz uma conversão para string e depois passei condições string. 

    Essa era sua dúvida? Se ajudou, marque as respostas certas, por favor.

    Se a resposta foi útil, não deixe de clicar na setinha verde. Alguma ajuda neste tópico te levou a solução do problema? Então proponha como resposta para o tópico ser melhor identificado.


    sexta-feira, 22 de fevereiro de 2013 01:53
  • Realmente resolvi o problema tirando as "aspas" e assim corrigiu o tipo de variável.

    Todavia ele dava que a variável m não estava declarada. Então tive que jogar o switch para dentro do while. Achei estranho mas só consegui assim:

    int m;
                bool numeroMolas = true;
                while (numeroMolas)
                {
                    Console.WriteLine("");
                    Console.Write("ESCREVA A QUANTIDADE DE MOLAS DA ESTRUTURA: ");
                    m = int.Parse(Console.ReadLine());
                    Console.WriteLine("");
                    if (m > 5)
                    {
                        Console.Write("QUANTIDADE MÁXIMA DE MOLAS DO PROGRAMA = 5   ");
                    }
                    else
                    {
                        //Se for um valor menor ou igual a 5
                        numeroMolas = false;
                    }
                    switch (m)
                    {
                        case (1):
                            Console.Write("Escreva a rigidez da mola 1: ");
                            double k1; k1 = Convert.ToDouble(Console.ReadLine());
                            break; //continua o código...

    sexta-feira, 22 de fevereiro de 2013 17:53