Проблема, с которой столкнулся мой метод history (), как мне отсортировать в соответствии с самыми старыми изменениями? - PullRequest
0 голосов
/ 08 октября 2019

Я должен создать класс Trace, который инкапсулирует переменную типа T и историю ее изменений (в виде списка). Объект Trace может быть создан с использованием статического метода, передавая его значение в качестве первого аргумента и его (необязательную) историю в качестве остальных аргументов. История всегда указывается с самым старым изменением.

Это то, что я реализовал:

import java.util.*;

@SuppressWarnings("unchecked")

class Trace<T>{
    ArrayList<T> objects;
    //int maxObjects;

    public Trace(T... words){
        this.objects = new ArrayList<T>();
        for (int i = 0; i < words.length; i++){
            objects.add(words[i]);
        }
    }

    public static <T> Trace<T> of(T... words){
        return new Trace(words);
    }

    public T get(){
        return this.objects.get(0);
    }

    public List<T> history(){
        return  this.objects;
    }

    public String toString(){
        String s = "[";
        for (int i = 0; i < this.objects.size() - 1; i++){
            String line = this.objects.get(i) + ", ";
            s += line;
        }
        s += this.objects.get(objects.size()-1) + "]";
        return s;
    }
}

Однако, когда я запустил свою программу на Jshell, я должен получить

jshell> Trace.of("hello").get()
$.. ==> "hello"
jshell> Trace.of("hello", "h", "he", "hel", "hell").get()
$.. ==> "hello"
jshell> Trace.of("hello", "h", "he", "hel", "hell").history()
$.. ==> [h, he, hel, hell, hello]

но вместо этого я получаю:

jshell> Trace.of("hello").get()
$.. ==> "hello"
jshell> Trace.of("hello", "h", "he", "hel", "hell").get()
$.. ==> "hello"
jshell> Trace.of("hello", "h", "he", "hel", "hell").history()
$.. ==> [hello, h, he, hel, hell]

Как мне изменить метод history () таким образом, чтобы он учитывал ранее добавленный hello и возвращает hello"сначала в списке, а затем ч, он, хель, ад?

1 Ответ

1 голос
/ 08 октября 2019

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

    public List<T> history(){
        ArrayList<T> history = this.objects.sublist(1, this.objects.length());
        return history.add(this.get())
    }
...