Jump to content

arrays - duvida urgente


Recommended Posts

Posted
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

Posted

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].

Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Posted

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.

Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Posted

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.

Posted

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.

Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Posted

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

Posted

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.

Posted

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.

Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Posted

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

Posted

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.

Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Posted

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);
Posted

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?

Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Posted

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

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

Posted

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

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

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

Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.