Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Bug] O meu código não funciona

Olá! Alguém poderia me ajudar a encontrar o erro do meu código e me explicar por que ele não está funcionando por favor?

var tela = document.querySelector('canvas');
var pincel = tela.getContext('2d');

pincel.fillStyle = 'lightgray';
pincel.fillRect(0, 0, 600, 400);

function desenhaRetangulo(x, y, largura, altura, cor) {
    pincel.fillStyle = cor;
    pincel.fillRect(x, y, largura, altura);
    pincel.strokeStyle = 'black';
    pincel.strokeRect(x , y, largura, altura);
}

function desenhaTexto(x, y, texto){
    pincel.font='15px Georgia';
    pincel.fillStyle='black';
    pincel.fillText(texto, x, y);
}

function desenhaGrafico(x, y, serie, cores, texto){
    desenhaTexto(x, y-10, texto); 
    var somaAlturas = 0;

    for(i= 0; i < serie.length; i++) {
        var altura = serie[i];
        desenhaRetangulo(x, y + somaAlturas, 50, altura, cores[i]);
        somaAlturas = somaAlturas + altura;
    }
}

var serie2015 = [50, 25, 20, 5];
var serie2016 = [65, 20, 13, 2];
var cores = ['blue', 'green', 'yellow', 'red'];

desenhaGrafico(50, 50, serie2015, cores[i], '2015');
4 respostas
solução!

Oi Brenda, tudo bem?

Ao testar o seu código, a mensagem de erro que aparece no console do navegador diz que a variável "i" não foi definida. Isso ocorre devido ao uso do "i" dentro do colchetes no parâmetro cores, dentro da função desenhaGráfico(x, y, serie, cores, texto):

desenhaGrafico(50, 50, serie2015, cores[i], '2015');

Podemos solucionar este problema removendo o colchete juntamente com a variável "i", de modo que o resultado seria o seguinte:

desenhaGrafico(50, 50, serie2015, cores, '2015');

Outros detalhes que percebi é que você definiu a variável "i" na estrutura de repetição for da seguinte maneira:

for(i= 0; i < serie.length; i++) {
        var altura = serie[i];
        desenhaRetangulo(x, y + somaAlturas, 50, altura, cores[i]);
        somaAlturas = somaAlturas + altura;
    }

Contudo para que o Javascript saiba que o "i" é uma variável precisamos colocar varantes de definir i=0, de modo que teríamos o seguinte:

for(var i= 0; i < serie.length; i++) {
        var altura = serie[i];
        desenhaRetangulo(x, y + somaAlturas, 50, altura, cores[i]);
        somaAlturas = somaAlturas + altura;
    }

Um último ponto que gostaria de comentar é que apenas o gráfico de 2015 foi plotado pela função desenhaGráfico(x, y, serie, cores, texto), caso queira plotar o gráfico do ano de 2016, podemos utilizar o seguinte comando:

desenhaGrafico(150, 50,serie2016, cores, '2016');

Espero ter ajudado. Caso tenha dúvidas, estarei à disposição.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Nossa ajudou muito. Muito obrigada mesmo. Só uma dúvida: para executar uma array em uma função não é necessário colocar o índice entre colchetes (como eu havia feito)?

Oi Brenda, como vai?

Exatamente, para executar uma função que recebe uma array como argumento, você precisa passar a própria array como argumento para a função. Isso é feito sem colchetes, apenas colocando o nome da variável da array dentro dos parênteses da função, como foi feito no código em questão, o parâmetro cor recebe apenas o nome da variável que contém a lista de cores.

desenhaGrafico(50, 50, serie2015, cores, '2015');

Os colchetes, [ ], são usados para acessar um elemento específico da array. Então, se você deseja acessar um elemento específico da array dentro da função, precisa fazer uso dos colchetes. Por exemplo, caso eu queira acessar apenas a cor "verde" da lista de cores e mostrá-la no console do navegador, poderíamos fazer da seguinte forma:

var cores = ['blue', 'green', 'yellow', 'red'];

var segundoElemento = cores[1];
console.log(segundoElemento) // imprime no console a palavra "green"

Espero ter ajudado. Caso tenha outras dúvidas, estarei à disposição!

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Entendi agora. Muito obrigada ;)

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