Java arrays

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 :/
 
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...
 
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 :)
 
É mais tipo isto:

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

for(int i = 0; i < a.length; i++)
{
result = false;
for(int j = 0; j < b.length; j++ )
{
if(a == b[j]) result = true;
}
if(!result) return false;

}
return true;
}


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

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?
 
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.
 
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.
 
Back
Topo