这是我的很多代码,但这里是我认为的相关内容。
我有一个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;
}
}
这里的基本思路是我创建了一些空白数组,然后一旦我找到一本书,我创建了一个更大的新数组并抛出旧数组,将内容传输到临时数组,然后仔细备份我在删除旧的新数组之前做了更大的事情。
所以据说我有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];
答案 0 :(得分:0)
正如jlordo建议的那样:只需使用ArrayList<Integer>
代替int[]
。它实现了List<T>
接口,因此您可以使用add(T element)
,remove(T Element)
,remove(int index)
和contains(T element)
等方法。
ArrayList实际上将由一个数组支持,该数组在其容量用完后会调整大小,但您无需了解它就可以使用它;)
答案 1 :(得分:0)
使用Java集合的强大功能来获得更快,更易维护的代码。将ISBN添加到Book
:
class Book {
private String isbn;
private String title;
public Book(int isbn, String title) {
this.isbn = isbn;
this.title = title;
}
@Override
public String toString() {
return "Book [isbn=" + isbn + ", title=" + title + "]";
}
}
如果您可以将图书数组重组为Map
,则可以按标题在固定时间内查找。作为额外的好处,代码更具可读性和可维护性,没有任何数组复制:
private static List<Book> search(Map<String, List<Book>> library, String title) {
return library.get(title);
}
以下是您可以使用它的方法:
import static java.util.Arrays.asList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public static void main(String[] args) {
Map<String, List<Book>> library = new HashMap<>();
library.put("a", asList(new Book("1", "a"), new Book("2", "a")));
library.put("c", asList(new Book("3", "c")));
System.out.println(search(library, "a"));
}
这个new HashMap<>()
位是Java 7代码,我认为它可能很有趣。对以前的版本使用HashMap<String, List<Book>>
。