0

2 つの配列を新しい配列に連結し、順番に並べ替え、インデックスの 2 つの値を交換しようとしています。

私はJavaが初めてで、以前はCしか使用していなかったので、オブジェクトの処理に苦労しています。

main メソッドでは、2 つのオブジェクト配列 IntVector vector = new IntVector(3); を宣言します。および IntVector vector2 = new IntVector(3);

型がint[]の場合しかできないのですが、オブジェクトとして使いたいです。

パブリッククラスIntVector {

private int[] items_;
private int itemCount_;

private IntVector(int[] data, int n) {
      items_ = data.clone();
      itemCount_ = n;
    }


 public IntVector(int itemSize)
 {
  itemCount_ =0;

  if(itemSize<1) itemSize =10;

  items_ = new int[itemSize];
 }

 public void push(int value)
 {
  if(itemCount_ + 1 >= items_.length)
   overflow();

  items_[itemCount_++] = value;
 }

 public void log()
 {
  for (int i=0 ; i<itemCount_; ++i)
  {
   System.out.print(items_[i]);

   if(i<itemCount_ -1)
    System.out.println();
  }
 }

 public void overflow()
 {
  int[] newItems = new int[items_.length * 2];

  for(int i=0 ; i<itemCount_; ++i)
  {
   newItems[i] = items_[i];
  }
  items_=newItems;
  }

 public int getValue(int index)
 {
  if(index < 0 || index >= itemCount_)
  {
   System.out.println("[error][IntVector][setValue] Incorrect index=" + index);
   return 0;
  }
  return items_[index];
 }

 public void setValue(int index, int value)
 {
  if(index < 0 || index >= itemCount_)
  {
   System.out.println("[error][IntVector][setValue] Incorrect index=" + index);
   return ;
  }
  items_[index] = value;
 }


public IntVector clone()
 {

    return new IntVector(items_, itemCount_);
 }

public IntVector concat()
 {

    return null;
 }

public IntVector sort()
 {

    return null;
 }

public IntVector swap()
 {

    return null;
 }



 public static void main(String[] args)
  {
   IntVector vector = new IntVector(3);
   IntVector vector2 = new IntVector(3);

   vector.push(8);
   vector.push(200);
   vector.push(3);
   vector.push(41);

   IntVector cloneVector = vector.clone();

   vector2.push(110);
   vector2.push(12);
   vector2.push(7);
   vector2.push(141);
   vector2.push(-32);

   IntVector concatResult = vector.concat(vector2);
   IntVector sortResult = concatResult.sort();
   IntVector swapResult = sortResult.clone();


   //swapResult.swap(1,5);

   System.out.print("vector : "); vector.log();
   System.out.print("\n\ncloneVector : "); cloneVector.log();
   System.out.print("\n\nvector2 : "); vector2.log();
   System.out.print("\n\nconcatvector : "); concatResult.log();
   System.out.print("vector : "); vector.log();
   System.out.print("vector : "); vector.log();

 }

}

4

2 に答える 2

2

Apache Commons ライブラリには、配列を連結するために使用できるArrayUtilsがあります。

配列をソートするには、標準 SDK の一部であるArrays.sort()を使用できます。カスタムソートしたい場合は、コンパレータ付きのものがあります

メソッドをスワップするにはパラメーターを使用しないため、スワップする要素がわかりません。2 つのインデックスを要素にしたい場合は、次のことができます。

private swap (int pos1, int pos2) {
    //do some checking to ensure pos1 and pos2 exist here...
    int tmp = items_[pos1];
    items_[pos1] = items_[pos2];
    items_[pos2] = tmp;
}

しかし、誰もが言っているように、コレクション フレームワークを使用することもお勧めします。これにより、連結がはるかに簡単になります。そして、専用のスワップ方法があります

編集

連結に役立つ可能性のあるhow-to-concatenate-two-arrays-in-Javaを見つけました。

于 2012-09-16T09:55:38.430 に答える
1

これらすべてを典型的な Java の方法で本当に実行したい場合は、次のものが必要になります。

a)int必要な値で初期化された 2 つの配列を作成します。

b)ユーティリティ クラスをList使用して2 つの配列を変換します。メソッドArraysを参照してください。asList()

c) を作成しArrayList、上記の 2 つのリストを追加します。addAll()メソッドを参照してください。

d)List自然順序に基づいてこれを並べ替えます。メソッドを参照するCollections.sort()か、独自のメソッドを作成しComparatorて並べ替えを適用してください。

e)メソッドListを使用して、 を int 配列に変換します。toArray(T[] t)

最後intに取得した配列が最終結果になるはずです。

@owlstead がコメントしたように、Java Collections API を使用することは、低レベルで配列を自分で操作するよりもはるかに簡単です。

于 2012-09-16T09:34:56.743 に答える