Метод selectionSort, который будет сортировать ArrayList по типу - PullRequest
1 голос
/ 16 марта 2019

SOF.У меня есть проблема, с которой у меня есть некоторые трудности.

Следующий код должен построчно просеивать файл, эффективно использовать StringTokenizer, чтобы получить марку, модель, год и пробег класса автомобиля (в указанном порядке) и сохранить их в автомобиле.объект, который я затем добавляю в 2 ArrayLists, один из которых «отсортирован» по Make, а другой «не отсортирован».

Сортировка selection, которую я написал, изначально работала со строками, которые не работали по понятным причинам.

Можно ли это исправить, если выбрать selectionSort для работы с объектами (автомобилями)?Eclipse рекомендовал это мне, и текущая selectionSort является продуктом этого.

public void readFile(String file) throws FileNotFoundException //an object array that takes in string files
{  
   try {
        File myFile = new File(file); //converts the parameter string into a file
        Scanner scanner = new Scanner(myFile); //File enables us to use Scanner
        String line = scanner.nextLine(); //reads the current line and points to the next one
        StringTokenizer tokenizer = new StringTokenizer(line, ","); //tokenizes the line, which is the scanned file

        int tokenCount = new StringTokenizer(line, ",").countTokens(); //counts the tokens 
        while (tokenizer.hasMoreTokens()){
            if(tokenCount > 4) {
               System.out.println(" Not 4 tokens");
            }
            else {
               String CarMake = tokenizer.nextToken(); //since car is in order by make, model, year, and mileage
               String CarModel = tokenizer.nextToken();
               int CarYear1 = Integer.parseInt(tokenizer.nextToken());
               int CarMileage1 = Integer.parseInt(tokenizer.nextToken()); //converts the String numbers into integers
               Car cars = new Car(CarMake, CarModel, CarYear1, CarMileage1); //since the car has a fixed order 
               arraylist.add(cars); //add the cars to the unsorted array
            }
        }
        scanner.close(); //close the scanner  
    } catch (FileNotFoundException f){
        f.printStackTrace();
    }
    arraylist2.addAll(arraylist);
    selectionSort(arraylist2);
}

public static void selectionSort(ArrayList<Car> arraylist) //Selection sort using strings
{
  for (int i = 0; i <= arraylist.size(); i++)
  {
    // Look through the unsorted strings (those at j or higher) for the one that is first in order
    int min = i;
    for (arraylist[i].getMake.compareTo(arraylist[min].getMake) < 0) { //use the inherent string compareTo
          min = k;  
    }
    String temp = arraylist[i].getMake; //swapping
    arraylist[i].getMake = arraylist[min].getMake;
    arraylist[min] = temp;
  }
}

Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 16 марта 2019

Причина, по которой ваш новый код не работает, заключается в том, что вы меняете только марки автомобилей, а не полные Car объекты.

Это должно быть:

Car temp = arraylist[i]; //swapping
arraylist[i] = arraylist[min];
arraylist[min] = temp;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...