2012-02-13 35 views
0

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

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 
+0

你是什么意思的“超级错误”?他们是编译错误吗?程序是否编译,但运行时会抛出异常?它运行但打印出意外的输出?你需要准确地说出你所看到的错误。错误消息通常会让您很好地指出问题出在哪里。 – 2012-02-13 00:36:36

+0

这只是我尝试运行该程序时看到的冰山一角:用法:javaw [-options] class [args ...] (执行类) 或javaw [-options] -jar jar文件[参数...] (执行jar文件) 其中选项包括: -server \t选择“服务器” VM -hotspot \t为“服务器”的同义词VM(已废弃) 的默认的VM是服务器。 -cp <目录和zip/jar文件的类搜索路径> – Jremy 2012-02-13 00:55:09

+0

这没有帮助,因为我们不知道你在做什么来产生这些错误。 – 2012-02-13 01:08:14

回答

0

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

在您的功能中,您想要计算停车时间的成本,但是当您调用您的功能时,您将参数设为成本而不是小时数。这是正常的吗?因此,您将计算成本的成本,而不是对应于几小时的成本。

public static double calculateCharges (double hoursParked) 

double result = calculateCharges(hoursParked * PER_HOUR_COST); 
0

这里有几件事情。

你的while条件在do循环结束时被检查,这是什么让你在阅读小时后突然停下来的。因此,要到达do循环之外的代码(在此之后),唯一的办法就是如果hoursParked为-1。其次,如果条件不存在大括号,则只执行它后面的第一行,也就是说。 System.out.print的。因此,您的第一个条件将会执行(打印字符串),然后将2.00存储在存储1中。同样,第二个if条件将执行(打印字符串),然后将10.00存储到storage2中。

因为hoursParked总是-1,所以您传递(-1 * .5)来计算Charge。您不存储Math.ceil()的结果,因此它什么都不做。您然后返回(-.5 * .5)= -.25。

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

建议 - 确保您封装要DO循环内执行的,只有你已经做hoursParked你的计算后,破解密码。