0

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

我在让数组部分工作时遇到了很多麻烦。

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

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

  3. 将字符串“Meg”和“Brian”分别添加到索引 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。我可以在这里做什么?

4

3 回答 3

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 部分跳过了数组中的最后一个元素。

于 2012-10-19T17:19:45.807 回答
0

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

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

于 2012-10-19T17:26:57.560 回答
0

你不仅要向左移动一个元素,还要在最后一个索引处放置一个 nil 值。所以,我会提出类似的建议

for(int j = m+1;j < customerName.length-1;j++)
{
    customerName[j]= customerName[j+1];
}
customerName[customerName.length-1] = "";
于 2012-10-19T17:30:12.097 回答