1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Java arrays

Discussão em 'Programação' iniciada por DarkT, 16 de Dezembro de 2008. (Respostas: 12; Visualizações: 769)

  1. DarkT

    DarkT Power Member

    Bem nao sei com interagir os 2 arrays :S

    Esta e a assinatura do metodo:

    public static boolean incluido(int[] a, int[] b)

    O metodo devia fazer o seguinte :

    que indica se todo o elemento do array a é elemento do array b.
    Por exemplo, o método deve resultar em true quando a sequência dos elementos de a for 7; 2 e a sequência dos elementos de b for 2; 3; 5; 7; 11.

    mas nao tou a ver como :/
     
  2. Thrasher

    Thrasher Power Member

    Com um for (não sei a dimensão de cada vector) e um if para comparares o conteúdo em cada posição, penso que dá para fazeres o que desejas, se bem entendi o enunciado...
     
  3. DarkT

    DarkT Power Member

    Tipo tem que levar no minimo 2 for's ..

    o tamanho dos arrays nao importa mas o B e maior que o a ou igual ...
     
  4. Thrasher

    Thrasher Power Member

    Portanto, com dois for´s encadeados, comparas sequencialmente os elementos de a com os de b, caso hajam elementos iguais, ele retorna true.

    Tipo isto:

    ???
     
  5. DarkT

    DarkT Power Member

    Código:
    public static boolean incluido(int[]a,int []b)
        {
            int i,j;
            
            for(i=0;i<a.length;i++)
            {
                for(j=0;j<b.length;j++)
                {
                    if (a[i]==b[j])    
                        return true;
                }
            }
            
            return false;
        }
    
    tas a dizer desta forma certo?

    mas isto nao vai fazer so para encontrar 1 numero?

    Tipo imagina que o a[0]=b[0] da logo true sem verificar os outros ..

    Nao se se me percebes ou sou eu que estou errado :)
     
  6. guilherme

    guilherme Power Member

    É mais tipo isto:



    ainda podes verificar se estão nulos se quiseres.
    Não percebi bem a tua questão no post anterior, entao mas se tiveres 2 elementos de a e só um se encontrar em b é suposto devolver false ou nao?
     
    Última edição: 16 de Dezembro de 2008
  7. DarkT

    DarkT Power Member

    Sim é.

    Ele so devolve true se todos os elementos em a estiverem dentro do array b.
     
  8. AliFromCairo

    AliFromCairo Power Member

    Se tivesses um array do tipo Integer (i.e. Integer[]), poderias fazer algo do género:

    Código:
    return Arrays.asList(b).containsAll(Arrays.asList(a));
    
     
  9. guilherme

    guilherme Power Member

    Neste caso, se for a nível académico o docente deve querer que eles procurem manualmente.

    No entanto nunca tinha usado esse tipo de conversões, sendo assim so funciona para objectos?
     
  10. AliFromCairo

    AliFromCairo Power Member

    Sim, provavelmente.

    Em relação às conversões, o problema está no método asList, cuja assinatura é List<T> asList(T... a), ou seja, recebe um número arbitrário de argumentos do tipo T. O que ele faz é criar uma lista com os argumentos que lhe passas. Por exemplo, uma maneira de criares uma lista de forma rápida e simples é fazeres Array.asList("X", "A", "Z"). No entanto, se lhe passares um array de tipos primitivos (como o int[]), ele vai criar uma lista com o int[] lá dentro, ao invés de uma lista com os conteúdos do int[]. O mesmo não acontece se passares um array Integer[]. Na minha opinião, o método deveria ter o mesmo comportamento para os dois tipos, mas tal não acontece devido ao Java não fazer autoboxing para arrays.
     
  11. guilherme

    guilherme Power Member

    já estou a ver, parece que a questão do autoboxing vai ser resolvida com o 7.
    Obrigado pelo esclarecimento.
     
  12. syqe

    syqe Power Member

    Se quiseres trabalhar com os dois arrays manualmente, o que tens que fazer é:

    *pseudo-codigo*
    Código:
    for (i = 0 .. a.lenght) {
      for (j = 0 .. b.length) {
        if (a[i] = b[j])
          break;
    
        if (j = b.length)
          return false;
      }
    }
    
    return true;
    Ou seja ele assim que encontra um caracter em b igual ao de a, passa ao proximo de a, se vir todos os a's retorna verdadeiro, se por acaso alguma vez chegar ao fim de b é porque há um caracter em a que não existe em b, logo podes terminar e retornar falso.
     
  13. guilherme

    guilherme Power Member

    Outra logica semelhante :-)
     
    Última edição: 20 de Dezembro de 2008

Partilhar esta Página