2013-10-04 4 views
0

У меня есть код для изучения класса, и я понимаю его большую часть, но я смущен этим методом. При заданном коде не будет ли изменение возврата всегда равняться 0, поскольку последнее, что было введено, состояло в том, что totalOfItems и totalGiven равны 0.0. Мне сказали, что при запуске это не произойдет, но я хотел бы понять, почему. Может кто-нибудь мне помочь?Метод (правильно) объявляет переменные как 0, но я не понимаю, почему?

public SelfCheckout() { 
this.totalOfItems = 0.0; 
this.totalGiven = 0.0; 
} 

/** 
    * This method will scan the item. 
* @param amount The amount the items cost. 
*/ 

public void scanItem (double amount){ 
this.totalOfItems = this.totalOfItems + amount; 
} 

/** The method will add the items scanned and return the total due. 
* 
* @return getTotalDue The getTotalDue is the total amount of items scanned. 
*/ 
public double getTotalDue(){ 
    return this.totalOfItems; 
} 

/** The method will show the amount that is received from the consumer. 
* 
*/ 
public void receivePayment(double amount){ 
    this.totalGiven = this.totalGiven + amount; 
} 

/**The method will calculate the amount of change due. 
* 
*/ 
public double produceChange(){ 
    double change = this.totalGiven - this.totalOfItems; 
    this.totalGiven = 0.0; 
    this.totalOfItems = 0.0; 
    return change; 

ответ

3

Заявления в порядке. Изменения в totalGiven и totalOfItems не будут изменены change после его расчета.

+0

Правильно, но поскольку мы меняем totalGiven и totalOfItems на 0, прежде чем просить компилятор возвращать изменения, не вернет ли он 0? – user2769212

+0

@ user2769212 'change' не является функцией двух переменных, это константа, которая рассчитывается из значения переменных при ее вычислении. –

+0

Хорошо, мне кажется, я понял это сейчас. изменение теперь это собственная переменная, которая равна оригиналу this.totalGiven - this.totalOfItems; Таким образом, это нормально перезагрузить this.totalGiven и this.totalOfItems без изменения. Правильно? – user2769212

0

Для этого:

double change = this.totalGiven - this.totalOfItems; 
this.totalGiven = 0.0; 
this.totalOfItems = 0.0; 
return change; 

первый назначении (ненулевое) значение change, затем сброса исходных переменных, и только затем возвращает значение change. Значения переменных копируются в другую переменную и затем сбрасываются.

+0

Хотел бы я понять, что вы только что сказали ... Я думаю, что вы говорите, что в первой строке «double change = this.totalGiven - this.totalOfItems;» «totalGiven» и «totalOfItems» действительно представляют собой разные totalGiven и totalOfItems. Я думал, что мне нужно будет переименовать их или что-то в этом роде, но теперь этот sortof имеет смысл ..... – user2769212

+0

Операции просто исполняются по порядку. Это действительно так просто. 'return change;' возвращает любое значение 'change'. –

0

Предполагаю, что в какой-то момент receivePayment и scanItem уже были вызваны, поэтому они переназначают переменные поля на число, которое не равно нулю. Затем дается изменение. Сделка закрывается после того, как вы уже рассчитали изменение, которое вы сбросили переменные для следующей транзакции.

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