2015-02-27 2 views
0

Я хочу вызвать переменную экземпляра, которая использует уравнение. Мне нужно «i» из цикла for, чтобы вычислить общую цену. Моя переменная bonePrice не работает внутри цикла for или снаружи.Как мне вызвать переменную экземпляра, которая находится внутри цикла for?

for (int i = 0; i < stalls.size(); i++){ 
     if (stalls.get(i).speak().equals("MOO")){ 
      while (stalls.get(i).isStillHungry() == false) { 
       stalls.get(i).feed(FoodType.GRASS); 
       stalls.get(i).isStillHungry(); 
       } 
      System.out.println("Stall " + (i+1) + " of " + stalls.size() + " contains a cow who had " + stalls.get(i).numberOfFeedings + " feedings, which cost " + df.format(grassCost * stalls.get(i).numberOfFeedings)); 

     } 

    if (stalls.get(i).speak().equals("WOOF")){ 
     while (stalls.get(i).isStillHungry() == false) { 
      stalls.get(i).feed(FoodType.BONE); 
      stalls.get(i).isStillHungry(); 
      } 
     System.out.println("Stall " + (i+1) + " of " + stalls.size() + " contains a dog who had " + stalls.get(i).numberOfFeedings + " feedings, which cost " + df.format(boneCost* stalls.get(i).numberOfFeedings)); 

     } 

    if (stalls.get(i).speak().equals("MEOW")){ 
     while (stalls.get(i).isStillHungry() == false) { 
      stalls.get(i).feed(FoodType.SALMON);  
      stalls.get(i).isStillHungry(); 
      } 
     System.out.println("Stall " + (i+1) + " of " + stalls.size() + " contains a cat who had " + stalls.get(i).numberOfFeedings + " feedings, which cost " + df.format(salmonCost* stalls.get(i).numberOfFeedings)); 

     double bonePrice = boneCost* stalls.get(i).numberOfFeedings; 
     double grassPrice = grassCost* stalls.get(i).numberOfFeedings; 
     double salmonPrice = salmonCost* stalls.get(i).numberOfFeedings; 
       } 


    }  

    System.out.println("Old MacDonald's total expenses: "); 
    System.out.println("$5.00 spent feeding 1 cow(s) 5 total feedings" 
         + "\n$25.00 spent feeding 1 cat(s) 5 total feedings" 
         + bonePrice +"\nspent feeding 1 dog(s) 5 total feedings" 
         + "\n\tTotal Cost: " + /*total cost**/); 
+1

Не то, что вы просили, но использование '==' для сравнения значений String редко является хорошей идеей. –

ответ

0

Она должна быть объявлена ​​вне рамок цикла for

например,

double bonePrice = 0.00; 

for (int i = 0; i < stalls.size(); i++){ 

    .. 

    bonePrice += boneCost* stalls.get(i).numberOfFeedings; 
} 

System.out.println("$5.00 spent feeding 1 cow(s) 5 total feedings" 
        + "\n$25.00 spent feeding 1 cat(s) 5 total feedings" 
        + bonePrice +"\nspent feeding 1 dog(s) 5 total feedings" 
        + "\n\tTotal Cost: " + /*total cost**/); 
+1

Вероятно, хочет, чтобы в цикле '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'за то, И не заставляйте меня начинать с использования 'double' для хранения суммы денег. –

+0

@DavidWallace Да, вы правы. –

+0

Большое спасибо! Я знал, что делать, но мой синтаксис отключен! – stetdawg

0

Когда вы говорите double bonePrice вы действительно определили новую локальную переменную, которая затмевает любой экземпляра переменную с тем же именем.

Когда вы делаете это в пределах цикла, это местныхbonePrice не видно за его пределами. Если вы перемещаете это объявление за пределы цикла, оно становится видимым во всем методе, но все же предотвращает доступ к переменной экземпляра.

Таким образом, чтобы присвоить значение в экземпляр члена, просто использовать это имя как

bonePrice = boneCost* stalls.get(i).numberOfFeedings; 

Если bonePrice должен держать бегущий общей то вы, вероятно, необходимо добавить расходы на вместо того, чтобы присваивать ему новое значение на каждой итерации цикла.

bonePrice += boneCost* stalls.get(i).numberOfFeedings; 

Наконец, есть моменты, когда вы можете принять решение оставить имя локальной переменной такой же, как и из экземпляра члена (в constuctor аргументы, например). В таких случаях вы можете устранить двусмысленность, используя явное использование ключевого слова this.

this.bonePrice = bonePrice; // instance var = local var here 
0

Вы не можете использовать переменную экземпляра снаружи, где она объявлена. Если вы хотите использовать его, просто объявите его вне цикла for.