Não consegui entender a lógica

12 respostas
juni0r25

Ola pessoa!

Este é meu primeiro post, espero que esteja fazendo corretamente, e estou aprendendo a programar, sou iniciante.
Estou com uma duvida sobre um código que vi no livro “Java Como Programar”, neste código dois vetores são declarados e um declara os seus valores em cada posição, e o outro ele consegui fazer a contagem dos valores declarados no outro vetor.
Vou postar o códido:

public static void main(String[] args){

int frequencia[]= new int[5];
    int total[] = {1,2,4,4,3,2,1,2,3,2,1,2,4,3,2,1,2,3,3,1,1,2,3,4,2,1,1,3,4,3,2,2,1,2,4,2,1,1,2,3};
  
    for (int i=0;i<total.length;i++){
        ++frequencia[total[i]];
    }
        
   for ( int y=1;y<frequencia.length;y++)
        System.out.printf("%4d%10d\n", y, frequencia[y]);
}

Gostaria de saber a lógica utilizada, pois se eu fosse fazer o meu código eu criaria 5 contadores, para contar quantas vezes eles aparecem, mais neste código o próprio vetor frequência faz a contagem. Alguém pode ajudar?
>

12 Respostas

Rodrigo_Sasaki

Oi, Junior. Tudo bem?

Antes da gente tentar te ajudar, dá uma lida no nosso How To.

No item 7 tem um link que ensina como devemos fazer para postar código aqui no fórum.

Pelo que conheço daqui sei que tem gente que nem vai se dar ao trabalho de ler seu tópico antes de você corrigir isso :slight_smile:

Abraço e seja bem vindo!

V

Não entendi qual o objetivo do código ‘-’

RodrigoKaos

Acredito que o objetivo do código seja praticar com arrays, ele imprime a quantidade total dos valores declarados no array total

G

To com o VA, não entendi bem isso ai.

Me parece que ele utiliza os indices dos vetores como os números de 0 a 5 e incrementa no indice a quantidade de vezes que o numero aparece na sequencia dada.
Tipo, se no indice 5 tiver o valor 4 significa que o número 5 apareceu quatro vezes na sequencia.

Mas se vc tá começando, acho que isso ai tá confuso demais, talvez deva procurar outro livro.

explosive_spirit

juni0r25:
Ola pessoa!

Este é meu primeiro post, espero que esteja fazendo corretamente, e estou aprendendo a programar, sou iniciante.
Estou com uma duvida sobre um código que vi no livro “Java Como Programar”, neste código dois vetores são declarados e um declara os seus valores em cada posição, e o outro ele consegui fazer a contagem dos valores declarados no outro vetor.
Vou postar o códido:

public static void main(String[] args){

int frequencia[]= new int[5];
    int total[] = {1,2,4,4,3,2,1,2,3,2,1,2,4,3,2,1,2,3,3,1,1,2,3,4,2,1,1,3,4,3,2,2,1,2,4,2,1,1,2,3};
  
    for (int i=0;i<total.length;i++){
        ++frequencia[total[i]];
    }
        
   for ( int y=1;y<frequencia.length;y++)
        System.out.printf("%4d%10d\n", y, frequencia[y]);
}

Gostaria de saber a lógica utilizada, pois se eu fosse fazer o meu código eu criaria 5 contadores, para contar quantas vezes eles aparecem, mais neste código o próprio vetor frequência faz a contagem. Alguém pode ajudar?
>

Apesar dos vetores serem declarados localmente (dentro do método main), eles iniciam com valor zero (exceto o vetor total que foi inicializado com outros valores).

Com base nisso esse trecho:

...
++frequencia[total[i]];
...

Seria a mesma coisa que:

...
++0; // ++1, ++2, etc
...

Que no fim cada posição do vetor frequência acaba sendo incrementado em 1 onde a posição afetada é indicada pelo vetor total.

explosive_spirit

GabrielMantini:
To com o VA, não entendi bem isso ai.

Me parece que ele utiliza os indices dos vetores como os números de 0 a 5 e incrementa no indice a quantidade de vezes que o numero aparece na sequencia dada.
Tipo, se no indice 5 tiver o valor 4 significa que o número 5 apareceu quatro vezes na sequencia.

