正确地为每个循环使用数组名称

时间:2015-01-13 21:44:31

标签: 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;
    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++)
{




}
}

**

  

问题:

**

//Returns total amount for Coins 
public double totalMoney()
{
double total = 0.0;
/* code to calculate 
return total;
}
}

哪个代表正确的 / 代码来计算totalMoney方法中的金额* /?

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

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

我认为A是正确的,因为&#34; t&#34;在B.中不存在于代码中。我怎么了?

2 个答案:

答案 0 :(得分:3)

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

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

tickList是一个Ticket的数组。数组是一个只有static final字段的对象,名为length。因此,tickList不能拥有getPrice。这意味着,选项A不会编译。

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

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

请注明:

  

我认为A是正确的,因为&#34; t&#34;在B.中不存在于代码中。我怎么了?

实际上,t是在增强的for循环语句中声明和使用的变量。 t来自Ticket类型,它将采用Ticket中存储的每个tickList对象引用的值。增强的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();
}

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

答案 1 :(得分:2)

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