Leer de un archivo y ordenar en subconjuntos

Estoy trabajando en un proyecto en el que necesito leer un montón de números enteros de punto flotante de un archivo y ordenarlos en subconjuntos. Los subconjuntos deben ordenarse por su distancia. Primero necesito sacar el primer elemento del archivo y usarlo como comparación de distancias d. Luego tome el siguiente elemento ay colóquelo en una lista separada para compararlo, luego lea el tercer elemento by compárelo con a. b debe ser al menos d aparte de a, de ser así, se colocaría en el subconjunto con a. Entonces b sería igual a a y seguirías hacia abajo hasta el final y harías un conjunto, luego comenzarías de nuevo y lo harías de nuevo hasta que no haya más elementos.

Estoy tratando de hacer esto usando listas de matrices, todo lo que tengo hasta ahora es leer el archivo y ponerlo en una lista de matrices y luego ordenarlo. Necesito ayuda para sacar el primer elemento y luego hacer las comparaciones.

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Collections;

public class FloatFromFile
{
public static void main(String[] args)
{
    Scanner file = null;
    ArrayList<Float> list = new ArrayList<Float>();

    try
    {
        file = new Scanner(new File("test.txt"));
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }

    while(file.hasNext())
    {
        if (file.hasNextFloat()) list.add(file.nextFloat());
        else file.next();
    }

    // display unsorted list
    System.err.print("Origional List is:\n");
    for (Float i: list) System.out.println(i);

    Collections.sort(list);

    // display sorted list
    System.err.print("Sorted List is:\n");
    for (Float i: list) System.out.println(i);

            ArrayList<Float> sorted = new ArrayList<Float>();
    while (file.hasNext())
    {
        Float val = file.nextFloat();
        int i = sorted.size();
        float temp = sorted.get(i-1);
        while (i > 0 && temp > val)
        {
            i--;
            temp = sorted.get(i-1);
        }
        sorted.insert(i, val);
    }
    for (Float i: sorted) System.out.println(i);

    }
}

Agregué el nuevo método, pero todavía tengo problemas para que funcione. Recibo los errores.

FloatFromFile.java:50: error: no se puede encontrar el símbolo sorted.insert (i, val); ^ símbolo: método insert (int, Float) ubicación: variable ordenada de tipo ArrayList 1 error

preguntado el 08 de noviembre de 11 a las 18:11

¿Es esta una tarea? -

¿Qué es un número entero de punto flotante? -

1 Respuestas

Hay muchos algoritmos de clasificación que puedes probar. Puede usar la ordenación por inserción, ya que de todos modos va a pasar por cada elemento uno por uno.

List<Float> sorted = new ArrayList<Float>();
while (file.hasNext()) {
  float val = file.nextFloat();
  int i = sorted.size();
  if (i == 0) {
    sorted.add(val);
    break;
  }
  float temp = sorted.get(i-1);
  while (i > 1 && temp > val) {
    i--;
    temp = sorted.get(i-1);
  }
  if (temp > val) sorted.add(0, val);
  else sorted.add(i, val);
}

Simplemente codifiqué esto en el editor para que haya errores, pero debería ser algo como esto.

respondido 10 nov., 11:17

¿Puede darme más detalles que "obtener un error"? ¿Qué tipo de error? En que linea - dee

Acabo de modificar mi respuesta. ¿Supongo que fue una excepción de puntero nulo? - dee

no, está teniendo problemas con el 'sorted.insert', ¿se le permite simplemente .insertar en la lista de matrices? Dibujó

Excepción en el hilo "main" java.lang.Error: Problemas de compilación no resueltos: el método insert (float) no está definido para el tipo ArrayList El método insert (int, float) no está definido para el tipo ArrayList El método insert (int, float) no está definido para el tipo ArrayList en FloatFromFile.main (FloatFromFile.java:47) - Dibujó

Ah, tienes razón. Es agregar en lugar de insertar. Perdón. Editando mi respuesta. - dee

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.