Java方法传递/有序逻辑查询

时间:2012-02-13 00:32:34

标签: java

首先我要说清楚这是作业。我对编程非常陌生,因此非常感谢所有指导。我必须计算的程序是停车费,最低2.00美元,3小时或更短,每小时0.50美分,费用上限为每24小时10美元。程序必须显示最近的客户费用以及运行总额。必须初始化常量,必须使用Math.ceil,并且必须使用方法calculateCharges来解决每个cust的费用。当我尝试运行这个程序时,我会遇到超级错误,当你看到它时你可能会笑,但我在哪里错了?我不是要找到给我的答案,只是寻找如何获得正确编写程序的逻辑。请帮忙!

package Parking;

import java.util.Scanner;

public class parking 
    {
    private static final double THREE_HOURS = 2.00;
    private static final double PER_HOUR_COST = .50;
    private static final double WHOLE_DAY_COST = 10.00;

    public static void main (String [] args)
        {
        double hoursParked = 0;
        double cumulativeCharges = 0;
        double storage1 = 0;
        double storage2 = 0;
        Scanner input = new Scanner(System.in);


            System.out.print("\nThis program displays the charge for the most recent customer");
            System.out.print(" as well as the running total of yesterday's receipts\n");

            do
            { System.out.printf("Enter an number between 1-24 for hours parked in garage or -1 to quit:");

              hoursParked = input.nextDouble ();
            }
            while((hoursParked > 0)&&(hoursParked <= 24)&&(hoursParked != -1));

                if( hoursParked <= 3)
                    System.out.printf("Most recent customer's charge was: %.2f\n" , THREE_HOURS);
                    storage1 += THREE_HOURS;

                 if(hoursParked >= 18.01)
                     System.out.printf("Most recent customer's charge was:%.2f\n" , WHOLE_DAY_COST);
                     storage2 += WHOLE_DAY_COST;

                 double result = calculateCharges(hoursParked * PER_HOUR_COST);
                    System.out.printf("Most recent customer charge was:%.2f\n" , result);

                 cumulativeCharges = storage1 + storage2;
                 System.out.printf("Running total of yesterday's receipts is:%.2f\n" , cumulativeCharges);

        } // end main

        public static double calculateCharges (double hoursParked)
        {
            Math.ceil(hoursParked);

            double total = hoursParked * PER_HOUR_COST;

            return total;
        } // end method calculateCharges
    } // end class parking

2 个答案:

答案 0 :(得分:0)

在你的while条件下,第三个条件是无用的,因为如果值是正数,那必然意味着它不是-1。

在您的功能中,您想要计算停车时间的成本,但是当您调用您的功能时,您将参数作为参数而不是数小时。这是正常的吗?有了这个,您将计算成本的成本,而不是相当于几个小时的成本。

public static double calculateCharges (double hoursParked)

double result = calculateCharges(hoursParked * PER_HOUR_COST);

答案 1 :(得分:0)

这里有几件事。

在do循环结束时检查你的while条件,它是允许你在阅读hoursParked后打破的。因此,如果hoursParked为-1,那么您将在do循环之外(在while之后)访问代码的唯一方法是。

其次,如果你的if条件没有大括号,你只需要执行第一行,也就是说。 System.out.print的。因此,您的第一个if条件将执行(打印字符串),然后在storage1中存储2.00。类似地,第二个if条件将执行(打印字符串),然后将10.00存储在storage2中。

因为hoursParked总是-1,所以你传入(-1 * .5)到calculateCharges。您没有存储Math.ceil()的结果,因此它实际上没有做任何事情。然后你返回(-.5 * .5)= -.25。

cumulativeCharges只是在每种情况下增加2 + 10。

建议 - 确保您在do循环中封装了要执行的代码,并且只有在您对hoursParked进行计算后才会中断。