我的 history() 方法面临问题,如何根据最旧的更改进行排序?
Problem faced with my history() method, how do I sort according to oldest change?
我应该创建一个 Trace class 来封装 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",首先是列表中的 returns "hello",然后是 h,他,地狱,地狱?
看来您需要将历史与单词本身分开,或者您需要使历史方法更智能一些。如果输入中的第一项,即单词,应该始终是历史记录中的最后一项,那么这样的事情会起作用。
public List<T> history(){
ArrayList<T> history = this.objects.sublist(1, this.objects.length());
return history.add(this.get())
}
我应该创建一个 Trace class 来封装 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",首先是列表中的 returns "hello",然后是 h,他,地狱,地狱?
看来您需要将历史与单词本身分开,或者您需要使历史方法更智能一些。如果输入中的第一项,即单词,应该始终是历史记录中的最后一项,那么这样的事情会起作用。
public List<T> history(){
ArrayList<T> history = this.objects.sublist(1, this.objects.length());
return history.add(this.get())
}