gpt4 book ai didi

java - 更改 for 循环的初始值

转载 作者:行者123 更新时间:2023-12-02 02:23:18 26 4
gpt4 key购买 nike

我正在尝试在我的代码中添加书籍。假设有人想添加 30 本书,迭代从 0 到 30 次就可以了。如果他稍后想再添加 10 本书怎么办,那么它根本没有任何用处,因为我需要它们从 30 到 40 开始。我该如何解决这个问题?

int currentBooks = 0;
do {
System.out.print("How many books would you like to add? ");
int nbBooks = sc.nextInt();
// Add nbBooks amount to inventory array

if (inventory.length-currentBooks >= nbBooks) {
for (int w = 0; w < inventory.length; w++) {
inventory[currentBooks] = new Book();
currentBooks = w;
}
valid = true;
break password;
}
else {
System.out.print("You can only add " + inventory.length + " books.\n");
add = true;
}
} while(add);

最佳答案

普通数组(在您的例子中为 Book[] )的缺点是它的长度无法更改。 您应该使用List (尽管事实上由于某种奇怪的原因你不被允许这样做)。

随着List界面

因此,您最好使用List接口(interface)(及其实现,例如 ArrayList ),它在内部使用数组,但如果需要,它会自动扩展其内部数组,因此不必担心它:

// List is an interface, so we need a certain implementation of that interface
// to use. ArrayList is a good candidate:
List<Book> books = new ArrayList<>();

现在我们创建了一个ArrayList初始长度为0。长度可以使用 size() 获得方法,而不是数组的 length属性。

int nbBooks = sc.nextInt();
for (int i = 0; i < nbBooks; i++) {
books.add(new Book());
}

没有List界面

但是,如果您不能或不得使用 List界面,您有几个选项,具体取决于您想要什么。

其中一个选项是创建一个类来保存数组 Book s、长度作为属性,因为您必须将长度存储在某处:

class BookList {

private Book[] books = new Book[100]; // Or some maximum length
private int size;

public void add(Book book) {
this.books[this.size] = book;
this.size++;

// You could optionally 'extend' the array with System.arraycopy
// when the internal array exceeds 100, but I'll leave that to
// you
}
}

请注意,这实际上是 ArrayList 的一种自制版本。类。

在您的情况下,您已定义 inventory某处。您需要介绍inventorySize或者其他什么,每次添加一本书时,您也会增加 inventorySize变量。

Book[] inventory;
int inventorySize;

和你的方法:

...
System.out.print("How many books would you like to add? ");
int nbBooks = sc.nextInt();

for (int i = 0; i < nbBooks; i++) {
this.inventory[this.inventorySize + i] = new Book();
}
this.inventorySize += nbBooks;

您还可以检查最后一个非空元素(或第一个空元素)并考虑数组的长度,但这将是非常糟糕的代码,因为,例如,您必须遍历数组来计算它的长度,这在性能上可能会非常昂贵。

关于java - 更改 for 循环的初始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48183780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com