• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

NoOne

arrays - duvida urgente

17 mensagens neste tópico

import javax.swing.JOptionPane;

public class Main {
        
    public static void main(String[] args) {
        int [] vec = new int[100];
        int [] vec2 = new int[100];
        int i = -1, a=0, j, aparece;
        
        int num, soma=0;
        String numero;
        
        //avisar parametros de introduçao dos numeros
        JOptionPane.showMessageDialog(null,"Para finalizar a introduçao de elementos introduza o numero zero","Aviso",JOptionPane.WARNING_MESSAGE);
        
        // ler vector
        do {
            i=i+1;
            numero=JOptionPane.showInputDialog("numero: ");
            vec[i]=Integer.parseInt(numero);
        }while(vec[i] != 0);
        
           
        // ALINEA B
        //mostrar no ecrã para cada número existente no vector a quantidade de vezes que foi introduzido.
        int flag=1;
        a=0;
        j=0;
        aparece=0;
        for (j=0;j<i;j++)
        {
            for (a=0;a<i;a++)
            {
                
                if (vec[j]==vec[a])
                    aparece=aparece+1;
            }
            JOptionPane.showMessageDialog(null,"o numero "+vec[j]+" aparece: "+aparece+" vezes");
            aparece=0;
        }
        System.exit(0);
    }
    
}

neste exercicio tou com um problema na alinea B...

é suposto encontrar quantas vezes um numero se repete num vector...

por exemplo  o vector: 2 1 1 2 5

era suposto dizer:

o numero 2 aparece 2x

o numero 1 aparece 2x

o numero 5 aparece 1x

no entanto aparece:

o numero 2 aparece 2x

o numero 1 aparece 2x

o numero 1 aparece 2x

o numero 2 aparece 2x

o numero 5 aparece 1x

eu sei pork é k ta a aparecer assim, mas n sei como resolver... alguma sugestão? dava imenso jeito resolver este problema

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro... percorres v[j] que tem 5 números e logo vão-te aparecer 5 linhas de resultados. Estas a calcular quantas vezes aparece o 1 e o 2repetidas vezes porque este aparece repetido no vector vec[j].

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e tem obrigatoriamente que se fazer com um array... Podias ir retirando os números que apanhas... mas com arrays não é a melhor opção para estar constantemente a retirar numeros da estrutura de dados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

uma solução pode passar por ordenar o array...

Arrays.sort(vec);
int aux;
for(j=1,aux=vec[0],aparece=0;j<i;j++)
{
 if(vec[j]==aux)
 {
   aparece++;
 }
 else
 {
   //imprime '$vec[j-1]$ repete-se $aparece$ vezes'
   aparece=1;
    aux=vec[j];
 }
}
//imprime '$vec[j-1]$ repete-se $aparece$ vezes'

EDIT: o método sort está implementado na classe Arrays e não na Array.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse código parece-me que falha no facto de aux ter sempre o valor vec[0]. não?

Acrescenta aux=vec[j] e substitui aparece=0 por aparece=1.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse código parece-me que falha no facto de aux ter sempre o valor vec[0]. não?

Acrescenta aux=vec[j] e substitui aparece=0 por aparece=1.

alterado...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois mas como n dei isso axo k ela n deixa usar =/

no outro dia fiz um prog com class Vector e ela disse k n pudia usar isso pk inda n tinhamos dado :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois mas como n dei isso axo k ela n deixa usar =/

no outro dia fiz um prog com class Vector e ela disse k n pudia usar isso pk inda n tinhamos dado :S

podes sempre fazer tu uma função de ordenação.

penso que é a forma mais simples de resolver o problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então... podes usar o 0 como marcador.

Sempre que passas por um número que vai ser contado altera-o  para 0. E não contes os 0's.

Podes apresentar a solução do Carlos na mesma só para impressionar :)

Ou então podes ir inserindo os números ordenando-os.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

shummy como tas a dizer vai aparecer:

o numero 2 aparece 2x

o numero 1 aparece 2x

o numero 1 aparece 1x

o numero 2 aparece 1x

o numero 5 aparece 1x

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é o código que tens!

Marca as posições no array que já contaste com 0. E nas interações vai ignorando quando o marcador aparece.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

lol altos filmes e acabei por resolver duma forma simples...

for (j=0;j<i;j++)
        {
            if (vec[j]==0)
                break; 
            cont[vec[j]]=cont[vec[j]]+1;
                   
        }
        j=1;
        do{
            JOptionPane.showMessageDialog(null,"o numero "+j+" aparece: "+cont[j]);
            j=j+1;
        }while(j<10);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não acho que essa solução seja especialmente boa. De que tamanho é o array cont?

Se for 100, que acontece se eu colocar o numero 105?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tinha-me eskecido de dizer k os valores d vec sao entre 1 e 9 :thumbsup:

no programa k pus inicialmente inda n tinha controlado a introduçao do vector...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tinha-me eskecido de dizer k os valores d vec sao entre 1 e 9 :thumbsup:

no programa k pus inicialmente inda n tinha controlado a introduçao do vector...

Lá está... problemas na especificação do problema :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não é por nada, mas não devias usar breaks para interromper ciclos... podias usar antes uma variável boolena.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora