有人可以用我的循环代码帮助我吗?

时间:2015-03-04 03:29:41

标签: java

房地产办公室处理50个公寓单位。当租金为每月600美元时,所有单位都被占用。但是,每增加40美元的租金,一个单位就会空置。每个占用单位平均需要27美元的维护费用。应该租用多少单位以最大化利润

import java.util.*;
import java.io.*;

public class ChapterFiveHomework
{
   static Scanner console = new Scanner(System.in);

   public static void main(String[] args) throws FileNotFoundException
   {

   int units;
   double rent;
   double startRent;
   double rentInc;
   double maintenance;
   double totalMaintenance;
   double earnings;
   double earnings2;

   System.out.println("Enter the number of appartment units.");
   units = console.nextInt();

   System.out.println("Enter the rent ammount when all units are occupied.");
   rent = console.nextDouble();

   System.out.println("Enter the increase in rent that results in a vacant"
                                                              +" unit.");
   rentInc = console.nextDouble();

   System.out.println("Enter the ammount to maintain a rented unit.");
   maintenance = console.nextDouble();

   earnings2 = (units-1)*(rent+rentInc)-maintenance*(units-1);
   earnings = units*rent-maintenance*units;

   do
   {
      units--;
      rent = rent+rentInc;
      earnings = (units--)*(rent+rentInc)-(maintenance*(units--));
   }
   while (earnings > earnings2);

   System.out.println("Number of units to rent:" + (units));
   System.out.printf("Ammount to charge for rent: %.2f", rent);

   }
}

1 个答案:

答案 0 :(得分:0)

我在这里看到几个立即问题:

do
{
    units--;
    rent = rent+rentInc;
    earnings = (units--)*(rent+rentInc)-(maintenance*(units--));
}
while (earnings > earnings2);

首先,您正在根据已经腾出的公寓进行第一次计算。这意味着你没有考虑600美元租金是最好的选择。

其次,每次通过该循环,你都会减少units 三次

第三,你正在终止盈利不再上升的循环。虽然在特定情况下无关紧要,但您应该了解局部最大值的问题。

例如,如果数字为1, 2, 3, 2, 9999,那么当您找到第二个2而不是继续9999时,您的循环就会停止。


在我看来,这是最简单的方法。基本上,你有一个以$ 600租金开头的循环。虽然可以说639美元将是正确的起点,因为只有 $ 40 增加会导致“失去”第一套公寓,为了简单起见,我将保持600美元。循环也从完全占用开始。

每次循环,你根据你的公式计算利润,然后将租金增加40美元,并将占用率减少一,直到占用率达到零。

你实际上非常接近那个,除了我上面提到的问题,所以希望相对容易改变循环你必须等同于下面的伪代码:

# Configurable items.
rentbase = 600
rentincr = 40
numapts  = 50
expsper = 27

maxprofit = -1
maxoccupancy = -1
maxrentper = -1

rentper = rentbase
occupancy = 50
while occupancy > 0:
    income = rentper * occupancy
    expense = expsper * occupancy
    profit = income - expense

    print occupancy, rentper, profit
    if maxprofit < profit:
        maxprofit = profit
        maxoccupancy = occupancy
        maxrentper = rentper

    rentper = rentper + rentincr
    occupancy = occupancy - 1

print "==="
print maxoccupancy, maxrentper, maxprofit

使用这种方法,32套公寓的正确答案似乎为1,320美元,租金为41,376美元。