Aquí son de dos clases, consulta de sentencia y stackov. Un arraylist se utiliza para almacenar objetos de consulta de sentencia de la clase.Pero el añadido recientemente objeto es reemplazar a la anterior.¿Cómo puedo agregar objetos para que no se anulan?

QuerySentence.java

public class QuerySentence {

    public static String query;
    public static String label;
    public QuerySentence(){

    }
    public QuerySentence(String query,String label){
        this.query = query;
        this.label = label;
    }
}  

Stackov.java

package QueryClassifier;

import java.util.ArrayList;

public class stackov {

    public static void main(String args[])
    {
        QuerySentence qs1 = new QuerySentence("What state produces the best lobster to eat","LOCATION");
        QuerySentence qs2 = new QuerySentence("What is Dick Clark's birthday","DATE");
        ArrayList<Object> doclist = new ArrayList<Object>();

            doclist.add(0,qs1);
            doclist.add(1,qs2);

            int size = doclist.size();
               while(size>0)
               {
                    QuerySentence qs3 = (QuerySentence) doclist.get(size-1);
                    System.out.println("\nin loop : " + qs3.label + qs3.query);
                    size--;
                }

    }
}   
  • trate de aplicar sangría al código correctamente. También no hay necesidad de publicar dos clases enteras, justo después de la ArrayList manipulación.

4 Comentarios

  1. 7

    El problema no viene de su bucle pero de su clase QuerySentence. Estás en la creación de objetos estáticos, lo que significa que usted no crear diferentes campos de las distintas instancias de las clases, pero la clase tendrá una única copia de los mismos.
    Entonces, ¿qué estaba pasando aquí, se han asignando un valor a su clase QuerySentence :

    QuerySentence qs1 = new QuerySentence("What state produces the best lobster to eat","LOCATION");

    Y, a continuación, la borraron con este :

    QuerySentence qs2 = new QuerySentence("What is Dick Clark's birthday","DATE");

    Como agregar dos objetos en su ArrayList, por supuesto, en el bucle que se va a imprimir dos resultados. Pero sólo los resultados en qs2. Quitar static de sus campos de declaraciones y funcionará bien :

    public String query;
    public String label;

    Usted no necesita un índice de su consulta de sentencias, mientras que la adición.

    doclist.add(qs1);
    doclist.add(qs2);

    Y también puede mejorar su bucle. Sólo podía hacer :

    ArrayList<QuerySentence> doclist = new ArrayList<QuerySentence>();
    
    //some code...
    
    for(QuerySentence q : doclist)
    {
        System.out.println("In loop : " + q.label + q.query);
    }

    Por favor, también recuerde Java convenciones : las clases deben comenzar con mayúscula (Stackov). Si usted también trabajo en la encapsulación, es mejor declarar sus campos private y crear getters y setters para ellos. Con este su for-statement debería tener este aspecto :

    for(QuerySentence q : doclist)
    {
        System.out.println("In loop : " + q.getLabel() + q.getQuery());
    }
    • El bucle for se muestra un error «para(QuerySentence p : doclist)» como no coinciden los tipos»: no se puede convertir de un tipo de elemento de Objeto a QuerySentence»
    • Eso es porque los has declarado tu ArrayList como ArrayList<Object> doclist = new ArrayList<Object>();. Uso ArrayList<QuerySentence> doclist = new ArrayList<QuerySentence>(); lugar.
    • Gracias . esta solucionado mi problema
    • Eres bienvenido. Buena suerte
    • Y no dude en aceptar la respuesta si fue de mucha ayuda 🙂
  2. 0
           public static void main(String args[])
            {
                QuerySentence qs1 = new QuerySentence("What state produces the best lobster to eat","LOCATION");
                QuerySentence qs2 = new QuerySentence("What is Dick Clark's birthday","DATE");
                ArrayList<QuerySentence> doclist = new ArrayList<QuerySentence>();
    
                    doclist.add(qs1);
                    doclist.add(qs2);
    
                    for(QuerySentence sent: docList)
                    {
                       System.out.println("\nin loop : " + sent.label + sent.query);
                    }
    
            }

Dejar respuesta

Please enter your comment!
Please enter your name here