Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Damon4hire

Arrays

Mensagens Recomendadas

Damon4hire    0
Damon4hire

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vasco16    0
vasco16

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Damon4hire    0
Damon4hire

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vasco16    0
vasco16

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

}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Damon4hire    0
Damon4hire

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vasco16    0
vasco16

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Damon4hire    0
Damon4hire

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)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vasco16    0
vasco16

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Damon4hire    0
Damon4hire

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Damon4hire    0
Damon4hire

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Damon4hire    0
Damon4hire

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.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade