¿Cómo puedo agregar comillas alrededor de las cadenas, sin cambiar el orden de mi Conjunto?

Michael Harrison:

Estoy haciendo un programa de marcha de Jarvis (envoltura), en el que necesito devolver un conjunto de los puntos de la envolvente convexa. Estoy consiguiendo los puntos correctos, por ejemplo [L0, L1, L2], sino que tiene que ser [ "L1", "L2", "L3"].

Al agregar los resultados al conjunto, he utilizado "\" "+ temp.point + '\'", y también ' "' + temp.point + '"', pero ambos terminan cambiando mis resultados finales.

public static Set<String> getBoundary (String sectorFile){

        Set<String> points = new HashSet<>();
        public static Set<String> getBoundary(String sectorFile){

    Set<String> points=new HashSet<>();
    Set<Point> vals=new HashSet<>();
    Vector<Point> hull=new Vector<Point>();

    try(Scanner s=new Scanner(new File(sectorFile))){

        s.useDelimiter("[\\\\|\\n\\r]+");
        while(s.hasNext()){
            String point=s.next();
            double x=s.nextDouble();
            double y=s.nextDouble();

            Point xy=new Point(point,x,y);

            xy.setPoint(point);
            xy.setX(x);
            xy.setY(y);

            vals.add(xy);

        }

        Point[]values=new Point[vals.size()];

        vals.toArray(values);

        int l=0;
        for(int i=1;i<vals.size();i++)
            if(values[i].x<values[l].x)
                l=i;

        // Start from leftmost point, keep moving  
        // counterclockwise until reach the start point 

        int p=l,q;
        do
        {
            // Add current point to result 
            hull.add(values[p]);

            q=(p+1)%vals.size();

            for(int i=0;i<vals.size();i++)
            {

                if(orientation(values[p],values[i],values[q])==2)
                    q=i;
            }

            p=q;

        }while(p!=l);  // While we don't come to first  
        // point 

        for(Point temp:hull)
            points.add(temp.point);

    }catch(FileNotFoundException e){
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return points;
}
private static class Point
{
    String point;
    double x, y;

    Point(String point, double x, double y){

        this.point = point;
        this.x=x;
        this.y=y;
    }

    private void setPoint(String i) {
        this.point = i;
    }

    private void setX (double x) {
        this.x = x;
    }

    private void setY (double y) {
        this.y = y;
    }

}

Esperado

["L0", "L1", "L2"]

Real

["L2", "L1", "L0"]
GhostCat saludos Monica C.:

Grandes ideas falsas: conjuntos hacen no tienen un orden. No se puede confiar en un HashSet para darle elementos en el mismo "orden" en absoluto .

En todo caso, se puede utilizar un LinkedHashSet (la que recibe sus elementos de inserción orden). La otra alternativa sería un TreeSet que hace implícita la clasificación de todos los elementos. Si esas dos opciones no funcionan para sus requisitos, entonces usted debería considerar utilizar una estructura de contenedor completamente diferente en su lugar.

También nota: utilizar razonablemente objetos dentro de un HashSet, su clase debe @ Override equals()y hashCode()(ver aquí , por ejemplo). Su clase de punto no lo hace, y que tarde o temprano conducir a un comportamiento muy inesperado!

Por último: por supuesto, cuando se tienen dos conjuntos, se pueden comparar (como en la teoría de conjuntos: ¿tienen idéntico contenido, o una intersección, o ninguna en absoluto intersección). Y suponiendo que la clase Point tiene un razonable equals()método, que es probablemente lo que quiere: comparar dos conjuntos que contienen exactamente los mismos puntos.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=318082&siteId=1
Recomendado
Clasificación