Contar os elementos de uma instancia

3 respostas
J
bom dia estou com um problema para contar os elementos de uma instancia se puderem me ajudar
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

class MinhaLista<T> {
private List<T> itens = new ArrayList<T>();
public void add (T item) { itens.add(item); }
public T primeiro() { return itens.get(0); }
public T ultimo() {return itens.get(itens.size()-1);}

public T aleatorio() {
return itens.get((int)(Math.random()*(itens.size()-1)));}

public String pertence(T object) {
  if( itens.contains(object))
       return "Pertence";
       return "não Pertence";}

public String igual(MinhaLista<T> ml2) {
Iterator<T> i = itens.iterator();
Iterator<T> i2 = ml2.itens.iterator();
    while (i.hasNext() && i2.hasNext()) {
       if (i.next() != i2.next())
         return "não são iguais";}
    
         if (!i.hasNext() && !i2.hasNext())
               return "são iguais";
return "não são iguais";}

public String contida(MinhaLista<T> ml2) {
Iterator<T> i = itens.iterator();
List<T> l2 = ml2.itens;
  while (i.hasNext()) {
   if (!l2.contains(i.next()))
   return "Não esta Contida";}
  
return "Esta contida";}

public String contem(MinhaLista<T> ml2) {
    if( "Esta contida".equals(ml2.contida(this)))
         return "Contem";
return "Não contem";}

   
public MinhaLista<T> intersecao(MinhaLista<T> ml2) {
MinhaLista<T> mlNova = new MinhaLista<T>();
Iterator<T> i = itens.iterator();
     while (i.hasNext()) {
         T obj = i.next();
          if ("Pertence".equals(ml2.pertence(obj)))
              mlNova.add(obj);}
     
return mlNova;}

public void exibe() {
   Iterator<T> i = itens.iterator();
     while (i.hasNext()) {
       System.out.print(i.next().toString());}     
       System.out.println();}

public String Concatena(MinhaLista<T> ml2,MinhaLista<T> ml){
   return ml2.aleatorio().toString()+ml.aleatorio().toString();}

public int ContaElemento(MinhaLista<T> ml2){ // o metodo esta dando um loop infinito
     int cont=0;
       while (!"".equals(ml2.itens.toString())) {
          cont++;          
       }
        return cont ;
}
    

}
public class ControleLista {
public static void main(String[] args) {
MinhaLista<String> ml = new MinhaLista<String>();
MinhaLista<String> ml2 = new MinhaLista<String>();
ml.add("primeiro");
ml.add("segundo");
ml2.add("primeiro");
ml2.add("segundo");

System.out.println("a) Ã?ltimo elemento: " + ml.ultimo());
   System.out.println();
System.out.println("b) Elemento qualquer: " +ml.aleatorio());
  System.out.println();
System.out.println("C) Terceiro pertence a lista? " + ml.pertence("terceiro"));
  System.out.println();
System.out.println("d)As listas são iguais? " + ml.igual(ml2));
  System.out.println();
System.out.println("e)L1 está contida em L2? " +ml.contida(ml2));
  System.out.println();
System.out.println("f)L1 contém L2? " +ml.contem(ml2));
  System.out.println();
System.out.print("g)Calcula interseção: ");
ml.intersecao(ml2).exibe();
  System.out.println();
System.out.println("i) Os Itens Concatenados São:"+ml.Concatena(ml2,ml));
  System.out.println();
System.out.println("j) A quantidade de elementos: "+ml.ContaElemento(ml2));
}}

3 Respostas

nel

Cara,

eu achei sua classe confusa, talvez porque esteja mal edentada (aqui no post do GUJ) ou por realmente ser confusa.
Como estamos falando em generics, o seu T pode ser qualquer coisa, o que torna mais complicado a análise e teria de olhar método a método de sua classe.

Todavia, vejo que você usa o toString() no seu laço de repetição para que faça a comparação, três adendos.

1 - A cada iteração você invoka o método toString(), porque não fazer isso fora do laço de repetição e usar a String de retorno no laço? :slight_smile:
2 - Provavelmente terás de sobrescrever o método toString() de Object, para que ele tenha a ação esperada. O que deve estar acontecendo é que o método toString() deve estar retornando o valor contido no método Object, por isso nunca vai ser vazio ou “”, como queira.
3 - Se usar apenas equals("") a String terá de ser exatamente isso. Eu costumo usar minhaString.trim().isEmpty() quando quero confirmar se a String é vazia ou não, pois dificilmente eu considero que " " é um preenchimento válido.

Forte abraço.

J

Eu ja tentei com o isEmpty mas da a mesma coisa eu uso o toString para tentar contar os elementos da instancia mas nao ta funcionando,era para queria criar um metodo que retornasse a quantidade de elementos da instancia

J

Consegui foi simples assim

public int ContaElemento(MinhaLista<T> ml2){ List<T> l2 = ml2.itens; return l2.size(); }}

valeu

Criado 18 de outubro de 2011
Ultima resposta 20 de out. de 2011
Respostas 3
Participantes 2