Qual a lógica

15 respostas
edymrex

Tenho um vetor por exemplo:

int vet[]={10,10,2,3,52,52,52,52,10,25}

eu tenho que pegar cada elemento do vetor não importa os repitidos
neste exemplo que eu tenho que pegar 10,2,3,52.

Pensei em algo tipo assim:

package com.testes;

import javax.swing.JOptionPane;
 
 

public class Testes
{
  public static void main(String args[])
  {

	  int vet[]={10,10,2,3,52,52,52,52,10,25};
	  
	  int i,j;
	  
	  for(i=0;i<vet.length;i++)
	  {
		  for(j=0;j<vet.length;j++)
		  {
			  
		  }
	  }
  }

}

Um for para comparar o elemento pega com os outros elementos se tiver outro igual a ele, o mesmo não pega… mas está díficil de implementar alguém tem idéia de algo mais simples.

15 Respostas

neohacker

if (vet[i] == vet[j]) { faça algo } else { continue; }
Será que num resolve ??

vanzella

Puppets por que não utiliza TreeSet?
procura sobre Collection e Comparable.

Marck

neohacker:
if (vet[i] == vet[j]) { faça algo } else { continue; }
Será que num resolve ??

8)

Tem q ter outro if para quando o indice i e j estiverem iguais:

i = 3
j = 3

vet[i] == vet[j] //claro que é igual

Sinceramente, não entendi o que o cara quer fazer.

vanzella

Olha os exemplos dos tipos de Collection e Map

edymrex

Eu vou explicar novamente acho que não fui claro,desta vez vou ser bem objetivo.
Bem eu tenho um array:

int vet[]={1,1,6,2,3,22,2,1,1,5,5};

os elementos desse array são 1,1,6,2,3,22,2,1,1,5,5;

quais elementos são repetidos?
Olhando para o array temos:

O 1 que repete 4 vezes, o 2 que repete 2 vezes, o 5 que repete duas vezes.

eu tenho que pegar os elementos não importando os repetidos, apenas uma vez,sendo assim
ficaria 1,6,2,3,22,5 isto está díficil de fazer.

cv1
  1. Ponha os elementos numa das suas implementacoes favoritas de java.util.Set

  2. Itere o Set

  3. Fim.

vanzella

Cara não entendi por que quer isso, já existem classes que fazem esse trabalho pra vc, provavelmente deve ser trabalho de algoritmo, pois se for pra programação em Java, vamos estudar né? Collection e Map.

Segue ai seu algoritmo:

public class Teste
{
	public static void main(String[] args)
	{
	        int vet[] = { 10, 10, 2, 3, 52, 52, 52, 52, 10, 25 };
		int vetFinal[] = new int[vet.length];
	        int i, j;
		int indice = 0;
		boolean teste;
		for (i = 0; i < vet.length; i++)
		{
			teste = false;
			int valor = vet[i];
			for (j = i+1; j < vet.length; j++)
			{
			   if(valor == vet[j])
			   {
				teste = true;
			   }
			}
			if(!teste)
			{
			     vetFinal[indice++] = valor;
			}
		}
	}
}
L

Deve ser criado um segundo array para armazenar o resultado. Pode fazer dois comandos for: o primeiro for irá percorrer todos os elementos do array original uma única vez. Para cada elemento deste array, deve acionar um segundo for que irá percorrer todos os elementos do array de resultado, para verificar se o elemento apontado no array original se encontra no array de resultado. O segundo for deve percorer somente os elementos ja armazenados no array de resultado, que inicialmente não tem nenhum elemento.

edymrex

Cara nunca vi isso em algoritmos atualmente estudo grafos em algoritmos e estruturas de dados, estou colocando está situação porque onde eu trabalho me apareceu este problema, eu trabalho com python, mas começei a programar em java por isto coisa mais chatas eu faço em java depois faço em python, mas muito obrigado por vc ter me ajudado eu consegui fazer tb cara, eu sempre coloco estes problemas porque são coisas que podem ocorrer no dia a dia de qualquer programador e antes de pegar as coisas prontas eu acho interessante quebrar a cabeça e tentar fazer na raça.

meu código:

package com.testes;

 

