的我有一对夫妇的ArrayList:改造2周的ArrayList
ArrayList的一个 - > [ “52”, “52”, “52”, “52”, “67”, “67”, ArrayList b - > [“1”,“4”,“5”,“6”,“3”,“4”,“5”,“10”]
]
我想要把它们转化为:在
的ArrayList - > [ “52”, “52”, “67”, “67”]
ArrayList的BT - > [ “1” ,“4 - 6”,“3 - 5”,“1 0“]
我知道如何让b进入bt,但是我无法把头围进去。
Algorith制作b分成BT:
public static void main(String[] args) {
ArrayList<String> alist = new ArrayList<String>();
alist.add("1");
alist.add("4");
alist.add("5");
alist.add("6");
alist.add("3");
alist.add("4");
alist.add("5");
alist.add("10");
alist = groupByRange(alist);
}
static public ArrayList<String> groupByRange(ArrayList<String> alist) {
// ArrayList<String> to ArrayList<Integer>
/////////////////////////////////////////////////////////
ArrayList<Integer> alist_int = new ArrayList<Integer>();
for (String ident : alist) {
alist_int.add(Integer.parseInt(ident));
}
// ArrayList<Integer> to int[]
/////////////////////////////////////////////////////////
int[] arr = new int[alist_int.size()];
for (int i = 0; i < arr.length; i++) {
arr[i] = alist_int.get(i);
}
// Grouping by range (return ArrayList<String>)
/////////////////////////////////////////////////////////
int start, end;
end = start = arr[0];
ArrayList<String> alist_res = new ArrayList<String>();
for (int i = 1; i < arr.length; i++) {
if (arr[i] == (arr[i - 1] + 1)) {
end = arr[i];
} else {
if (start == end) {
alist_res.add(String.valueOf(start));
} else {
alist_res.add(String.valueOf(start) + " - " + String.valueOf(end));
}
start = end = arr[i];
}
}
if (start == end) {
alist_res.add(String.valueOf(start));
} else {
alist_res.add(String.valueOf(start) + " - " + String.valueOf(end));
}
for (String n : alist_res) {
System.out.println(n);
}
return alist_res;
}
问题是:为了编写任何代码,首先需要**清晰**关于您的需求。例如:什么规则告诉你(52,52,52,52)应该减少到(52,52)?规则是否说:连续两次相同的数字?或者:减少重复只发生两次?我的意思是:你首先需要**清楚**指定**规则**来进行转换。然后你开始思考“如何”。执行不明确的规则只会导致混乱和痛苦。 – GhostCat
然后请编辑您的问题;不要开始把东西放入评论! – GhostCat
我希望在我的例子中很清楚,但你是对的。我会试着解释:52分与1,4,5和6分;因此我需要(52) - >(1),(52) - >(4-6),(67) - >(3- 5)和(67)→(10) –