Mas se vc tá começando, acho que isso ai tá confuso demais, talvez deva procurar outro livro.

Quanto a lógica pelo que entendi é isso mesmo, simular um incremento aleatório para algumas posições do vetor frequencia.

Como o exercício indica o uso de vetores, cada posição do vetor total terá como valor a posição que será afetada/incrementada no vetor frequencia.

V
public static void main(String[] args){
		int vetor[] = {1, 3, 4, 5, 6, 7, 8, 15, 200, 500}; //Vetor
		int soma = 0;
		
		for(int i = 0; i < vetor.length; i++){ // Enquanto i for menor que o tamanho do vetor, continue e some 1 ao i...
			soma += vetor[i];
		}
		System.out.println("Soma: " + soma);
		
		//Outras informações
		System.out.println("Tamanho do vetor: " + vetor.length);
	}
explosive_spirit
VA:
public static void main(String[] args){
		int vetor[] = {1, 3, 4, 5, 6, 7, 8, 15, 200, 500}; //Vetor
		int soma = 0;
		
		for(int i = 0; i &lt; vetor.length; i++){ // Enquanto i for menor que o tamanho do vetor, continue e some 1 ao i...
			soma += vetor[i];
		}
		System.out.println(&quot;Soma: &quot; + soma);
		
		//Outras informações
		System.out.println(&quot;Tamanho do vetor: &quot; + vetor.length);
	}

??????

joaoabi

Use a tag code, para que possamos ter melhor visualização do seu código!

V

Não era isso que ele queria?

explosive_spirit

Não, ele queria saber como o vetor incrementava o valor de cada posição baseado no valor do vetor total e não somar tudo entende, exemplo:

Vamos reduzir um pouco os valores de total ok?

int frequencia[]= new int[5];
int total[] = {0,1,2,3,4};

Agora se quisermos aumentar os valores do vetor frequencia, podemos:

for (int i = 0; total.length; i++) {
   ++frequencia[total[i]]; // atencao a essa linha...
}

A linha comentada acima é o mesmo que:

for (int i = 0; total.length; i++) {
   int indice = total[i];
   int valor = frequencia[indice];
   frequencia[indice] = valor + 1;
}

Clareou mais as idéias?

A diferença nesse caso é a economia das variáveis dentro do laço (valor e indice) e com relação ao código do autor, que ele possui mais valores onde de repente a posição para frequencia pode repetir tendo valores variados.

No exemplo que fiz, cada posição vai aumentar sequencialmente de 0 a 4, então o valor de cada posição de frequencia vai acabar sendo 1.

Agora se eu mudasse essa linha:

int total[] = {3,3,3,3};

Qual ia ser o valor da posicao 3 do vetor frequencia?

E o valor das outras posições?

Luiz_Augusto_Prado

juni0r25:
Ola pessoa!

Este é meu primeiro post, espero que esteja fazendo corretamente, e estou aprendendo a programar, sou iniciante.
Estou com uma duvida sobre um código que vi no livro “Java Como Programar”, neste código dois vetores são declarados e um declara os seus valores em cada posição, e o outro ele consegui fazer a contagem dos valores declarados no outro vetor.
Vou postar o códido:

public static void main(String[] args){

int frequencia[]= new int[5];
    int total[] = {1,2,4,4,3,2,1,2,3,2,1,2,4,3,2,1,2,3,3,1,1,2,3,4,2,1,1,3,4,3,2,2,1,2,4,2,1,1,2,3};
  
    for (int i=0;i&lt;total.length;i++){
        ++frequencia[total[i]];
    }
        
   for ( int y=1;y&lt;frequencia.length;y++)
        System.out.printf("%4d%10d\n", y, frequencia[y]);
}

Gostaria de saber a lógica utilizada, pois se eu fosse fazer o meu código eu criaria 5 contadores, para contar quantas vezes eles aparecem, mais neste código o próprio vetor frequência faz a contagem. Alguém pode ajudar?
>

legal a questão.
Se os números não forem dentro de uma sequencia?
precisaria de uma forma diferente de verificar as frequências, pois não estariam em uma sequencia incrementada sempre de um partindo de 1 à n, algo necessário à chamada do array.

System.arraycopy

Criado 4 de setembro de 2013
Ultima resposta 5 de set. de 2013
Respostas 12
Participantes 8