1

私は Java のプログラミング クラスを受講していますが、動的配列に関するサポートが必要です。私は周りを見回しましたが、私のレベルの単純さでそうする方法を見つけることができません。私はクラスにあまり参加しておらず、基本を学んだばかりなので、あまり知りませんが、動的配列の作成方法を知る必要があります。

提供された 2 つのサンプル プログラムを次に示します。

public class DynamicArrayOfInt
{
    private int[] data;
    public DynamicArrayOfInt()
    {
        data = new int[1];
    }
    public int get(int position)
    {
        if (position >= data.length)
            return 0;
        else 
            return data[position];
        }
    public void put(int position, int value)
    {
        if (position >= data.length)
        {
            int newSize = 2 * data.length;
            if (position >= newSize)
                newSize = 2 * position;
            int[] newData = new int[newSize];
            System.arraycopy(data, 0, newData, data.length);
            data = newData;
            System.out.println("Size of dynamic array increased to " + newSize);
        }
        data[position] = value;
    }
}
`

2番

import java.util.Scanner;
public class ReverseWithDynamicArray
{
    public static void main(Sting[] args)
    {
        DyanamicArrayOfInt numbers;
        int numCt;
        int num;
        Scanner scan = new Scanner(System.in);
        numbers = new DynamicArrayOfInt();
        numCt = 0;
        System.out.println("Enter some postive integers; Enter 0 to end");
        while (true)
        { 
            num = scan.nextInt();
            if (num <= 0)
                break;
            numbers.put(numCt, num); 
            numCt++;
        }
        System.out.println("\nYour numbers in reverse order are:\n");
        for (int i = numCt - 1; i >= 0; i--)
        {
            System.out.println( numbers.get(i) );
        }
    }
}

2番目のものは最初のものを継承し、入力するとさらに配列を作成できるようになっています。しかし、これらを使用するとエラーが発生し、ReverseWithDynamicArray注釈処理が明示的に要求された場合にのみクラス名が受け入れられると表示されます。

4

4 に答える 4

1

これを最初のサンプル プログラムに使用します。System.arraycopy でパラメーターを変更しました。

public class DynamicArrayOfInt
{
private int[] data;
public DynamicArrayOfInt()
{
    data = new int[1];
}
public int get(int position)
{
    if (position >= data.length)
        return 0;
    else 
        return data[position];
    }
public void put(int position, int value)
{
    if (position >= data.length)
    {
        int newSize = 2 * data.length;
        if (position >= newSize)
            newSize = 2 * position;
        int[] newData = new int[newSize];
        System.arraycopy(data, 0, newData, 0, data.length);
        data = newData;
        System.out.println("Size of dynamic array increased to " + newSize);
    }
    data[position] = value;
}
}
于 2013-04-09T01:47:04.117 に答える
0

Javaでのコレクションのプリミティブ実装を見てください。多くのライブラリが利用可能です。優れた実装の 1 つはTroveです

プリミティブ コレクションを使用してスペースと時間を節約できることを願っています。

于 2015-08-30T06:34:16.163 に答える
0

System.arraycopy() に 1 つの引数がありません。次は java.lang.System.arraycopy() メソッドの宣言です。

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

src -- これはソース配列です。

srcPos -- ソース配列の開始位置です。

dest -- これは宛先配列です。

destPos -- これは宛先データの開始位置です。

長さ -- これは、コピーされる配列要素の数です。

于 2015-01-05T09:35:23.793 に答える
0

コレクションを試していないのはなぜですか?LinkedListが最適だと思います。私はあなたの要件についてあまり確信が持てませんが. ここにサンプルコードを入れようとしています:

//create a LinkedList object :
LinkedList ll=new LinkedList();

//Add your items in linked list as many as you like
ll.add("item");// you can also add on a specific position by using ll.add(index, item);

//for getting the length of your LinkedList use:
int size=ll.size();

//for reversing the list items use :

Collections.reverse(list);//or you can manually implement it by using size or length of list

/* for printing the list, simply put it in Sop
(As toString method is overriden in Collection Framework to give a output string in
the form like: [collection items separated with comma] ) */

// 注: ArrayList と Linkedlist の違いは、ArrayList が RandomAccess インターフェイスを実装しているため、任意のランダム インデックスにアクセスするための一定のアクセス時間を提供することです。したがって、取得には ArrayList を使用するのが最適ですが、ArrayList のサイズ変更といくつかのシフト操作が必要になるため、ランダムな位置に挿入するには ArrayList は適していません。

LinkedList は、双方向リンク リストを持つノードの形式でシーケンシャル アクセス用に実装されます。任意のランダム インデックスにアクセスするには、そのノードまでの次のアドレスにアクセスする必要があります。そのため、ランダムな取得/読み取りには LinkedList は適していません。ただし、ランダム インデックスに挿入する場合は、挿入する新しいノードを維持するだけで済みます。そのため、リストの間または任意の場所に挿入するには、LinkedList が適しています。

お役に立てば幸いです。

于 2013-04-09T04:30:52.073 に答える