这是我的代码:
or
为什么它不起作用?
使用等式y = 1,000,000 +(500,000 * n) 我希望n的所有值的总和小于n,包括0。 例如如果n = 3,我想要1,000,000 +(500,000 * 3)+ 1,000,000 +(500,000 * 2)+ 1,000,000 +(500,000 * 1)= 1,000,000 +(500,000 * 0)。
正如你在我的代码中看到的那样,我希望它发生两次,然后从另一个中减去一个总和。
答案 0 :(得分:1)
您的代码永远不会按原样退出循环,因为它会使循环控制变量的递增速度快于递减循环。
while (baseDiamondPrice > 0) {
baseDiamondPrice = ((baseDiamondPrice * 500000) + 1000000);
baseDiamondPrice--;
}
如果baseDiamondPrice
小于或等于零,则不进入循环。如果它是任何正数,则在每次循环迭代中添加1000000然后减去1。这永远不会收敛到零并退出循环。它也永远不会达到您的预期金额。您应该将控制变量与累加器变量分开。
您可以使用for循环来解决此赋值,其中i
的循环控制变量i
从0到n,以及一个单独的累加器变量来保存运行总和。
答案 1 :(得分:0)
您的控制逻辑不正确。它永远不会退出任何一个循环 你可以像下面的两个循环一样修改它。
import java.text.DecimalFormat;
import java.util.Scanner;
public class JavaApplication3 {
public static void main(String[] args){
double baseDiamond, baseDiamondPrice, preDiamond, preDiamondPrice, baseDiamondCalc, finalECoins;
Scanner input = new Scanner(System.in);
System.out.print("What is your current Diamond Miner level? ");
preDiamondPrice = input.nextDouble();
System.out.print("Enter what diamondminer level ");
baseDiamondPrice = input.nextDouble();
double counter1 =baseDiamondPrice;
while (counter1 > 0) {
baseDiamondPrice = ((baseDiamondPrice * 500000) + 1000000);
counter1--;
}
double counter2 =preDiamondPrice;
while (counter2 > 0) {
preDiamondPrice = ((preDiamondPrice * 500000) + 1000000);
counter2--;
}
baseDiamondCalc = (baseDiamondPrice - preDiamondPrice);
DecimalFormat dRemover = new DecimalFormat("0.#");
System.out.println("You need " +dRemover.format(baseDiamondCalc)+ " ecoins for diamond miner level "+dRemover.format(baseDiamondPrice)+".");
}}