public class Testes
{
  public static void main(String args[])
  {

	  int vet[]={10,10,10,20,20,3,3};
	  
	  
	  int vet2[]=new int [vet.length];
	  int repetidosVet[]=new int[vet.length];
	  int repetidos=0;
	  int cont=0;
	  int pega=Integer.MAX_VALUE;
	  
	  int i;
	  
	  for(i=0;i<vet.length;i++)
	  {
		  vet2[i]=vet[i];
		   
	  }
	  
	  for(i=0;i<vet.length;i++)
	  {
		  if(vet[i]==vet2[i]&&vet[i]!=pega)
		  {
			  cont++;
		  }
		  if(cont>=2)
		  {
			  pega=vet[i];
			  cont=0;
			  repetidosVet[i]=vet[i];
			  repetidos++;
		  }
	  }
	  System.out.println("Os elementos repetidos são: ");
	  for(i=0;i<repetidosVet.length;i++)
	  {
		  if(repetidosVet[i]!=0)
		  System.out.println(repetidosVet[i]);
	  }
	  System.out.print("Quantidade "+repetidos);
		 
	   
  }

}
L
A solução enviada por vanzella está errada. É quase aquilo que ele enviou.

public class Teste

{

public static void main(String[] args)

{

int vet[] = { 10, 10, 2, 3, 52, 52, 52, 52, 10, 25 };

int vetFinal[] = new int[vet.length];

int i, j;

int indice = 0;

boolean teste;

for (i = 0; i < vet.length; i++)

{

teste = false;

for (j = 0; j < indice; j++)

{

if(vet[i] == vetFinal[j])

{

teste = true;

}

}

if(!teste)

{

vetFinal[indice++] = vet[i];

}

}

}

}
vanzella

Puppets legal sua ideia de aprender como fazer, mas em “Java” orientado a “Objeto” a gente não costuma reiventar a roda, nos acostuma a reaproveitar codigos, você sabe o que é encapsulamento?
Em java a ideia é voce utilizar objetos sem saber o que ocorre internamente, o importante e saber como usar e o resultado que espera, se você for rescrever tudo, vai levar anos pra desenvolver um projeto.

Luiz Antonio, que erro encontrou? não compreendi, somente a logica esta diferente, mas os dois funcionam.

LPJava
<blockquote><div class="quote-author">Luiz Antonio:</div>A solução enviada por vanzella está errada. É quase aquilo que ele enviou.

public class Teste

{

public static void main(String[] args)

{

int vet[] = { 10, 10, 2, 3, 52, 52, 52, 52, 10, 25 };

int vetFinal[] = new int[vet.length];

int i, j;

int indice = 0;

boolean teste;

for (i = 0; i < vet.length; i++)

{

teste = false;

for (j = 0; j < indice; j++)

{

if(vet[i] == vetFinal[j])

{

teste = true;

}

}

if(!teste)

{

vetFinal[indice++] = vet[i];

}

}

}

}

</blockquote>

http://www.guj.com.br/posts/list/50115.java

vanzella

identação tbm seria uma boa.
hehehe

edymrex

valeu vanzella, sua lógica foi melhor que a minha testei aki, já implementei em python fiz outro código usando sua idéia junto com a minha deu certim até a próxima…!

edymrex

Cara a questão de orientação a objeto em python e mesma coisa inclusive tem mais coisa prontas do que em java e tb é muito mais simples de mecher aceita herença multipla igual c++ o conceito é o mesmo pra min Java e Python são as melhores linguagens pra se trabalhar eu mexo um pouco com as duas isto que vc falow realmente e necessário mais eu faço soh pra ter idéia…! olha o código em python mesma coisa:

class Testes:
    def lista(self):
        lista=[ 10, 10, 2, 3,33, 52, 52, 52, 52, 10, 25,36,36,36,36,25,25,12,52,25,25,12,52,897,231,21,654,21,54,21,24,545,524,21,21,21,21]
        lista2=[]
        indice=0
        teste=False
        for i in range(len(lista)):
            lista2.append(0)  
        
        for i in range(len(lista)):
            teste=False
            for j in range(indice):
                if lista[i]==lista2[j]:
                    teste=True
                    
            if not teste:
               lista2[indice]=lista[i]
               indice=indice+1
               
        print lista2
               
               
               
a=Testes()
a.lista()
Criado 6 de junho de 2007
Ultima resposta 6 de jun. de 2007
Respostas 15
Participantes 7