私が持っているコードはたくさんありますが、関連するビットは次のとおりです。
スタブとしてサイズ 10 で作成した配列があります。どのサイズの配列を取得できるかは事前にわかりませんが、10 を超えることはできません。
int[] arrTracker = new int[10];
arrTracker = MyLibrary.SearchForABookISBN( true, AShelf, userParsedArr, aUserTitle );
for ( int j = 0; j < 10; j++)
{
pln(AShelf[arrTracker[j]]);
}
理論上の上記のコードでは、配列を取得したら、それをループして内容を表示します (基本的に、探している本が MyLibrary オブジェクト配列で見つかった場所になります。
「userParsedArr」は、ユーザーが入力した ISBN です。
public int[] SearchForABookISBN ( boolean aFlag, Book[] anArray, int[] AnISBN, String aTitle )
{
//This one was difficult.
int length = anArray.length;
int[] AnotherArr = new int[0];
int[] AnotherArrTemp = new int[0];
int[] AnotherArrNew = new int[0];
boolean UFoundMe = false;
if ( aFlag == true )
{
for ( int i = 0; i < length; i++)
{
//Assume we find the ISBN
if ( ( anArray[i].Title.equals(aTitle) ) )
{
int counter = 0;
for ( int j = 0; j < 9; j++)
{
if (anArray[i].ISBN[j] == AnISBN[j])
{
counter++;
}
else
{
UFoundMe = false;
break;
}
if ( counter == 9 )
{
UFoundMe = true;
}
}
if ( UFoundMe == true )
{
//Create our 'main' tracker at 1 + size of previous array.
AnotherArrNew = new int[1 + AnotherArr.length];
if ( AnotherArrTemp.length > 0 )
{
//Copy values into a temp array.
//Make a new temp array
for ( int m = 0; m < AnotherArr.length - 1; m++ )
{
AnotherArrNew[m] = AnotherArrTemp[m];
}
}
AnotherArrNew[(AnotherArrNew.length) - 1] = i;
AnotherArrTemp = new int[AnotherArrNew.length];
for ( int n = 0; n < AnotherArr.length; n++ )
{
AnotherArrTemp[n] = AnotherArrNew[n];
}
System.out.println(anArray[i]);
}
}
}
}
return AnotherArrNew;
}
}
ここでの基本的な考え方は、いくつかの空の配列を作成し、本を見つけたら、1 サイズ大きい新しい配列を作成し、古い配列を捨てて、内容を一時配列に転送し、以前に作成したもののバックアップを慎重に作成することです。古い新しい配列を削除して大きくします。
おそらく、私は 10 冊の本を持っており、そのうちの 3 冊は同じタイトルと ISBN を持っているとします。私は 3 の配列を返すことを期待していますが、20 冊の本が与えられ、それらすべてが同じである場合はどうなるでしょうか。
MyLibrary.SearchForABookISBN( true, AShelf, userParsedArr, aUserTitle ).length は、取得している配列のサイズを事前に知らせるために機能しますか? したがって、宣言するだけです:
int aLength = MyLibrary.SearchForABookISBN( true, AShelf, userParsedArr, aUserTitle ).length
int[] arrTracker = new int[aLength];