Treinando Array - LP1

Olá pessoal :slight_smile: , gostei mto desse site/forum, mto bom mesmo ^^ começando a voltar a frequentar, pois estou estudando java e estou gostando mto! agora sou java e php hehe! ^^

olha tem um código ae q to comentando para aula, só q tem um trecho q não entendi mto bem, gostaria q me desse uma ajuda!

media = media + notas[i][j]; // ? como q ele ta fazendo a soma disso? supondo q J tem os elementos 7 e 8
ele faz o 1º loop
e guarda media = 7
2º loop
guarda media = 7 + 8(posicao 1 da int j)?

com os comentários fica melhor? qql coisa eu tiro soh pra vcs analisarem, minha duvida eh soh na soma das notas

import java.util.Scanner; //importa a biblioteca para usar o Scanner

public class SlideQuatroEx2 //Cria a classe (pois java é OO)
{

	public static void main(String []args) //Cria a main (Java é OO 2)
	{
		Scanner l = new Scanner(System.in); //declara o construtor Scanner
		
		double notas[][];
		/*cria um Array(vetor) bidimensional (dinamico)
		1º array pra disciplina e 2º array pra notas*/
		
		notas = new double[5][]; //declara q o primeiro array tem tamanho 5 e o outro esta null, e vai ser preenchido dinamicamente no 2º For
		
		for(int i =0; i<notas.length; i++) //cria uma variavel i q soh tem acesso nesse for{ }, q percorre i = 0, de 0 até o tamanho do 1º array  notas, ou seja percorre ateh 5
		{
			//depois incrementa i = 0(depois 1, 2, 3 e 4) + 1 = 1,2,3,4,5 (isso eh soh pra entender o incremento)
			System.out.printf("Numero de avaliações da disciplina %d: ", i);//nr de avaliações na posicao 0 até 5, q eh o tamanho do 1º array
			int n = l.nextInt(); //guarda o valor do i na posicao 0 q eh a primeira passagem do for
			
			notas[i]= new double[n]; // posicao 0 guarda o nr de avaliações nesta posicao
			/* aq ex = (0)disciplina = (2) 
			o Array dinamizou-se
			aq esta sendo construindo a coluna da matriz
			sabe-se q a linha eh tamanho 5
			
			     0  1  2  3
			|0|=|n||n|
			|1|=|n||n||n|
			|2|=|n||n||n||n|
			|3|=|n||n|
			|4|=|n|n||n|
			 OBS: N (pois está NULL ainda, não tem nada dentro)
			 
			 ex: 1º array, posição 2 [(tamanho=3), pois 0 é 1], construiu a coluna com tamanho 4(nr de avaliações)
			 que cabe 4 notas(veremos adiante).
						
			*/
			
			
		}//fim for
		
				
		
		
		for(int i = 0; i<notas.length;i++) //laço para armazenar as notas das avaliações
		{ //temos 5 disciplinas com, nr de avaliaçoes variadas, armazenada em cada posicão do array de 0 a 4
		
			System.out.print("\nNotas da discilina " + i);//na pratica esse laço soh informa: Notas da disciplina 0,1,2,3,4 (qndo verdadeiro i<4) incrementa-se i
			/*informe a(s) nota(s) das disciplinas na posicão 0 até 5
			se posicao 0 tem 2 avaliaçoes, então tem 2 notas, se posicao 1 tem 3 avaliações, então tem 3 notas e assim por diante.*/
			
			//Agora é a parte do preenchimento de elementos do 2º Array
			for(int j=0; j<notas[i].length;j++) //ex: j igual a 0, se 0 < q a qtde de avaliações na posicao i, faça
			{
/*dica: i tem tamanho 5(0,1,2,3,4), entretanto, informamos no 1º for q posicao 0(disciplina) tem por exemplo 2 avaliações
  então, o laço do for(j), repete 2 vezes, ou seja, posição 0 = preenche 2 elementos(notas), se tem 2 avaliações tem 2 notas
  ex:
  1º array|0|(disciplina) = 2º array|2|(cabe 2 elementos) = nota 1, nota 2            obs:0 guarda 2 elementos e tem tamanho 2
  1º array|1|(disciplina) = 2º array|3|(cabe 3 elementos) = nota 1, nota 2, nota 3
  1º array|2|(disciplina) = 2º array|4|(cabe 4 elementos) = nota 1, nota 2, nota 3, nota 4   obs: 2 guarda 4 elementos e tem tamanho 4
  1º array|3|(disciplina) = 2º array|2|(cabe 2 elementos) = nota 1, nota 2 
  1º array|4|(disciplina) = 2º array|3|(cabe 3 elementos) = nota 1, nota 2, nota 3
*/
				System.out.printf("\nNota: %d\n ", j+1); 
				/* usando ex da posicao 0, teste de tela
				 Nota 1: 7 
				 Nota 2: 8
				perceba q j = 0 e no print 0 + 1 = 1 por isso: Nota 1, Nota 2
				*/
				notas[i][j] = l.nextDouble();
				/* 1ª passada do laço
				 i[0], armazena j|7|
				 i[0], armazena j|8|
				 [0]=|7||8|
				 [1]=|n||n||n| posicao 1,2,3 e 4 ta null ainda, soh preenche no proximo loop */
				
			}
						/*o i passa a valer 1 (por causa do incremento), e assim vai  até 5
						 * quanto i = 5 ele sai do laço, e o programa segue abaixo	*/
		}
	
	System.out.println("\nMédias das Ddisciplinas\n"); // pegamos a as 5 disciplinas e suas respectivas notas e agora o programa exibirá a média
	
	[b]for(int i=0; i<notas.length;i++) //laço q percorre o 1º array, posicao 0 até 4
	{
		double media = 0; //criada uma variável pra receber as médias, ela é Zerada a cada laço
		for(int j=0; j<notas[i].length; j++) 
					
			media = media + notas[i][j]; // ? 
			media = media/notas[i].length; //valor da soma media/2 (tamanho da posicao 0 é 2)
			System.out.printf("Disciplina %d = %f \n", i, media);
			/* teste de tela
			Disciplina 0 = 7,50000
			*/[/b]
	} //fim for
		
  }
	
}

