的我有一對夫婦的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) –