2012-10-19 89 views
0

這是用於課堂作業。她讓我們分兩部分使用數組和列表。基本上她向我們展示瞭如何使用ArrayList比數組更容易。數組故障刪除重複項

我有很多麻煩讓數組部分工作。

  1. 創建名爲CustomerLister1與實例字符串對象數組稱爲客戶名稱的主方法類。數組 應該有六個String對象的空間。使用一個初始化列表來 把下面的名字放入數組:

    Chris 
    Lois 
    Meg 
    Peter 
    Stewie 
    
  2. 寫for循環來顯示名稱的陣列增強。最後一個數組元素顯示什麼?爲什麼這是價值?

  3. 添加字符串「梅格」和「布賴恩」到索引2,3和4,分別爲以使陣列包含下列元素:

    Chris 
    Lois 
    Meg 
    Meg 
    Brian 
    Peter 
    Stewie 
    
  4. 收件for循環來顯示陣列的增強名字。

  5. 編寫第二個傳統for循環,檢查字符串「Meg」的每個元素(如果在數組中找到),將其移除,移動其餘元素並顯示名稱數組。 「Meg」的實例 是否正確地從數組中移除?

這是我的代碼

public class CustomerLister1 
{ 

public static void main(String[] args) 
{ 
    String[] customerName = new String[7]; 
    customerName[0] = "Chris"; 
    customerName[1] = "Lois"; 
    customerName[2] = "Meg"; 
    customerName[3] = "Peter"; 
    customerName[4] = "Stewie"; 

    for (int i = customerName.length-1;i > 3; i--) 
    { 
     customerName[i] = customerName[i - 2]; 
    } 
    customerName[3] = "Meg"; 
    customerName[4] = "Brian"; 

    for (int m = 0; m <= customerName.length-1; m++) 
    { 
     if(customerName[m].equals("Meg")) 
     { 
      for(int j = m+1;j < customerName.length-1;j++) 
      { 
       customerName[j]= customerName[j-1]; 

      } 

     } 

    } 

    for (String element : customerName) 
    { 

     System.out.println(element); 
    } 

} 
} 

我曾嘗試與元素位置搞亂。它不會正確打印,因爲我有meg背對背,它會用第二個meg替換第一個meg。我能在這裏做什麼? 1

if(customerName[m].equals("Meg")) 
{ 
    for(int j = m;j < customerName.length;j++) 
    { 
     if(j < customerName.length-2) { 
      customerName[j]= customerName[j+1]; 
     } else { 
      customerName[j]=""; 
     } 
    } 
m--; 
} 

通過遞減我,你會再次打同一指數:

+0

它說customerlister應該是6字符串,她的意思是7 – Eons384

+0

它有一個循環? –

回答

1

更改您的if語句這樣。

而且AmitD是正確的;你需要customerName [j + 1],而不是[j-1]。

哦,你需要正確處理數組的末尾;當沒有customerName [7]時,不想嘗試設置customerName [6] = customerName [7]。

編輯:啊,你需要從m開始,而不是m + 1。通過這種方式,您可以刪除customerName [m]處的「Meg」,並將其前進的所有內容向後移動。

編輯:而循環的while部分跳過數組中的最後一個元素。

+0

你是不是要減少'm'?此外,'customerName.length'不是用於名稱數量的正確計數。該代碼將需要一個單獨的變量來表示有多少名稱是有效的。 –

+0

如果我遞減計數器,它將進入無限循環 – Eons384

+0

正確的,遞減m。而有效名稱數量的單獨變量會很好,但我不會_think_這是絕對必要的 - 是不是一個java數組將填充空字符串?將這些複製到對方不會傷害任何東西。 – user1618143

0

如果您只刪除其中一個Meg,可能是因爲您跳過了第二個。

移除移除元素後,您根據代碼檢查下一個元素?這是你需要檢查的嗎?

0

你不僅需要一個元素向左移動,但也把零值的最後一個索引。所以,我會提出類似

for(int j = m+1;j < customerName.length-1;j++) 
{ 
    customerName[j]= customerName[j+1]; 
} 
customerName[customerName.length-1] = "";