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

Damon4hire

Arrays

19 mensagens neste tópico

Boas pessoal.

Ando a aprender a programar em java, e quero so perguntar

se ha alguma instrução pre-definida no java, ou nalguma das bibliotecas incluidas

que nos permita verificar se um determinado valor

está ou não contido dentro de um determinado array,

ou vou ter de criar um algoritmo próprio?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para um array podes usar a classe Arrays e os métodos static sort e binarySearch para fazer uma pesquisa binária no array pelo elemento pretendido:

import java.util.*;

public class Teste {
public static void main(String[] args) {
	int[] vector = new int[10];
	int i;
	for (i=0;i<10;i++)
		vector[i]=i+1;
	Arrays.sort(vector);
	int index = Arrays.binarySearch(vector,3);
	System.out.println("Elemento encontrado no índice: " + index);
}
}

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html

Se quiseres, podes dar uma vista de olhos na classe ArrayList.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para um array podes usar a classe Arrays e os métodos static sort e binarySearch para fazer uma pesquisa binária no array pelo elemento pretendido:

import java.util.*;

public class Teste {
public static void main(String[] args) {
	int[] vector = new int[10];
	int i;
	for (i=0;i<10;i++)
		vector[i]=i+1;
	Arrays.sort(vector);
	int index = Arrays.binarySearch(vector,3);
	System.out.println("Elemento encontrado no índice: " + index);
}
}

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html

Se quiseres, podes dar uma vista de olhos na classe ArrayList.

Eu tambem ando a aprender Java mas nao podia fazer um for com um if la dentro para verificar se o valor está ou nao contido no vector?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o problema e k n ha nenhuma instrução especifica que se possa por no if.

Mas com o binarysearch se ele n estiver n array, devolve indice negativo, certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tambem ando a aprender Java mas nao podia fazer um for com um if la dentro para verificar se o valor está ou nao contido no vector?

Sim.

o problema e k n ha nenhuma instrução especifica que se possa por no if.

Mas com o binarysearch se ele n estiver n array, devolve indice negativo, certo?

Sim.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o problema e k n ha nenhuma instrução especifica que se possa por no if.

Mas com o binarysearch se ele n estiver n array, devolve indice negativo, certo?

Não podes fazer algo do genero:

int valoraprocurar = 3;

For (int i = 0; i < v.lenght ; i++) {

if (i = valoraprocurar)

system.out.println ("tem o valor na posicao" + i);

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

como posso comparar 2 arrays?

directamente não funciona, será que tenho de fazer manualmente?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não podes fazer algo do genero:

int valoraprocurar = 3;

For (int i = 0; i < v.lenght ; i++) {

if (i = valoraprocurar)

system.out.println ("tem o valor na posicao" + i);

}

n percebeste, eu tinha 1 array / vector (como lhe quiseres chamar) d numeros inteiros

e queria saber se um determinado numero estava dentro desse array,

porque o meu programa n podia repetir os numeros.

mas tks n mesma

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Algo deste genero?

public static int exist (Int[]a, int v){

int count = 0;

for (int i = 0; i < a.lenth; i++){

if (a==v){

count += 1;

}

}

return count;

}

Este metodo devolve-te o numero de ocorrencias mas tambem serve para o que queres. ;)

Depois diz qualqer coisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

antes assim:

Arrays.sort(aposta);

while ( Arrays.binarySearch(aposta, a = geraNumero(numeros)) >= 0 ){}

ele continua a gerar 1 numero até o indice ser negativo, porque se o indice for negativo,

quer dizer k não o encontra dentro do array, logo significa que se o introduzir dentro d array,

tenho a certeza k não é repetido

(a é var inteira , geraNumero() gera números aleatórios e aposta é um array)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

antes assim:

Arrays.sort(aposta);

while ( Arrays.binarySearch(aposta, a = geraNumero(numeros)) >= 0 ){}

ele continua a gerar 1 numero até o indice ser negativo, porque se o indice for negativo,

quer dizer k não o encontra dentro do array, logo significa que se o introduzir dentro d array,

tenho a certeza k não é repetido

(a é var inteira , geraNumero() gera números aleatórios e aposta é um array)

Ja aprendi mais qualquer coisa xD desconhecia esse metodo (binarySearch) .. mas ate faz sentido, nao estava era a perceber bem o que querias..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

uma pergunta sobre a utilização do binarysearch.

se eu utilizar o binarysearch num ciclo que vai introduzindo valores no array,

tenho de estar a ordenar por cada valor que é introduzido no array, se bem percebi.

mas se já tiver inicializado o array primeiro, qualquer valor introduzido, apos o sort,

passa para as ultimas posições do array para ficar ordenado por ordem ascendente, certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu tenho um array [aposta] que vai guardar numeros inteiros, mas não posso repetir os numeros la guardados. O que fiz foi:

(geraNumero vai gerar numero aleatoriamente, a é variavel inteira)

Arrays.sort(aposta);

while( Arrays.binarysearch( aposta, a = geraNumero()  >= 0 ){}

Assim ele gera numero até dar negativo, supostamente nao esta la, entao nao se repete.

Mas a questão é o Arrays.sort() vai ordenar por ordem ascendente, e o array tem todas as posições a zero assim muda os numeros gerados para as ultimas posições, e esse é o problema.

Eu não quero que os numeros mudem de posição.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então se calhar vais ter de optar por outra abordagem, porque não estou a ver como vais conseguir fazer isso ao querer utilizar esses métodos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

que tal assim?

opiniões por favor.

public void gerarAposta()

    {

        int a = 0;

        for ( int i = 0; i < 7; i++ )

        {

            if ( i < 5 )

                while( verifica(a = geraNumero(50), 0, i) ){}

            else

                while( (verifica(a = geraNumero(9), 5, i)) ){}

            aposta = a;

        }

    }

   

    private boolean verifica(int number, int inicio, int indice)

    {

        int i = 0;

        for (int b = inicio; b < indice + 1; b++)

            if ( number == aposta ) i++;

        if ( i > 0 ) return true;

        else return false;

    }

(  aposta = new int[7];  )

a ideia é gerar numeros aleatorios de 1 a 50 para as primeiras 5 posicões do array aposta, sem os repetir.

E para as 2 últimas posições do array aposta são 2 numeros aleatorios de 1 a 9 sem serem repetidos entre eles mesmos, podendo, no entanto, repetir com os 5 anteriores.

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