2015-01-13 3 views
0

Учитывая следующий пример кода, пожалуйста, помогите мне ответить на следующие вопросы намековИспользование имен массивов правильно для каждого цикла

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 является правильным, потому что «t» в B. не существует в коде. Как я ошибаюсь?

+0

Фактически, t существует в инструкции цикла foreach. –

+2

A даже не компилируется, не существует метода getPrice() для массива. – JimW

+0

Возможно, я ошибаюсь, но у вас нет tickList, и если вы убедитесь, что он статичен –

ответ

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; 
} 

Вот вам состояние:

Я думаю, что это верно, потому что «т» в Б. не существует в коде. Как я ошибаюсь?

Фактически, 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 в качестве решения этой проблемы.

+0

@AmandaKelius 'tickList' не является частью конструктора.'tickList' - это поле, объявленное в классе« Транзакция ». Проверьте здесь: 'private Ticket [] tickList;'. Это поле инициализируется в конструкторе класса Transaction: 'tickList = new Ticket [numTicks]'. Вы не можете напрямую обращаться к методам элементов массива с использованием только переменной массива, вам нужно получить доступ к одному элементу массива, а затем получить доступ к его элементам, как показано в приведенном выше коде. –

+0

@AmandaKelius no, 't' - это' Ticket t', это один «билет». Вы можете увидеть разницу в последнем фрагменте кода в моем ответе. –

2

Ответ: B, потому что вы объявляете t в своем цикле, когда говорите «Ticket t». Цикл выполняет итерацию списка билетов, и t будет стоять за каждый билет в списке.

Смежные вопросы