Java 在每个循环中正确使用数组名称

Java 在每个循环中正确使用数组名称,java,arrays,foreach,Java,Arrays,Foreach,给出以下示例代码,请帮助我回答以下问题并给出提示 public class Coin { private String myColor; private int mySideOne; private double mySideTwo; public Coin(String Color, int SideOne, double SideTwo) { myColor= Color; mySideOne = SideOne;

给出以下示例代码,请帮助我回答以下问题并给出提示

 public class Coin
    {
    private String myColor;
    private int mySideOne;
    private double mySideTwo;


    public Coin(String Color, int SideOne, double SideTwo)
    {
    myColor= Color;
    mySideOne = SideOne;
    mySideTwo = SideTwo;
    }
    //accessors getColor(), getSideOne(), and getSideTwo()

}

public class Total
{
private int myNumCoins;
private Coin[] moneyList;

//constructor
public Total(int myCoins)

{

myNumCoins = numCoins;
moneyList = new Coins[numCoins]
String color;
int mySideOne;
double mySideTwo;
for (int i = 0; i<numCoins; i++)
{




}
}
在totalMoney方法中,哪个表示计算金额*/的正确代码

 A. for (Coin t: moneyList)
    total+= moneyList.getSideTwo();

    B. for (Coin t: moneyList)
    total+=t.getSideTwo();

我认为A是对的,因为B中的“t”在代码中不存在。我怎么会错呢

答案是B,因为当你说Ticket t时,你在循环中声明了t。循环迭代ticketList,t代表列表中的每个Ticket。

答案是B,因为当你说Ticket t时,你在循环中声明了t。循环迭代ticketList,t代表列表中的每个Ticket。

让我们使用:

public double totalPaid()
{
    double total = 0.0;
    for (Ticket t:tickList)
        total+= tickList.getPrice();
    return total;
}
tickList
Ticket
s的数组。数组是一个对象,它只有一个名为
length
静态final
字段。因此,
tickList
不能有
getPrice
。这意味着,选项A不会编译


让我们使用B来评估代码:

public double totalPaid()
{
    double total = 0.0;
    for (Ticket t:tickList)
        total+=t.getPrice();
    return total;
}
你在这里说:

我认为A是对的,因为B中的“t”在代码中不存在。我怎么会错呢

实际上,
t
是在增强的
for
循环语句中声明和使用的变量
t
来自类型
Ticket
,它将获取存储在
tickList
中的每个
Ticket
对象引用的值。增强的
for
循环可转换为以下数组形式:

for (int i = 0; i < tickList.length; i++) {
    Ticket t = tickList[i];
    //use t in this scope
    //in this case, it's used to accumulate the value of total
    total += t.getPrice();
}
for(int i=0;i

这使得B成为这个问题的解决方案。

让我们使用A来评估代码:

public double totalPaid()
{
    double total = 0.0;
    for (Ticket t:tickList)
        total+= tickList.getPrice();
    return total;
}
tickList
Ticket
s的数组。数组是一个对象,它只有一个名为
length
静态final
字段。因此,
tickList
不能有
getPrice
。这意味着,选项A不会编译


让我们使用B来评估代码:

public double totalPaid()
{
    double total = 0.0;
    for (Ticket t:tickList)
        total+=t.getPrice();
    return total;
}
你在这里说:

我认为A是对的,因为B中的“t”在代码中不存在。我怎么会错呢

实际上,
t
是在增强的
for
循环语句中声明和使用的变量
t
来自类型
Ticket
,它将获取存储在
tickList
中的每个
Ticket
对象引用的值。增强的
for
循环可转换为以下数组形式:

for (int i = 0; i < tickList.length; i++) {
    Ticket t = tickList[i];
    //use t in this scope
    //in this case, it's used to accumulate the value of total
    total += t.getPrice();
}
for(int i=0;i

这使得B成为这个问题的解决方案。

事实上,t确实存在于foreach循环语句中。A甚至不会编译,数组上也没有getPrice()方法。我可能错了,但您没有勾选列表,如果确实存在,请确保它是正确的static@JimW这是对的。选项A不会编译。选项B是增强型for循环,其中
t
是一个局部变量,就像
i
在常规for中一样loop@AmandaKeliustickList是票据对象的集合。该集合有自己的属性,如“我有多少个对象”,集合中的每个项目都有自己的属性集,如“价格”。对于一个真实世界的例子,想象一下一个停车场,里面停满了汽车。停车场可能已经满了,你可以启动其中一辆车,但你不能“启动”停车场。事实上,t确实存在于foreach循环语句中。A甚至不会编译,数组中也没有getPrice()方法。我可能错了,但你没有勾选列表,如果你确实有,请确保它是static@JimW这是对的。选项A不会编译。选项B是增强型for循环,其中
t
是一个局部变量,就像
i
在常规for中一样loop@AmandaKeliustickList是票据对象的集合。该集合有自己的属性,如“我有多少个对象”,集合中的每个项目都有自己的属性集,如“价格”。对于一个真实世界的例子,想象一下一个停车场,里面停满了汽车。停车场可能已经满了,你可以启动其中一辆车,但你不能“启动”停车场。@AmandaKelius
tickList
不是构造函数的一部分<代码>勾选列表
是在
事务
类中声明的字段。勾选这里:
私家票[]勾选列表。此字段在
Transaction
类的构造函数中初始化:
tickList=newticket[numTicks]
。您不能仅使用数组变量直接访问数组元素的方法,您必须访问数组中的单个元素,然后访问其元素,如上面的代码所示。@AmandaKelius否,
t
是一个
Ticket t
,它是一个
Ticket
。您可以在我的答案中的最后一段代码中看到差异。@AmandaKelius
tickList
不是构造函数的一部分<代码>勾选列表
是在
事务
类中声明的字段。勾选这里:
私家票[]勾选列表。此字段在
Transaction
类的构造函数中初始化:
tickList=newticket[numTicks]
。您不能仅使用数组变量直接访问数组元素的方法,您必须访问数组中的单个元素,然后访问其元素,如上面的代码所示。@AmandaKelius否,
t
是一个
Ticket t
,它是一个
Ticket
。你可以在我的答案的最后一段代码中看到区别。