4
respostas

Poblema com o laço FOR

Quando executo esse codigo no Promet eu recebo o seguinte erro

Warning already initialized constant Acertou Warning : previous definition of Acertou was here Warning already initialized Numero_maior Warning : previous definition of Numero_maior was here

puts ("           Bem Vindo ao Jogo de adivinhar O Número           ")
puts ("\n\n\n") 
puts ("Digite o nome do jogador !!!")
nome = gets
puts ("\n\n")
puts ("Bem Vindo ao jogo , " + nome )
puts ("\n")
puts ("Escolhendo um número .....")
resposta = 6
puts ("\n")
puts ("Digite um número de 0 a 10 ")
puts ("\n")

 numero_tentativas = 5

for tentativa in 1..numero_tentativas


    puts ("\n")
    puts("Tentativa " + tentativa.to_s + " de " + numero_tentativas.to_s)
    puts("\n")
    escolha = gets

    Acertou = resposta == escolha.to_i

    if( Acertou ) 
        puts("Parbéns , " + nome + " , você acerotu !!!")
        break
    else

        Numero_maior = escolha.to_i > resposta

        if(Numero_maior)
            puts("O número que você chutou é maior que a resposta ")
        else  
            puts ("O número que você chutou é menor que a reposta ")
        end

    end




end
4 respostas

Testei num REPL online e não deu warning.

Experimenta tirar os parênteses das condições nos if:

if Acertou
    puts("Parbéns , " + nome + " , você acerotu !!!")
    break
else

e

if Numero_maior
    puts("O número que você chutou é maior que a resposta ")
else

boa tarde Mateus, creio q o seu erro esteja na linha

Numero_maior = escolha.to_i > resposta

porque isso aqui não é uma expressão matemática.

tu esta querendo dizer que: o nuimero A é igual a B maior q C

não faz sentido isso,

se ei fosse você mudaria para que, no IF ele faça a comparação.

ficando assim

        if escolha.to_i > resposta 
            puts("O número que você chutou é maior que a resposta ")
        else  
            puts ("O número que você chutou é menor que a reposta ")
        end

    end

espero ter ajudado ;)

Acredito que o erro está nesta parte:

    if( Acertou ) 
        puts("Parbéns , " + nome + " , você acerotu !!!")
        break
    else

        Numero_maior = escolha.to_i > resposta

        if(Numero_maior)
            puts("O número que você chutou é maior que a resposta ")
        else  
            puts ("O número que você chutou é menor que a reposta ")
        end

    end

Você pode tirar o parenteses do if. Você também não retornou false no else e não escreveu "return break". Quando eu estava fazendo esse exercício aqui, só funcionou quando escrevi return break dentro do if acertou

Espero ter ajudado, abraços!

E ai Mateus, Beleza?

Não sei se você já solucionou o problema, mas o que pelo que eu entendi é que por você esta criando variáveis com o a primeira letra maiúscula("Acertou" e "Numero_maior" ) o ruby trata como se elas fossem variáveis estáticas, por isso fica aparecendo o warning.

Tente executar seu código dessa forma:

for tentativa in 1..numero_tentativas


    puts ("\n")
    puts("Tentativa " + tentativa.to_s + " de " + numero_tentativas.to_s)
    puts("\n")
    escolha = gets

    acertou = resposta == escolha.to_i

    if( acertou ) 
        puts("Parbéns , " + nome + " , você acerotu !!!")
        break
    else

        numero_maior = escolha.to_i > resposta

        if(numero_maior)
            puts("O número que você chutou é maior que a resposta ")
        else  
            puts ("O número que você chutou é menor que a reposta ")
        end

    end

end

Espero ter ajudado :D

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software