我的代码需要通过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语句中。 谢谢
答案 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};