Чтение из файла и сортировка по подмножествам - PullRequest
0 голосов
/ 08 ноября 2011

Я работаю над проектом, в котором мне нужно прочитать целые числа с плавающей точкой из файла и отсортировать их по подмножествам. Подмножества должны быть отсортированы по их расстоянию друг от друга. Мне нужно сначала вытащить первый элемент из файла и использовать его в качестве сравнения расстояний d. Затем возьмите следующий элемент a и поместите его в отдельный список для сравнения, затем прочитайте третий элемент b и сравните его с a. b должен быть как минимум на расстоянии d от a, в таком случае он будет помещен в подмножество с помощью a. Тогда b будет равно a, и вы будете двигаться вниз до конца и сделаете их набором, тогда вы начнете сначала и сделаете это снова, пока не останется больше элементов.

Я пытаюсь сделать это, используя списки массивов, все, что у меня пока есть, - это чтение файла и помещение его в список массивов, а затем сортировка. Мне нужна помощь в извлечении первого элемента и последующем сравнении.

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);

    }
}

Я добавил новый метод, но у меня все еще возникают проблемы с его работой Я получаю ошибки

FloatFromFile.java: 50: ошибка: не удается найти символ sorted.insert (я, вал); ^ символ: метод вставки (int, Float) расположение: переменная отсортирована по типу ArrayList 1 ошибка

1 Ответ

0 голосов
/ 08 ноября 2011

Есть множество алгоритмов сортировки , которые вы можете попробовать. Вы можете использовать сортировку вставкой, так как вы все равно будете проходить каждый элемент по одному.

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);
}

Просто закодировал это в редакторе, чтобы могли быть ошибки, но должно быть что-то вроде этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...