Array junto com for

7 respostas
hackum

Olá,

Se possível, poderiam me explicar o seguinte código?

//BarChart.java
//Programa de impressão de gráfico de barras.
public class BarChart {
	
	public static void main(String args[])
	{
		int array[] = {0,0,0,0,0,0,1,2,4,2,1};
		
		System.out.println("Grade de distribuição: ");
		
		//para cada elemento de array, gera a saída de uma barra de gráfico
		for(int counter=0; counter<array.length;counter++)
		{
			//gera saída do rótulo de barra("00-09:",...,"90-99:","100:")
			if(counter == 10)
				System.out.printf("%5d:", 100);
			else
				System.out.printf("%02d-%02d:",counter * 10, counter * 10 + 9);
			
			//imprime a barra de asteristicos
			for(int stars = 0; stars < array[counter]; stars++)
				System.out.print("*");
			
		}
		
	}	

}

Obrigado!

7 Respostas

Andre_Rosa

Qual parte do código especificamente você não entendeu?

hackum

O array é iniciado nessa linha:

int array[] = {0,0,0,0,0,0,1,2,4,2,1};

Como é gerado isso?

Grade de distribuição:
00-09:
10-19:
20-29:
30-39:
40-49:
50-59:
60-69:
*70-79:
**80-89:
***90-99:
** 100:

De onde é tirado esses 00-09,10-19, 20-29: etc.
E como imprime asteristicos(*) apenas no 70,80 e etc ?
O código está um pouco confuso.

Até mais…

Andre_Rosa

Repare que você possui 11 elementos no vetor. O seu for() percorre de 0 à quantidade de elementos no vetor, portanto o laço percorrerá 11 vezes. No primeiro loop, onde o contador têm como valor 0, o seu valor inicial, ele faz o seguinte cálculo aritmético:

System.out.printf("%02d-%02d:",counter * 10, counter * 10 + 9);

vamos realizar tal proeza detalhadamente:

counter (0) * 10 = 0. counter * 10 + 9 = 9

Saída: 0-9

Depois:

counter (1) * 10 = 10. counter * 10 + 9 = 19

Saída: 10-19

e por aí sucessivamente.

hackum

Se counter for == 10, ele realiza a conta aritmética. De onde vai ser retirado esse 10 ?

Andre_Rosa

hackum:
Se counter for == 10, ele realiza a conta aritmética. De onde vai ser retirado esse 10 ?

Errado! Se counter for diferente de 10 ele realizará os cálculos.

if(counter == 10) //Se for igual a 10 System.out.printf("%5d:", 100); else // Se não for (igual a 10) System.out.printf("%02d-%02d:",counter * 10, counter * 10 + 9);

Quanto o contador chega à 10, ele imprime 100, como você pode ver na saída formatada.

hackum

Olá André!

Obrigado, consigui compreender!
Mas, e a questão do asteristico ?

ViniGodoy

Não tem problema nenhum com o asterístico, até porque eles não existem. O que existem são asteriscos.

E o que os desenha é esse for aqui:

for(int stars = 0; stars < array[counter]; stars++) System.out.print("*");

Note que ele se baseia no índice do array que você declarou ali em cima para dizer o número de estrelas a serem desenhadas.

int array[] = {0,0,0,0,0,0,1,2,4,2,1};

E que o valor de counter muda a cada linha da grade de distribuição que você escreve.

Criado 13 de maio de 2011
Ultima resposta 14 de mai. de 2011
Respostas 7
Participantes 3