我作為一個Java菜鳥,只會用簡單的辦法來處理這個問題。如果有大神看到,請略過,感激不盡!
所以首先先分析這道題目:數組中重復的數據進行刪除,並且要讓數組里的數據按原來的順序排列,中間不能留空。
既然要刪除重復的項目,那么以我現在的功力,只能用循環嵌套來處理。所以做一個循環,在循環體內部再嵌套一個循環,作用就是讓數組的第一個數據和后面的每一個數據做對比。
然后在內循環體里面做判斷,如果遇到相同數據,那么就讓后面的數據都往前移動一個位置來覆蓋第一個數據,以此類推。因此想要達到這個效果,內層循環里面的判斷里面還要嵌套一個循環來做一件事情,就是讓數據從后往前移動一個位置。注意:如果有重復項,那么當最后一個數據往前移動之后,必須要將最后一個位置置為空,否則就會出現程序打印出來的時候,最后面的幾個數據完全相同。
具體的細節請看如下程序分析:
public class home4 {
public static void main(String[] args) {
String [] arr = {"A","B","C","D","E","F","G","A","B","C"};
System.out.print("原始數據為:");
for (int i = 0; i < arr.length; i++) {//打印出原始數據
System.out.print(" " + arr[i]);
}
for (int i = 0; i < arr.length-1; i++) {//對比判斷重復數據
if (arr[i+1]==null) {//判斷外層數組是否為空,若為空就退出循環
break;
}
for (int j = i+1; j < arr.length; j++) {//進行循環對比,找出重復項目
if (arr[i].equals(arr[j])) {//遇到重復項,將后面的數據往前移動,覆蓋重復項
for (int j2 = i; j2 < arr.length-1; j2++) {//等於i的目的是保證每次只往前移動一個位置
arr[j2]=arr[j2+1];
}
arr[arr.length-1] = null;//將最后一個數據置為空,避免重復
i--;//移動后,再讓當前數據和后面的數據進行對比
break;//結束本次循環
}
}
}
System.out.println();
System.out.print("去掉重復內容后的結果為:");
for (int i = 0; i < arr.length; i++) {//打印輸出最后的結果
System.out.print(arr[i]+" ");
}
}
}
寫了半天,沒有功能也有苦勞,請默默地點個贊,謝謝!