0

プログラミングの宿題に取り組んでいて、少し迷っています。プロジェクトは、listarray の偶数/奇数要素を選択し、別の配列に格納することです。各要素の偶数ではなく、要素自体であるため、配列に値「1,2,5,7,9」があり、偶数要素が返された場合、「1, 5, 9」になります。また、再帰を使用する必要があります。誰かが私に出発点やアドバイスを与えることができますか. 2 つの要素から始めて 2 番目の要素を取得し、そこから構築することについてですが、2 番目のパスでどのように追加されるかはわかりません

 public static ArrayList<Integer> even(ArrayList<Integer> list)
 ArrayList<Integer> evenlist = ListMethods.deepClone(tList);//make copy of list
 if (evenlist.size()<=1)    // The list is empty or has one element
 {
//        return null;// Return the list as is
 }

if 
(evenlist.size()==2)
{
 //return right element
 //call method again
 //add to list
}
4

3 に答える 3

2

疑似コード

int[] evens,odds;

 function categorize(List<Integer> in,int idx)
   if(idx>=in.length)
         return
   int cur = in[idx]
   if(even), add to evens
   else add to odds
    categorize(in,idx+1)
于 2013-02-17T15:00:47.823 に答える
1

これは私が完了したばかりの宿題に似ているように聞こえるので、そうである場合 (そしてあなたは私のクラスにいます!)、カバーしていない用語を使用するように指示することはありません。実践のための新しい何か(私たちがしなければならないことを超えて)。

まず、終了条件を設定します。既に述べたように、既存の ArrayList から新しい ArrayList を作成する必要があります。リストが空になるまで、既存の ArrayList から項目を削除し、偶数 (または奇数) のインデックスにある整数を格納します。

したがって、終了条件は次のとおりです。

if (evenList is Empty)
    return evenList;

次に、手順を実行します。最初の配列に奇数の偶数のステップがあるかどうかを判断することをお勧めします。たとえば、次のようになります。

if (evenList has Even Elements)
    int holderForIntsAtEvenElements = last evenList EVEN element

最後の要素から開始することに注意してください。そのため、再帰メソッドを終了すると、これが新しい ArrayList に追加される最後の要素になり、番号順になります。これを行うには、この投稿が興味深いと思うかもしれません: What does this boolean return mean?

次に、リストから最後の要素を削除し、メソッドを再帰的に呼び出します。

最後に、終了条件に達して出始めたら、格納してきた int をそれらに追加します。たとえば、次のようになります。

evenList.add(holderForIntsAtEvenElements);
return evenList;

それは、リストに偶数の要素がない場合に最初の要素をどうするかという 1 つの問題を解決するものではありません。これはコードと疑似コードの適切な組み合わせであり、うまくいけば、正しい軌道に乗るのに役立ちます。

于 2013-02-17T15:44:22.157 に答える
1

次のような単純なforループを使用できます。

for (int i = 0; i < list.size(); i += 2) {
    System.out.println(list.get(i));
}

再帰を使用する必要がある場合の手順の概要を次に示します。(あなたは何も試しておらず、宿題のようなものなので、具体的に何をすべきかは説明しません。)

  1. 最初の要素を取得して保存する
  2. リストから (新しい) 最初の要素を削除する
  3. 自分に電話する
于 2013-02-17T14:54:12.463 に答える