gpt4 book ai didi

java - 数组参数传递

转载 作者:行者123 更新时间:2023-12-01 15:41:40 25 4
gpt4 key购买 nike

我正在参加初学者的 Java 类(class)。这个实验室是让我创建一个类“Wallet”来操作代表钱包的数组。钱包包含“contents[]”数组来存储代表纸币的整数。变量“count”保存钱包中纸币的数量。在编写方法(与蛇形驱动程序类中提供的方法调用相匹配)来初始化电子钱包并添加货币/更新“计数”后,我需要将一个实例化电子钱包的数组传输到另一个电子钱包。我不知道这将如何工作,因为一个 Wallet 类只弄乱了一个名为“myWallet”的钱包,现在我需要一个名为“yourWallet”的新钱包并用“myWallet”的数组值填充它。//我应该注意,本类(class)不允许使用 Java API 库

到目前为止,我的 Wallet 类看起来像这样:

public class Wallet
{
// max possible # of banknotes in a wallet
private static final int MAX = 10;

private int contents[];
private int count; // count # of banknotes stored in contents[]

public Wallet()
{
contents = new int[MAX];
count = 0;
}

/** Adds a banknote to the end of a wallet. */
public void addBanknote(int banknoteType)
{
contents[count] = banknoteType;
count = count + 1;
}

/**
* Transfers the contents of one wallet to the end of another. Empties the donor wallet.
*/
public void transfer(Wallet donor)
{
//my code belongs here
}

...

驱动程序代码如下所示:

public class Driver
{
public static void main(String args[])
{
Wallet myWallet = new Wallet();

myWallet.addBanknote(5);
myWallet.addBanknote(50);
myWallet.addBanknote(10);
myWallet.addBanknote(5);

System.out.println("myWallet contains: " + myWallet.toString());

// transfer all the banknotes from myWallet to yourWallet
Wallet yourWallet = new Wallet();
yourWallet.addBanknote(1);
yourWallet.transfer(myWallet);
System.out.println("\nnow myWallet contains: "
+ myWallet.toString());
System.out.println("yourWallet contains: "
+ yourWallet.toString());

我想使用addBanknote()来帮助解决这个问题,但我不知道如何告诉transfer()方法将所有myWallet转移到yourWallet。

我有想法在transfer()中做这样的事情:

yourWallet.addBanknote(myWallet.contents[i]);

通过遍历来增加 myWallet 内容的 i 。这看起来非常错误,但我完全不知道如何编写这个方法。如果我的问题不清楚以至于没有人可以提供帮助,我将非常乐意收到有关如何提出更好的问题或如何使用正确的术语进行搜索的建议。感谢您提供的任何帮助。

最佳答案

我不想破坏你的作业,因为你似乎走的是正确的路,但我确实有一些评论,你可以接受也可以不接受:)

首先,我可能会将钞票类型放入一些枚举中。但这听起来有点高级,请考虑

public class Wallet {
public static final int ONE_DOLLAR_BILL = 1;
public static final int FIVE_DOLLAR_BILL = 5;
...

// looks a bit more readable to me
myWallet.addBanknote(ONE_DOLLAR_BILL);

将捐赠者的所有钞票转给自己应该不是什么大问题(一个 for 循环就可以了)但我认为如果你试图实现一个

removeBanknote(int banknoteType);

因为您不仅使用 count 作为长度,还使用作为索引变量。我的意思是你假设内容[0] ...内容[count-1]持有有效的钞票。如何在不费太多功夫的情况下删除一个?

警告:更高级

在你的情况下,我可能会选择将banknoteType设置为0,表示你的钱包中有一个空的钞票槽,并将_addBanknote(intbanknoteType)实现为:

public void addBanknote(int banknoteType) {
for (int i=0; i < contents.length; i++) {
if (contents[i] == 0) {
contents[i] = banknoteType;
count++;
return; // OK inserted banknote at the first empty slot
}
}
throw new RuntimeException("Wallet is full");
}

此时这可能有点让人不知所措。但它可以让你实现:

public void removeBanknote(int banknoteType) {
for (int i=0; i < contents.length; i++) {
if (contents[i] == banknoteType) {
contents[i] = 0; // better: NO_BANKNOTE = 0
count--;
return;
}
}
throw new RuntimeException("This wallet does not contain a banknote of type " + banknoteType);
}

请注意,在这两种方法中,当我成功删除或添加钞票时,我都会返回。只有当我找不到空闲插槽或请求的钞票时,我才会完成 for 循环并最终抛出异常,从而停止程序。

关于java - 数组参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7941081/

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