问题描述
我正在研究这个非常具有挑战性的计划,我很难理解。我已经相当远了它但是我很难在每次循环后减少糖量。如何让每罐糖果随总量减少?感谢您的帮助!
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;
}
这称为影子
。
请阅读了解更多细节。
另外看看
Please read this for more details.
Also have a look at Jiri Tousek's answer
这篇关于无法减少总数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!