无法减少总数 [英] Unable to get total to decrease

查看:106
本文介绍了无法减少总数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究这个非常具有挑战性的计划,我很难理解。我已经相当远了它但是我很难在每次循环后减少糖量。如何让每罐糖果随总量减少?感谢您的帮助!

I'm currently working on this pretty challenging program that I'm having a hard time understanding. I've gotten pretty far with it but I'm having trouble getting the amount of candy to decrease after each loop. How would I get each pot of candy to decrease along with the total amount? Thank you for your help!

import java.util.Random;

public class TreatHouse {  
   int candyPot1; // # of candy in pot 1
   int candyPot2; // # of candy in pot 2
   int currentPot; // 1 or 2
   int candyPot;
   int totalCandy;
   int currentTreaters;
   int treatsPerTreater;

   public TreatHouse(int candyPot, int totalCandy) {
      // ints variable currentPot by parameter candyPot, prints message
      if(candyPot !=1 && candyPot !=2) {
         //candyPot = 1;
         currentPot = 1;
         System.out.println("Invalid input, we will use candy pot 1 first.");               
   }

      //ensures total # of candy is more than zero   
      if(totalCandy <= 0){
         this.totalCandy = 0;
         System.out.println("We can't give out candy if we don't have any. "
                                 +"\nI think we have some from last year. Yep, we have 100 pieces " 
                                    +"\nof candy to give out.");
       }else
         this.totalCandy = totalCandy;

      // splits the candy between the pots                              
      this.totalCandy = this.totalCandy + 100;                              
      candyPot1 =  this.totalCandy/2;
      candyPot2 =  this.totalCandy - candyPot1;
   }

      public int getCandyCount() {
         return candyPot1 + candyPot2; 
      }

      public void passOutCandy() {
        /*if there are enough treats per treater for the given amount per treater, 
            pass out candy from the current pot 

            else display a messagethat the treaters have been tricked (No candy!)
                  but don't change the current pot*/

         if(currentPot == 1) {
             if (treatsPerTreater*currentTreaters <= candyPot1) {
                  candyPot1 = candyPot1 - (treatsPerTreater*currentTreaters);
             } else  {  
                  System.out.println("Sorry you've been tricked! No treats for you..."); 
             }    
               currentPot = 2;          
         }
         else if (currentPot == 2){
             if (treatsPerTreater*currentTreaters <= candyPot2) {
                  candyPot2 = candyPot2 - (treatsPerTreater*currentTreaters);
             }   
            else{
                  System.out.println("Sorry you've been tricked! No treats for you..."); 
              }   
                  currentPot = 1;       
         }
      }

      // Sets the # of trick or treaters
      public void knockKnock() {
         Random gen = new Random(System.currentTimeMillis());
            this.currentTreaters = gen.nextInt(13)+1; // 1 to 13 treaters
      }   

      // Displays how much candy in each pot, total candy left
      public void getCandyStatus() {
         System.out.println("We have " +this.candyPot1+ " pieces of candy left in pot 1 and " +
                  this.candyPot2 + " pieces of candy left in pot 2.");
         System.out.println("There's a total of " + (this.totalCandy) + " pieces of candy in the two pots.");                       
      }             

      //returns the pot number for which candy was last given
      public int getLastPot() {   
         return candyPot;
      }

      public void setTreatsPerTreater(int treatsPerTreater) {
         treatsPerTreater = currentTreaters*2;
      }
 }

这是驱动程序:

import java.util.Scanner;

   public class Halloween {
      public static void main (String[] args) {

      Scanner scan = new Scanner(System.in);

      System.out.println("Which candy should we give out first? Candy from pot 1 or pot 2?");
      int candyPot = scan.nextInt();

      System.out.println("How much candy did we buy?");
      int totalCandy = scan.nextInt();

      TreatHouse ourHouse = new TreatHouse(candyPot, totalCandy);

      while(ourHouse.getCandyCount()>0) {
         ourHouse.getCandyStatus(); 

         System.out.println("How much candy per treater should we give out?");
         int treatsPerTreater = scan.nextInt();
         ourHouse.setTreatsPerTreater(treatsPerTreater);

         System.out.println("Knock, knock..." + "Trick or treat!!");
         ourHouse.knockKnock();
         ourHouse.passOutCandy();

         }

      System.out.println("Time to turn off the lights and go to bed!"); 
      System.out.println("The last candy came from pot number " +ourHouse.getLastPot());
      System.out.println("Happy Halloween!");
      scan.close();

   }
}


推荐答案

唯一可能出错的地方(据我所知)就在这里,

The only place where you might be going wrong(as far as I can tell) is here,

  public void setTreatsPerTreater(int treatsPerTreater) {
     treatsPerTreater = currentTreaters*2;
  }

这里,修改 treatsPerTreater 您正在更改局部变量 treatsPerTreater 而不是类变量。

Here, when you modify treatsPerTreater you are changing the local variable treatsPerTreater and not the class variable.

也许你想说,

  public void setTreatsPerTreater(int treatsPerTreater) {
     this.treatsPerTreater = treatsPerTreater;
  }

这称为影子


某些声明的部分范围可能会被另一个同名的声明所掩盖,在这种情况下,简单的名称不能是用于指代声明的实体。

Some declarations may be shadowed in part of their scope by another declaration of the same name, in which case a simple name cannot be used to refer to the declared entity.

请阅读这个了解更多细节。

另外看看 Jiri Tousek的回答

Please read this for more details.
Also have a look at Jiri Tousek's answer

这篇关于无法减少总数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