数组有问题删除重复项

时间:2012-10-19 17:15:38

标签: java

这是课堂作业。她让我们分两部分使用数组和数组列表。基本上她向我们展示了如何使用arraylist比阵列更容易。

我在使阵列部件工作时遇到了很多麻烦。

  
      
  1. 使用main方法创建一个名为CustomerLister1的类,该方法实例化一个名为customerName的String对象数组。阵列   应该有六个String对象的空间。使用初始化列表   将以下名称放入数组中:

    Chris  
    Lois  
    Meg  
    Peter  
    Stewie
    
  2.   
  3. 编写增强的for循环以显示名称数组。最后一个数组元素显示什么?为什么这么值?

  4.   
  5. 将字符串“Meg”和“Brian”分别添加到索引3和4中,以便该数组包含以下元素:

    Chris  
    Lois  
    Meg  
    Meg  
    Brian  
    Peter  
    Stewie
    
  6.   
  7. 编写增强的for循环以显示名称数组。

  8.   
  9. 写一个传统的for循环,检查每个元素的字符串“Meg”,如果在数组中找到,删除它,移动   剩余的元素,并显示名称数组。都是实例   “Meg”从数组中正确删除了吗?

  10.   

这是我的代码

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。我能在这做什么?

3 个答案:

答案 0 :(得分:1)

像这样更改你的if语句:

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--;
}

通过将i递减1,您将再次点击相同的索引。

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

哦,你需要正确处理数组的末尾;当没有customerName [7]时,不想尝试设置customerName [6] = customerName [7]。

编辑:啊,你需要在m开始j,而不是m + 1。这样你就可以删除customerName [m]中的“Meg”,并将所有内容向前移动。

编辑:循环的while部分正在跳过数组中的最后一个元素。

答案 1 :(得分:0)

如果您只删除其中一个Meg,可能是因为您跳过了第二个。

在删除后移动元素后,根据您的代码,您接下来要检查哪个元素?这是你需要检查的吗?

答案 2 :(得分:0)

您不仅要将一个元素向左移动,还要在最后一个索引处放置一个nil值。所以,我会提出像

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