0

これは授業の宿題です。彼女は、配列と配列リストを 2 つの部分で使用するようにしています。基本的に彼女は、arraylist の使用が配列よりもはるかに簡単であることを示しています。

配列部分を機能させるのに多くの問題があります。

  1. customerName という文字列オブジェクトの配列をインスタンス化するメイン メソッドを使用して、CustomerLister1 というクラスを作成します。配列には、6 つの String オブジェクト用のスペースが必要です。初期化子リストを使用して、次の名前を配列に入れます。

    Chris  
    Lois  
    Meg  
    Peter  
    Stewie
    
  2. 名前の配列を表示する拡張 for ループを記述します。最後の配列要素には何が表示されますか? なぜその値なのですか?

  3. 文字列 "Meg" と "Brian" をそれぞれインデックス 3 と 4 に追加して、配列に次の要素が含まれるようにします。

    Chris  
    Lois  
    Meg  
    Meg  
    Brian  
    Peter  
    Stewie
    
  4. 名前の配列を表示する拡張 for ループを記述します。

  5. 文字列「Meg」の各要素をチェックする 2 番目の従来の for ループを記述し、配列内に見つかった場合はそれを削除し、残りの要素をシフトして、名前の配列を表示します。"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 が 2 番目の 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 も正しいです。[j-1] ではなく、customerName[j+1] が必要です。

ああ、配列の末尾を適切に処理する必要があります。customerName[7] がない場合、customerName[6] = customerName[7] を設定しようとはしません。

編集: ああ、j は m+1 ではなく m から開始する必要があります。このようにして、customerName[m] の「Meg」を削除し、その前にあるすべてを後方に移動します。

編集:ループのwhile部分は、配列の最後の要素をスキップしていました。

于 2012-10-19T17:19:45.807 に答える
0

1つの要素を左にシフトするだけでなく、最後のインデックスに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 に答える
0

の1つだけを削除する場合はMeg、2番目のをスキップしたことが原因である可能性があります。

削除後に要素をシフトした後、コードに従って次にどの要素をチェックしますか?それはあなたがチェックする必要があるものですか?

于 2012-10-19T17:26:57.560 に答える