0

我正在尝试将两个数组连接成新数组,按顺序排序,并交换两个索引值。

我对java有点陌生,之前只使用C,所以很难处理一个对象。

在 main 方法中,它声明了两个对象数组 IntVector vector = new IntVector(3); 和 IntVector vector2 = new IntVector(3);

如果类型是 int[],我只能这样做,但我想用作对象我应该如何编写 concat、sort 和 swap 方法?

公共类 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() 。如果您想自定义排序,则有一个带有比较器的

交换你的方法不需要参数,所以我不确定你想要交换什么元素。如果您想在两个索引中添加元素,您可以这样做

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

但正如大家所说,我也建议使用 Collections 框架。它将使串联更简单。并且有专门的swap方法

编辑

我刚刚找到了how-to-concatenate-two-arrays-in-java,它可能有助于连接。

于 2012-09-16T09:55:38.430 回答
1

如果您真的想以典型的 Java 方式完成所有这些操作,则需要以下内容:

a) 创建两个int用必要值初始化的数组。

b) 将这两个数组转换为List使用Arrays实用程序类。见asList()方法。

c) 创建一个ArrayList并将上述两个列表添加到其中。见addAll()方法。

d)List根据自然顺序对其进行排序。查看Collections.sort()方法或创建自己的方法Comparator并应用排序。

e)使用该方法将 转换List为 int 数组。toArray(T[] t)

你得到的最后一个int数组应该是最终结果。

正如@owlstead 评论的那样,使用 Java Collections API 比自己进行低级操作数组要简单得多。

于 2012-09-16T09:34:56.743 回答