2015-06-04 3 views
-5

Проблема: Мне нужно вычислить программу изменения для торгового автомата. Я сделал массив для чисел изменения (10,50,100,500 = 4 изменения). При отладке, я понял, что количество изменений я инициализированы не работает должным образомC++ с изменениями

Код:

class BeverageVendingMachine : VendingMachine { 
public: 
static int change[4]; 
virtual void menu(int remain[]) 
{ 
    cout<<"[1] Coke ("<<remain[0]<<" left)"<<endl; 
    cout<<"[2] Milk ("<<remain[1]<<" left)"<<endl; 
    cout<<"Select menu: "; 
} 

virtual void CalculateChange(int cost, int money) 
{ 
    int Change = money-cost; 

    if (Change>0) 
    { 
     if ((money-500)>=0){ 
      money-=500; 
      change[0]+=1; 
     } 
     else{ 
      change[1]+=(money/1000); 
      money -=(money/100)*100; 
     } 
     if ((money-50)>=0){ 
      money-=50; 
      change[2]+=1; 
     } 
     else{ 
      change[3]+=(money/10); 
      money -=(money/10)*10; 
     } 
    } 
    cout<<"your Change is "<<Change<<endl; 


    if ((Change-500)>=0){ 
     Change-=500; 
     change[0]-=1; 
    } 
    else{ 
     change[1]-=(Change/1000); 
     Change -=(Change/100)*100; 
    } 
    if ((Change-50)>=0){ 
     Change-=50; 
     change[2]-=1; 
    } 
    else{ 
     change[3]-=(Change/10); 
     Change -=(Change/10)*10; 
    } 


} 
}; 
int BeverageVendingMachine::change[4] = {5,5,5,5}; 
+0

Не в тему, но почему функция CalculateChange в определении для BeverageVendingMachine, а не в общем VendingMachine? –

+0

Потому что я должен сделать несколько видов торговых автоматов с независимыми изменениями. мне тяжело сделать лучший код, чем это ... T.T – WoW

ответ

0

, конечно, ваш код не работает правильно, вы и не принимая во внимание все случаи. Попробуйте следующее:

void CalculateChange(int cost, int money) 
{ 
    int Change = money-cost; 

    if (Change>0) 
    { 
     while ((money-500)>=0){ 
      money-=500; 
      change[0]+=1; 
     } 
     while ((money-100)>=0){ 
      money-=100; 
      change[1]+=1; 
     } 
     while ((money-50)>=0){ 
      money-=50; 
      change[2]+=1; 
     } 
     while ((money-10)>=0){ 
      money-=10; 
      change[3]+=1; 
     } 

    cout<<"your Change is "<<Change<<endl; 
     // print out all the values in change array 
} 

Я думаю, что код сам пояснил.

+0

oh полностью пропустил его, большое вам спасибо. Если возможно, могу ли я задать больше с помощью «int BeverageVendingMachine :: change [4] = {5,5,5,5};» <этот, это правильная вещь для инициализации? – WoW

+0

Я думаю, вы хотите инициализировать его для всех нулей, потому что вы увеличиваете значения там, когда вычисляете изменение. – Pandrei

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