переносить контент из одного списка в другой - PullRequest
1 голос
/ 06 марта 2020

У меня небольшая проблема, я не могу перенести контент из одного списка в другой.

Это именно то место:

MergeSort ms = new MergeSort (carList. get (). getMark ());

Как это можно сделать? Код, который я дал правильно? Я открыт для любых предложений и подсказок:)

Помогите мне запустить это, пожалуйста

Мой главный (у меня проблема здесь):

package onlytest;

import java.util.ArrayList;
import java.util.List;

public class OnlyTest {
    public static void main(String[] args) {
        List<Car> carList = new ArrayList<>();
        carList.add(new Car("Audi", 35000));
        carList.add(new Car("BMW", 39000));
        carList.add(new Car("Seat", 31000));
        carList.add(new Car("Skoda", 19000));

        MergeSort ms = new MergeSort(carList); //getMark
        ms.sort();
        ms.show();
    }

}

Класс автомобилей:

public class Car {

        private final String mark;

        private final int price;

        Car(String mark, int price){
            this.mark = mark;
            this.price = price;
        }

        public String getMark(){
            return mark;
        }

        public int getPrice(){
            return price;
        }

        @Override
        public String toString(){
            return "Mark: "+mark+", price: "+price;
        }
    }

Добавить обновление от @ Jason

И, наконец, функция MergeSort:

package onlytest;
import java.util.ArrayList;
import java.util.List;
public class MergeSort {

    private List strList;
    public  MergeSort(List<Car> input) {
        strList = input;
    }

    public void sort() {
        strList = mergeSort(strList);
    }

    List<Car> mergeSort(List<Car> whole) {
        List<Car> left = new ArrayList<>();
        List<Car> right = new ArrayList<>();
        int center;

        if (whole.size() == 1) {    
            return whole;
        } else {
            center = whole.size()/2;
            for (int i=0; i<center; i++) {
                    left.add(whole.get(i));
            }

            for (int i=center; i<whole.size(); i++) {
                    right.add(whole.get(i));
            }

            left  = mergeSort(left);
            right = mergeSort(right);

            merge(left, right, whole);
        }
        return whole;
    }

    private void merge(List<Car> left, List<Car> right, List<Car> whole) {
        int leftIndex = 0;
        int rightIndex = 0;
        int wholeIndex = 0;
        while (leftIndex < left.size() && rightIndex < right.size()) {
            if ( (String.valueOf(left.get(leftIndex)).compareTo(String.valueOf(right.get(rightIndex)))) < 0) {
                whole.set(wholeIndex, left.get(leftIndex));
                leftIndex++;
            } else {
                whole.set(wholeIndex, right.get(rightIndex));
                rightIndex++;
            }
            wholeIndex++;
        }

        List<Car> rest;
        int restIndex;
        if (leftIndex >= left.size()) {
            rest = right;
            restIndex = rightIndex;
        } else {
            rest = left;
            restIndex = leftIndex;
        }

        for (int i=restIndex; i<rest.size(); i++) {
            whole.set(wholeIndex, rest.get(i));
            wholeIndex++;
        }
    }

    public void show() {

        System.out.println("Mark:         Price:");
        for (int i=0; i< strList.size();i++) {
            System.out.println(strList.get(i));
        }
    }

}```

1 Ответ

0 голосов
/ 06 марта 2020

К сожалению, код не имеет никакого смысла. Автомобиль не должен состоять из 2 списков автомобилей. Из реализации методов ясно, что эти List должны иметь тип String и тип Integer.

    public class Car {

        private final String mark;

        private final int price;

        Car(String mark, int price){
            this.mark = mark;
            this.price = price;
        }

        public String getMark(){
            return mark;
        }

        public int getPrice(){
            return price;
        }

        @Override
        public String toString(){
            return "Mark: "+mark+", price: "+price;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...