linearSearch()

27 respostas
C

galera… to tentando faze esse codigo q utiliza um linearsearch no array bomba… mais ta dando um erro…

o codigo é esse:

while(valor_igual != -1){ numero = r.nextInt(100); valor_igual = bomba.linearSearch(numero); }

isso qr dizer… enquanto tiver um numero dentro do array igual aonumero sorteado no random ele vai da esse random de novo…

o erro q da é esse:

cannot resolve symbol method linearSearch(int)

algm sabe arrumar isso?

[]s

27 Respostas

Y

Você deve ter declarado o método incorretamente.

Poste o código, por favor.

Att, Yky Mattshawn.

C
public void destribuir_bombas(){
		

	for(int i=0;i<10;i++){
	
	int posiçao;	
	int valor_igual	= 0;
		while(valor_igual != -1){
			posiçao = r.nextInt(100);
			valor_igual	= bomba.linearSearch(posiçao);
		}
			
	bomba[i] = posiçao;
	Botoes[bomba[i]].setText("X");
	
	
	}
Y

Estranho pra mim. linearSearch é um método próprio de arrays não é? Então não entendo o porquê de estar dando um erro desse tipo.

Na primeira chamada ao método linearSearch, a variável bomba já está inicializada?

C

hmm.. tentei mudar e fazer assim

public void destribuir_bombas(){
		

	for(int i=0;i<10;i++){
	
	int posiçao;	
	int valor_igual	= 0;
	
	if(i==0){
		bomba[i] = r.nextInt(100);
		}
		
	else{
		while(valor_igual != -1){
			posiçao = r.nextInt(100);
			valor_igual	= bomba.linearSearch(posiçao);
		}
			
	bomba[i] = posiçao;
	}
	
		
	
			
	Botoes[bomba[i]].setText("X");
	
	
	}	
  		
  }

mas da o msm erro =(

Y

Mostre o código mais completo, principalmente onde você está declarando, construindo e inicializando a variável bomba.

Dica: o correto é distribuir.

C

eu to declarando o bomba la em cima… como publica…

to delcarando assim
int [] bomba = new int[10];

so q eu tenho q sortear numeros randomicos de 0-99 dentro dela q nao sejam iguais… dai me disseram pra usar o linearSearch daquela forma q eu usei… mais da aquele erro loco

OBS: hahahahahaha erro de portugues tosco hahahaha

Y

Cara, não tenho certeza, mas acredito que o problema esteja no fato de que os valores de bombas ainda não foram configurados.

Faça o seguinte:

import java.util.Arrays;
...
int [] bombas = new int[10];

// e no construtor
Arrays.fill(bombas, -1);
C

entao.. tentei fazer assim:

public void distribuir_bombas(){
		

	for(int i=0;i<10;i++){
		
		bomba[i] = r.nextInt(100);
		Botoes[bomba[i]].setText("X");
		
	}
	analisar_bombas();
	
}

	public void analisar_bombas(){
		
	for(int i=0;i<10;i++){
		int posiçao = bomba.linearSearch(bomba[i]);
			if(posiçao != i){
				distribuir_bombas();
			}
					
	}
				
}

mais msm assim nao deu certo.. continua o msm erro.

explica melhor como q faço pra usa esse Arrays.fill()

Y
private int[] bombas = new int[10];

public Construtor()
  {
   Arrays.fill(bombas, -1);
  }

private void distribuirBombas()
  {
   for (int bomba = 0; bomba < bombas.length; bomba++)
     { while (bombas.linearSearch(bombas[bomba] = r.nextInt(100)) != -1) { } }
  }

O método fill preenche todas as posições do array com o valor especificado. Na chamada a

Arrays.fill(bombas, -1);

Você está preenchendo todas as posições do array bombas com o valor -1, isso garante que, ao chamar o linearSearch(), todas as posições do array terão algum valor.

P.S.: que código mais horrível que fiz aí em cima, um while sem corpo, onde já se viu! hehe

C

eu usei assim.. preenchendo o array antes.. e deu o msm erro.. axo q nao é isso.. axo q é algo na formulçao do linearSearch() sei la.. pq ta igual no livro da deitel.. ele faz assim msm..

posição_que_o_numero_vai_estar = array_sendo_estudado.linearSearch( numero_que_vc_qr_analisar);

eu usei assim pra preenche o array antes:

public void distribuir_bombas(){
		

	for(int i=0;i<10;i++){
		
		bomba[i] = r.nextInt(100);
		Botoes[bomba[i]].setText("X");
		
	}
	analisar_bombas();
	
}

	public void analisar_bombas(){
		
	for(int i=0;i<10;i++){
		
		int posiçao = bomba.linearSearch(bomba[i]);
			if(posiçao != i){
				distribuir_bombas();
			}
					
	}
				
}

continua o msm maldito erro "/

Y

Cara, testa assim:

private void distribuirBombas()
  {
    Arrays.fill(bombas, -1);

   for (int bomba = 0; bomba < bombas.length; bomba++)
     {
      int val = -1;

      do
        { val = r.nextInt(100); } while (bombas.linearSearch(val) != -1);

      bombas[i] = val;
     }
  }
C

deu o msm erro cara… :cry:

nossa… esse ta foda de rersolve…

vlw pela ajuda ai até agora… mais agradeço se conseguir me ajudar a arrumar isso :slight_smile:

Y

Passe-me o código inteiro, por favor.

C
as partes que tem ligaçao com o que to tentando faze sao essas
int     [] bomba    = new int[10];

...


public void distribuir_bombas(){
 		
 
 	for(int i=0;i<10;i++){
 		
 		bomba[i] = r.nextInt(100);
 		Botoes[bomba[i]].setText("X");
 		
 	}
 	analisar_bombas();
 	
 }
 
 	public void analisar_bombas(){
 		
 	for(int i=0;i<10;i++){
 		
 		int posiçao = bomba.linearSearch(bomba[i]);
 			if(posiçao != i){
 				distribuir_bombas();
 			}
 					
 	}
 				
 }
e o erro smp é esse:
cannot resolve symbol method linearSearch(int)
Y

Cara, tentei compilar e percebi que o método linearSearch não faz parte do Java, hehehe, é um método implementado?

Bom, de qualquer forma, compilei o código abaixo e funcionou blz:

import java.util.Arrays;
import java.util.Random;

public class Teste
  {
   private int[] bombas = new int[10];
   private Random r = new Random();

   public Teste()
     { Arrays.fill(bombas, -1); }

   private void distribuirBombas()
     {
      for (int bomba = 0; bomba < bombas.length; bomba++)
        {
         int val = -1;

         do
           { val = r.nextInt(100); } while (linearSearch(bombas, val) != -1);

         bombas[bomba] = val;
        }
     }

   private int linearSearch(int[] arr, int val)
     {
      for (int i = 0; i < arr.length; i++)
        {
         if (i == val)
           { return (i); }
        }

      return (-1);
     }
  }
C

Yky Mattshawn:
Cara, tentei compilar e percebi que o método linearSearch não faz parte do Java, hehehe, é um método implementado?

entao cara… nem sei se é implementado… no livro da Deital ta ele normal… nao tm nenhum import la em cima especial pra ele e tal…

ele ta usando normal…

Y

Qual capítulo do livro?

C

cap. 16

tm um exercicio dele usando isso exatamente na pag 585…

eu tirei de la pra usa =)

Y

Achei.

Cara, se tu olhares no exemplo ele está implementando uma classe chamada LinearSearch. E esta classe é que contém o método linearSearch, ou seja, ele é que implementou o método! Só que tu estás chamando o linearSearch em um objeto array nativo.

Faça o seguinte, coloque este método no teu código:

private int linearSearch(int[] arr, int val)
     {
      for (int i = 0; i < arr.length; i++)
        {
         if (i == val)
           { return (i); }
        }

      return (-1);
     }

E substituia aquele teu:

... = bombas.linearSearch(...);

Por

... = linearSearch(bombas, ...);
C

deu certo!! :stuck_out_tongue:

mais qnd rodei aconteceu isso:

Exception in thread “main” java.lang.StackOverflowError

C

o qq eh esse erro? nunca deu cmg =(

Y

Se eu não me engano isso ocorre com uma sobrecarga de pilha, provavelmente o seu loop está mal estruturado e está causando chamadas recursivas excessivamente.

C

é... mudei o codigo e arrumo aquilo.. mais cara.. o codigo funfa mais nao faz o q eu qro ¬¬

o codigo ta assim

private int linearSearch(int[] bomba, int val)
      {
       for (int i = 0; i < 10; i++)
         {
          if (i == val)
            { return (i); }
         }
 
       return (-1);
      }
	
	public void distribuir_bombas(){
 		
 	for(int i=0;i<10;i++){
 				
 			int valor_igual = 0;
 			while(valor_igual != -1){
 		    int numero = r.nextInt(100);
 			valor_igual = linearSearch(bomba, numero);
 			bomba[i] = numero;
 			}			
 	
 		Botoes[bomba[i]].setText("X");
 		
 	}
 		
 }

so q msm assim tm mais de uma bomba no msm lugar ¬¬

era pra ele analisa o array bomba, ver se tm algm cm o numero.. se tiver ele executa de novo isso.. ate dar -1 q eh qnd nao tm um numero desse no array... so q nao ta dando certo =(

Y

Cara, deixa como eu havia falado:

i < bomba.length

e não i < 10, pq aih no dia que tu alterar o número de bombas terá de sair procurando no código onde tem o número, nesse caso teria que alterar 2 valores ao invés de um, o que é algo extremamente inútil. E quanto ao código, eu já havia postado né?!

private void distribuirBombas()
     {
      for (int bomba = 0; bomba < bombas.length; bomba++)
        {
         int val = -1;

         do
           { val = r.nextInt(100); } while (linearSearch(bombas, val) != -1);

         bombas[bomba] = val;

         Botoes[bomba[i]].setText("X");
        }
     }
C

hehehe o lance do bomba.lenght eh verdade… vlw! :wink:

eeee… msm com esse codigo ai aparece bomba no msm lugar =(

Y

Cara, criei uma classe para testar:

import java.util.Arrays;
import java.util.Random;

public class Teste
  {
   private int[] bombas = new int[10];
   private Random r = new Random();

   public static void main(String[] args)
     { (new Teste()).distribuirBombas(); }

   public Teste()
     { Arrays.fill(bombas, -1); }

   private void distribuirBombas()
     {
      for (int bomba = 0; bomba < bombas.length; bomba++)
        {
         int val = -1;

         do
           { val = r.nextInt(100); } while (linearSearch(bombas, val) != -1);

         bombas[bomba] = val;
        }

      printArray(bombas);
     }

   private void printArray(int[] arr)
     {
      System.out.println();

      for (int v : arr)
        { System.out.print(v + ","); }
     }

   private int linearSearch(int[] arr, int val)
     {
      int index = -1;

      for (int i : arr)
        {
         if (i == val)
           { index = i; }
        }

      return (index);
     }
  }

Compilou e rodou normalmente, não apresentando nenhum número repetido.

C

aee eu tava colocando um lance errado aqui ¬¬

vlwszao cara! brigadao msm pela ajuda!!

[]s

Criado 22 de abril de 2007
Ultima resposta 23 de abr. de 2007
Respostas 27
Participantes 2