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

Java方法传递/有序逻辑查询,java,Java,让我先说明一下,这是一项任务。我对编程非常陌生,所以非常感谢所有的指导。我要计算的项目是停车费,3小时内至少收取2美元,每增加1小时不超过0.50美分,收费上限为每24小时10美元。程序必须显示最近的客户费用以及运行总额。必须初始化常量,必须使用Math.ceil,并且必须使用方法calculateCharges来解决每个客户的费用。当我尝试运行这个程序时,我会出现uber错误,当你看到它时,你可能会笑,但我哪里出错了?我不是在寻找答案,只是在寻找如何得到正确编写的程序背后的逻辑。请帮忙 pac

让我先说明一下,这是一项任务。我对编程非常陌生,所以非常感谢所有的指导。我要计算的项目是停车费,3小时内至少收取2美元,每增加1小时不超过0.50美分,收费上限为每24小时10美元。程序必须显示最近的客户费用以及运行总额。必须初始化常量,必须使用Math.ceil,并且必须使用方法calculateCharges来解决每个客户的费用。当我尝试运行这个程序时,我会出现uber错误,当你看到它时,你可能会笑,但我哪里出错了?我不是在寻找答案,只是在寻找如何得到正确编写的程序背后的逻辑。请帮忙

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
package停车场;
导入java.util.Scanner;
公共停车场
{
私人静态最终双三小时=2.00;
私人静态最终双倍每小时成本=.50;
私人静态最终双倍全天成本=10.00;
公共静态void main(字符串[]args)
{
双小时停车=0;
双累积Charges=0;
双存储1=0;
双存储2=0;
扫描仪输入=新扫描仪(System.in);
System.out.print(“\n此程序显示最近客户的费用”);
System.out.print(“以及昨天收据的运行总数”);
做
{System.out.printf(“输入一个介于1-24之间的数字,用于停车场的停车时间或-1退出:”);
hoursParked=input.nextDouble();
}

在while条件下((hoursParked>0)和&(hoursParked),第三个条件是无用的,因为如果值为正值,则必然意味着它不同于-1

在函数中,您希望计算停车时间的成本,但在调用函数时,您给出了一个成本而不是小时数作为参数。这正常吗?这样,您将计算成本的成本,而不是小时数对应的成本

public static double calculateCharges (double hoursParked)


这里有几件事

您的while条件在do循环结束时被检查,这是允许您在读取hoursParked后中断的条件。因此,在do循环之外(while之后)到达代码的唯一方法是hoursParked为-1

其次,当您的if条件没有大括号时,您只执行它后面的第一行,即System.out.print。因此,将执行第一个if条件(打印字符串),然后将2.00存储在storage1中。同样,将执行第二个if条件(打印字符串),然后在storage2中存储10.00

因为hoursParked始终为-1,所以您要传入(-1*.5)以计算Charges。您没有存储Math.ceil()的结果,因此它实际上什么也不做。然后返回(-5*.5)=-25

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


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

您所说的“uber错误”是什么意思?它们是编译器错误吗?程序是否编译但在运行时抛出异常?它是否运行但打印出意外输出?您需要确切说明您看到的错误。错误消息通常会很好地指示问题所在。这只是我在尝试运行程序时看到的冰山一角:用法:javaw[-options]class[args…](执行类)或javaw[-options]-jar-jarfile[args…](执行jar文件),其中选项包括:-选择“服务器”虚拟机的服务器-热点是“服务器”虚拟机的同义词[已弃用]默认的VM是server.-cp,这没有帮助,因为我们不知道你在做什么来生成这些错误。@Jeremy D.我如何在do…while语句中正确设置sentinal受控循环?显然我设置它的方式是错误的。所以你说的是double result=计算费用(hoursParked)是正确的。我不能撒谎,很明显,这种语言(在一个月内)看起来很陌生。你能编辑这个问题并准确地显示你使用的命令行和输出吗?冰山一角是你把错误的选项传递给了javaw,但是除非你向我们展示完整的命令,否则我们将无法帮助你。
double result = calculateCharges(hoursParked * PER_HOUR_COST);