成本计算器

时间:2015-01-23 15:48:46

标签: java arrays

我的代码需要通过3个不同的问题来计算ISP服务的成本。 包装选择(1,2,3) 哪个月是:(1-12) 使用了多少小时:(x)

我将这几个月分成3个独立的阵列。一个是2月,28天,一个月,30天,一个月,31天。我需要检查输入的小时数,并确保它不超过他们选择的任何一个月的小时数。我已经开始用这个:

import java.util.Scanner; //Needed for the scanner class

public class ISP_Cost_Calc 
{

    public static void main(String[] args) 
    {
        String input;                                   //To hold users input.
        char selectPackage;                             //To hold Internet Package
        double hourUsage, totalCharges, addCharges;     //Variables 
        Scanner keyboard = new Scanner(System.in);      //Create a Scanner object to collect keyboard input.

        int[] twentyeightArray;                         //List of months with 28 days (that's what the te is for)
        twentyeightArray = new int[1];                  //Make room for one integer in list
        twentyeightArray[0] = 2;                        //Set the one integer in this list to month number 2

        int[] thirtyArray;                              //List of months with 30 days.
        thirtyArray = new int[4];
        thirtyArray[0] = 4;
        thirtyArray[1] = 6;
        thirtyArray[2] = 9;
        thirtyArray[3] = 11;

        int[] thiryoneArray;                                //List of months with 31 days.
        thiryoneArray = new int[7];
        thiryoneArray[0] = 1;
        thiryoneArray[1] = 3;                               
        thiryoneArray[2] = 5;
        thiryoneArray[3] = 7;
        thiryoneArray[4] = 8;
        thiryoneArray[5] = 10;
        thiryoneArray[6] = 12;


        //Prompt the user to select a Internet Package.
        System.out.print("Enter your plan (1, 2, 3):");
        input = keyboard.nextLine();
        selectPackage = input.charAt(0);
        //Prompt the user for the month.
        System.out.print("Enter your month number (1-12):");
        input = keyboard.nextLine();
        char monthNum = input.charAt(0);
        //Prompt the user for how many hours used.
        System.out.print("Enter your hours:");
        input = keyboard.nextLine();
        hourUsage = Double.parseDouble(input);

//Display pricing for selected package...

            switch (selectPackage)
            {

                case '1':
                    if (hourUsage > 10)
                    {
                        addCharges = hourUsage - 10;
                        totalCharges = (addCharges * 2.0) + 9.95;
                        System.out.println("You have used " + hourUsage + " hours and your total is $" + totalCharges + " per month. ");
                    }
                    else
                    {
                        System.out.println("Your total is $9.95 per month.");

                    }
                    break;


                case '2':
                    if (hourUsage > 20 )
                    { 
                        addCharges = hourUsage - 20;
                        totalCharges = (addCharges * 1.0) + 13.95;
                        System.out.println("You have used " + hourUsage + " and your total is $" + totalCharges + " per month.");
                    }
                    else
                    {
                        System.out.println("Your total is $13.95 per month.");

                    }
                    break;


                case '3':
                    System.out.println("Your total is $19.95 per month.");
                    break;
                default:
                    System.out.println("Invalid Choice.");
            }

    }


}

所以我只需要建议如何将其合并到我的if语句中。 谢谢

5 个答案:

答案 0 :(得分:0)

如果不使用seperatre数组代替不同的天数,可能会更容易使用包含天数和小时数的月份枚举。

public enum Month {

JANUARY(31),FEBRUARY(28),MARCH(31),APRIL(30),MAY(31),JUNE(30),JULY(31),AUGUST(30),SEPTEMBER(30),OCTOBER(31),
NOVEMBER(30),DECEMBER(31);

private int hours;
private Month(int days){
    hours = days*24;
}

public int getHours(){
    return hours;
}

}

使用类似的东西可以减少不必要的数组使用,并将所有内容组合到一个类中。这样可以更容易地获得每个月的天数和小时数。

答案 1 :(得分:0)

不要创建多个数组,只需使用一个数组,如:

month[0] = 31;
month[1] = 28;//what if leap year?
month[2] = 31;
//and so on

然后你可以这样做:

int monthNumber = monthNum - 48;
if (hours > month[monthNumber - 1] * 24) {
    //do something
} else {
     //else do another thing
}

答案 2 :(得分:0)

这太疯狂了。

2016年2月将有29天而不是28天会发生什么?

停止使用整数来表示小时数。使用适当的数据类型,如DateTime和TimeSpan。

在所选月份的第一天00:00获取DateTime, 然后在下个月的第一天00:00获取DateTime, 然后计算这两者之间的差异,以获得一个持有所选月份持续时间的TimeSpan。

然后将您的小时数转换为TimeSpan,并将其与所选月份的持续时间进行比较。

这将告诉您输入的小时数是否适合所选月份。

答案 3 :(得分:0)

根据您的月份检查条件。您可以通过将数组转换为arraylist来使用arraylist的contains方法

Arrays.asList(your1stArray).contains(yourChar)
在您的char中

只需添加月份的输入no 例如:

  switch (monthNum )
        {

            case '1':
                if (Arrays.asList(your1stArray).contains(yourChar)){
    //code goes here
}
    case '1':
                if (Arrays.asList(your2ndArray).contains(yourChar)){
    //code goes here
}

)
)

答案 4 :(得分:0)

而不是使用单独的数组来实现您的月份。你可以这样做:

int[] month = {31,28,31,30,31,30,31,31,30,31,30,31};
int[] monthLeapYear = {31,29,31,30,31,30,31,31,30,31,30,31};

您可以先查看给定年份是否为闰年,然后选择适合当月使用的数组。这样你只需要2个阵列 -

你可能会有这样的东西来帮助你。我还建议您在实现中创建一些方法来模块化您的程序。

public static Boolean isLeapYear(int year)
{
    if(year % 4 == 0 && year % 100 != 0)
        return true; 
    return false;   
}

数组是索引0 - 11。这可以通过这样做来实现:

//Let say your current month is 1-12
month[currentMonth-1]

或者为您的数组添加1个元素(以便现在元素统计):

int[] month = {0,31,28,31,30,31,30,31,31,30,31,30,31};