4

是的,这是一个家庭作业问题,所以给metehkodezplsthx!:)

无论如何,这就是我需要做的:
我需要有一个类,它的属性数组中包含另一个类的对象。在我看来,正确的方法是使用 LinkedList、Vector 或类似的东西。不幸的是,上次我这样做时,我从教授那里得到了火和硫磺,因为根据他的信念,我使用的是高级的东西,而没有了解基础知识。

现在下一个明显的解决方案是创建具有固定数量元素的数组并添加检查以查看数组是否已满。如果它已满,他们将创建新的更大的数组,将旧数组的数据复制到新数组并将新数组返回给调用者。如果它大部分是空的,他们会创建新的更小的数组并将数据从旧数组移动到新数组。对我来说,这看起来有点愚蠢。对于我的家庭作业,数组中的元素可能不会超过 3 个,但我想制作一个可扩展的解决方案,而无需手动计算有关数组填充频率的统计信息,添加的新元素的平均数量是多少,然后使用计算结果来计算新数组中的元素数等。

顺便说一句,不需要从数组中间删除元素。

有小费吗?

4

6 回答 6

6
class test {
    private Object[] objects;
    private int size;

    public test() {
        objects = new Object[10];
        size = 0;
    }

    public void push(Object o) {
        if (objects.length == size) {
            throw new RuntimeException("This wouldn't happen if I didn't have to reinvent the wheel");
        }
        objects[size] = o;
        size++;
    }

    public Object pop() {
        size--;
        Object o = objects[size];
        objects[size] = null;
        return o;
    }
}

只是在开玩笑。我认为你最好的办法是实现你自己的链表,然后在你的课堂上使用它。就像是:

class Element {
    Object val;
    Element next;
    Element prev;

    public Element(Object val, Element next, Element prev) {
        this.val = val;
        this.next = next;
        this.prev = prev;
    }

}

class LinkedList {
    Element head;
    Element tail;

    public void add(Object o) {
        Element el = new Element(o, null, tail);
        tail.next = el;
    }

    public Object remove() {
        Element o = tail;
        tail = o.prev;
        tail.next = null;
        return o.val;
    }
}
于 2010-05-26T15:48:59.560 回答
4

您要做的一件事是,当您需要增加数组的大小时,创建一个大小是旧数组两倍的数组。同样,如果您需要缩小 hte 数组的大小,请仅在数组半满时进行。

这将使您不必做更少的数组副本。

这样做将有必要保留一个变量来跟踪数组的实际大小,因为数组的长度不能准确地表示实际大小。

于 2010-05-26T15:24:08.197 回答
3

要将现有数组复制到更小或更大的数组中,您可能会发现它System#arrayCopy()很有用。

开球示例:

Object[] originalArray = new Object[3];
// ...
Object[] resizedArray = new Object[originalArray.length + 2]; // Grow with 2.
System.arrayCopy(originalArray, 0, resizedArray, 0, originalArray.length);

这会将整个长度的项目复制originalArrayresizedArray. 末尾的 2 个插槽resizedArray仍然null可以用于其他物品。

这必须让你开始。祝你好运 :)

于 2010-05-26T15:23:57.073 回答
1

它是用于数据结构类吗?听起来你的教授希望你实现自己的链表数据结构或类似的东西,而不是使用 Java 提供的那种。Google 和您的教科书是您的朋友。

于 2010-05-26T15:24:33.967 回答
1

如果我没记错的话,ArrayList 类的工作原理是有一个固定大小的数组(初始容量是你设置的任何值),它几乎按照你描述的方式调整大小。

你可以使用一个链表,虽然听上去你的教授希望你自己编程这些东西,所以创建你自己的类来展示你知道它是如何工作的?

于 2010-05-26T15:29:30.750 回答
-1

我认为这是非常简单的方法:p 我们不能在 C 中做,但可以在 java 中做

package javaapplication21;

import java.util.Scanner;
public class JavaApplication21 {
    public static void main(String[] args) {
       int a;
       Scanner obj=new Scanner(System.in);
       System.out.print("Enter array size=");
       a=obj.nextInt();
       int b[]=new int[a];
       for(int i=0;i<b.length;i++){
          System.out.println(b[i]+i);
       }
   }
}
于 2012-05-15T07:17:36.687 回答