Att

Thiago Marinho

[code][b]for(int i=0; i<notas.length;i++)
{
double media = 0;
for(int j=0; j<notas[i].length; j++)

        media = media + notas[i][j]; // ?   
        media = media/notas[i].length;
        System.out.printf("Disciplina %d = %f \n", i, media);  
   } //fim for  [/code]

só preciso entender isso!

media = media + notas[i][j]

como q o programa esta sendo compilado, como q esta fazendo a soma?

Cara, vou te ensinar uma manha muito boa, se chama teste de mesa voce já ouviu falar?

Se utilizava pra ensinar C na faculdade na minha época. É uma maneira muito boa de entender 100% sobre os algoritmos que a gente faz.

É o seguinte, no teste de mesa você faz o papel do processador e executa as linhas sequencialmente. A idéia é pegar papel e lápis e fazer uma tabela, onde cada coluna é uma variável e cada linha da tabela é o estado instantâneo de todas as variáveis.

Aqui ensina o conceito básico:

http://www.brasilacademico.com/ed/testemesa.htm

Faça o teste de mesa que você descobrirá isso e descobrirá muito mais!

Mas só pra te adiantar: a média está sendo calculada somando todo o array e depois dividindo pelo numero de elementos.
Vamos supor que:

i=0
notas[i]=[4, 2, 9]

Vou começar o teste de mesa e o resto você termina ok?

[linha 3]
media = 0;

[linha 6] -> j=0
media = 0 + 4 = 4

[linha 6] -> j=1
media = 4 + 2 = 6

[linha 6] -> j=2
media= 6 + 9 = 15

[linha 7]
media = 15/3 = 5

[linha 8]
“Disciplina 0 = 5”

É isso aí. Te aconselho fazer o teste de mesa do algoritmo todo procê compreender 100%.

Abraço

Muito obrigado chará! era isso mesmo q eu estava precisando, qria um site bacaninha sobre teste de mesa, bem útil!

e consegui descobrir as respostas!

vlw Tiago!

t+