2015-11-05 82 views
0

我是新来的java和有我的代码的问题,该程序compliles就好了,但我有一个与TreatHouse.java,如果语句的问题,if ((totalCandy > 0) && (treatsPerTreater < totalCandy)) { 不给我正确的输出。我试图弄清楚如何解决这个问题,以及如何改进我目前的代码。任何帮助将非常感激。如果陈述不正确

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 in pot 1 or candy in 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(); //tells how much candy is left & other stuff 

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












import java.util.Random; 

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

    public TreatHouse(int candyPot, int totalCandy) { 
     //Add code here, be sure to split the candy between the pots. 
     currentPot = candyPot; 
     if (totalCandy <=0) { 
      System.out.println("We can't give out candy if we don't have amy. I think we have some from last year. " + 
          "Yep, we have 100 pieces of candy to give out."); 
      totalCandy = 100; 
      candyPot1 = totalCandy/2; 
      candyPot2 = totalCandy/2; 
     } 

     if (totalCandy > 0) { 
      totalCandy = totalCandy; 
      candyPot1 = totalCandy/2; 
      candyPot2 = totalCandy/2; 
     }        
    } 

    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 and switch to the other one. 
     //Else display a message that the treaters have been tricked... (no candy for them.) 
     // but do not change the current pot 
     if ((totalCandy > 0) && (treatsPerTreater < totalCandy)) { 
      if (true) { 
      if (currentPot == 1) { 
       candyPot1 = candyPot1 - (this.currentTreaters*treatsPerTreater); 
       currentPot = 2; 
      } 

      if (currentPot == 2) { 
       candyPot2 = candyPot2 - (this.currentTreaters*treatsPerTreater); 
       currentPot = 1; 
      } 

      // System.out.println("Pot " + currentPot + " doesn't exist. Try again next time"); 
      } 
     } 
     else 
      System.out.println("You have been tricked! No candy for you >:D!!!!");    
    } 


    //Sets the number 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() { 
     //add in code here 
     System.out.println("Candy in Pot1: " + candyPot1 + " Candy in Pot2: " + candyPot2); 
     System.out.println("Total candy left: " + (candyPot1 + candyPot2)); 

    } 

    //returns the pot number for which candy was last given. 
    public int getLastPot() { 
     //add code here 
     if (currentPot == 1 || currentPot == 2) { 
      if (currentPot == 2) { 
       currentPot = 1; 
       return currentPot; 
      } 
      if (currentPot == 1) { 
       currentPot = 2; 
       return currentPot; 
      } 
     } 
     else 
      return currentPot; 

     return 1; 
    } 

    public void setTreatsPerTreater(int treatsPerTreater) { 
     //add code here 
     treatsPerTreater = treatsPerTreater; 
    } 
} 
+0

“问题寻求帮助调试必须包括***所需的行为***,***一个特定问题***或错误在问题本身中重现它所需的最短代码。没有明确问题陈述的问题***对其他读者无益。请参阅:[如何创建最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。“ - 理想情况下,您的问题应该包含_expected_行为和_current_行为。 “不给我正确的输出”作为问题描述是无用的。 – Xufox

回答

0

我不能完全按照你的逻辑,但这里是我的了: 你有totalCandy作为一个字段和参数。如果你用(1,-3)调用构造函数,那么字段(类变量)被赋值为100.在下一个if语句中,使用了totalCandy中的哪一个?我不记得java是如何处理这个的,但是你可能想要使用this.totalCandy来引用类变量和参数,而不是为了避免混淆。 在getCandyCount()中,您有candyPot1 + candyPot2,但是这些值在if语句中设置为totalCandy/2.如果totalCandy为奇数,那么您将计数将由于整数除法而截断余数。最后,你的if(true)是完全不必要的。至于你有问题的if语句,我会确保首先处理其他的东西,然后检查它是否仍然存在。

+0

'if(true)'很可能暂时用于测试前面的if语句。 – Xufox

+0

不,字段totalCandy从不分配,他在两种情况下重新分配本地参数。 –

+0

@Avezou我将如何修复整数截断?其逻辑背后的逻辑是,如果我输入41(任何奇数)糖果并且需要正确分割,那么我将得到20个这两个底池,我如何编码以获得20和21的合适底池? – YellowBird

1

对于本地方法参数名称以及字段名称,都使用变量名称totalCandy

改变这一行

totalCandy = totalCandy; 

this.totalCandy = totalCandy;