【发布时间】:2017-09-18 22:09:46
【问题描述】:
问题:
互联网服务提供商提供三种不同的订阅套餐:
套餐 1:每月 15.95 美元,可享受长达 10 小时的服务。额外时间为每小时 2.00 美元。 套餐 2:每月 20.95 美元,可享受长达 20 小时的服务。额外时间为每小时 1.00 美元。 套餐 3:每月 30.99 美元,无限制访问。
编写一个执行以下操作的程序:
询问用户他们有哪些计划。
向用户询问他们被计费的月份编号 (1-12)。
询问用户他们使用了多少小时。
显示他们的账单费用。
同时显示套餐 1 的客户如果购买套餐 2 或套餐 3 会节省多少钱,套餐 2 的客户如果购买套餐 3 会节省多少钱。
如果没有节省,请不要显示此消息。
输入验证:
计划编号不能为负数。
计划编号必须是值 [1, 3]。
小时数不能为负数。
小时数不能超过给定月份的总小时数。
有 30 天的月份有 720 小时,有 31 天的月份有 744 小时,有 28 天的二月有 672 小时(不用担心闰年)。
验证用户输入的值是否大于给定月份的总小时数。
见下表。
月、日、小时。
744 年 1 月 31 日。
2 月 28 日,672。
744 年 3 月 31 日。
4 月 30 日,720。
744 年 5 月 31 日。
720 年 6 月 30 日。
744 年 7 月 31 日。
744 年 8 月 31 日。
9 月 30 日,720。
744 年 10 月 31 日。
11 月 30 日,720。
12 月 31 日,744。
我的问题。
我的变量有问题。我知道有更好的方法来编写这个程序,但是你应该记住,这是我用 Java 编写代码的第四周。
我使用了太多的 if 语句,当我尝试编译它时;我得到了一些变量的 12 个错误。我假设变量的变量范围被某处的 if 语句阻塞。因为编译器要求初始化变量,即使它们之前已初始化。 任何帮助将不胜感激:)
/*
* Homework 04 Problem 05
* Student: Kevin Crespin
* CIN:
* Description: This program does the following:
* Ask the user which plan they have.
* Ask the user for the month number (1-12) of which month they are being billed.
* Ask the user how many hours they used.
* Display the cost of their bill.
* Also display how much money Package 1 customers would would have saved if they purchased
* packages 2 or 3, and how much money Package 2 customers would have saved if they purchased
* Package 3. If there were no savings, do not display this message.
*/
// import scanner class
import java.util.Scanner;
public class HW04P05{
public static void main (String[] args) {
Scanner input = new Scanner(System.in);
// USER MENU
final String USER_MENU =
" \n" +\
"[1] Package 1: $15.95 a month for up to 10 hours of service. Additional hours are $2.00 per hour.\n" +
"[2] Package 2: $20.95 a month for up to 20 hours of service. Additional hours are $1.00 per hour.\n" +
"[3] Package 3: $30.99 per month unlimited access.\n" +
" \n" +
"Enter [1 - 3] for select your package: ";
final int PACKAGE_1 = 1;
final int PACKAGE_2 = 2;
final int PACKAGE_3 = 3;
System.out.print(USER_MENU);
int choice = input.nextInt();
System.out.println(" ");
if (choice < 0) {
System.out.println("The menu choice cannot be negative, must be a value [1 - 3]");
System.out.println("The program will know exit.");
System.exit(1);
}
else if (choice == 0) {
System.out.println("The menu choice cannot be zero, must be a value [1 - 3]");
System.out.println("The program will know exit.");
System.exit(1);
}
else if (choice > 3) {
System.out.println("The menu choice must be a value [1 - 3]");
System.out.println("The program will know exit.");
System.exit(1);
}
System.out.print("[1] January [4] April [7] July [10] October\n");
System.out.print("[2] February [5] May [8] August [11] November\n");
System.out.print("[3] March [6] June [9] September [12] December\n");
System.out.println(" ");
System.out.print("Enter [1 - 12] for select billed month: ");
int month = input.nextInt();
if (month < 0) {
System.out.println("The month cannot be negative, must be a value [1 - 12]");
System.out.println("The program will know exit.");
System.exit(1);
}
else if (month == 0) {
System.out.println("The month cannot be zero, must be a value [1 - 12]");
System.out.println("The program will know exit.");
System.exit(1);
}
else if (month > 12) {
System.out.println("The month must be a value [1 - 12]");
System.out.println("The program will know exit.");
System.exit(1);
}
double hours;
double savings_1;
double savings_2;
double total_1;
double total_2;
final double total_1d = 15.95;
final double total_2d = 20.95;
final double total_3d = 30.99;
// USER MENU SWITCH
switch (choice) {
case PACKAGE_1:
if ((month == 1) ^ (month == 3) ^ (month == 5) ^ (month == 7) ^ (month == 8) ^ (month == 10) ^ (month == 12)) {
System.out.print("Enter the number of hours the plan package was used: ");
hours = input.nextInt();
if (hours > 744) {
System.out.println("ERROR: The number of hours cannot be higher than 744 on the month selected.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else if (hours < 0) {
System.out.println("ERROR: The number of hours cannot be negative.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else {
if (hours < 10 && hours >= 1){
System.out.println("The cost of your bill is: $15.95");
}
else if (hours > 10 && hours <= 744) {
total_1 = ((hours - 10) * 2) + 15.95;
System.out.println("The cost of your bill is: $" + total_1);
}
}
}
else if (month == 2) {
System.out.print("Enter the number of hours the plan package was used: ");
hours = input.nextInt();
if (hours > 672) {
System.out.println("ERROR: The number of hours cannot be higher than 672 on February.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else if (hours < 0) {
System.out.println("ERROR: The number of hours cannot be negative.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else {
if (hours < 10 && hours >= 1){
System.out.println("The cost of your bill is: $15.95");
}
else if (hours > 10 && hours <= 672) {
total_1 = ((hours - 10) * 2) + 15.95;
System.out.println("The cost of your bill is: $" + total_1);
}
}
}
else {
System.out.print("Enter the number of hours the plan package was used: ");
hours = input.nextInt();
if (hours > 720) {
System.out.println("ERROR: The number of hours cannot be higher than 722 on the month selected.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else if (hours < 0) {
System.out.println("ERROR: The number of hours cannot be negative.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else {
if (hours < 10 && hours >= 1){
System.out.println("The cost of your bill is: $15.95");
}
else if (hours > 10 && hours <= 720) {
total_1 = ((hours - 10) * 2) + 15.95;
System.out.println("The cost of your bill is: $" + total_1);
}
}
}
case PACKAGE_2:
if ((month == 1) ^ (month == 3) ^ (month == 5) ^ (month == 7) ^ (month == 8) ^ (month == 10) ^ (month == 12)) {
if (choice == 2) {
System.out.print("Enter the number of hours the plan package was used: ");
hours = input.nextInt();
if (hours > 744) {
System.out.println("ERROR: The number of hours cannot be higher than 744 on the selected month.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else if (hours < 0) {
System.out.println("ERROR: The number of hours cannot be negative.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else {
if (hours < 20 && hours >= 1) {
System.out.println("The cost of your bill is: $20.95");
}
else if (hours > 20 && hours <= 744) {
total_2 = (hours - 20) + 20.95;
System.out.println("The cost of your bill is: $" + total_2);
}
}
}
else {
if (hours < 20 && hours >= 1) {
System.out.println("The cost of package 2 bill is: $20.95");
savings_1 = total_1 - total_2d;
System.out.println("You could saved: $" + savings_1);
}
else if (hours > 20 && hours <= 744) {
total_2 = (hours - 20) + 20.95;
System.out.println("The cost of package 2 bill is: $" + total_2);
savings_1 = total_1 - total_2d;
System.out.println("You could saved: $" + savings_1);
}
}
else if (month == 2) {
if (choice == 2) {
System.out.print("Enter the number of hours the plan package was used: ");
hours = input.nextInt();
if (hours > 672) {
System.out.println("ERROR: The number of hours cannot be higher than 672 on February.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else if (hours < 0) {
System.out.println("ERROR: The number of hours cannot be negative.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else {
if (hours < 20 && hours >= 1){
System.out.println("The cost of your bill is: $20.95");
}
else if (hours > 20 && hours <= 672) {
total_2 = (hours - 20) + 20.95;
System.out.println("The cost of your bill is: $" + total_2);
}
}
}
else {
if (hours < 20 && hours >= 1) {
System.out.println("The cost of package 2 bill is: $20.95");
savings_1 = total_1 - total_2d;
System.out.println("You could saved: $" + savings_1);
}
else if (hours > 20 && hours <= 672) {
total_2 = (hours - 20) + 20.95;
System.out.println("The cost of package 2 bill is: $" + total_2);
savings_1 = total_1 - total_2d;
System.out.println("You could saved: $" + savings_1);
}
}
}
else {
if (choice == 2) {
System.out.print("Enter the number of hours the plan package was used: ");
hours = input.nextInt();
if (hours > 720) {
System.out.println("ERROR: The number of hours cannot be higher than 722 on the selected month.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else if (hours < 0) {
System.out.println("ERROR: The number of hours cannot be negative.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else {
if (hours < 20 && hours >= 1){
System.out.println("The cost of your bill is: $20.95");
}
else if (hours > 20 && hours <= 720) {
total_2 = (hours - 20) + 20.95;
System.out.println("The cost of your bill is: $" + total_2);
}
}
}
else {
if (hours < 20 && hours >= 1) {
System.out.println("The cost of package 2 bill is: $20.95");
savings_1 = total_1 - total_2d;
System.out.println("You could saved: $" + savings_1);
}
else if (hours > 20 && hours <= 720) {
total_2 = (hours - 20) + 20.95;
System.out.println("The cost of package 2 bill is: $" + total_2);
savings_1 = total_1 - total_2d;
System.out.println("You could saved: $" + savings_1);
}
}
}
case PACKAGE_3:
if ((month == 1) ^ (month == 3) ^ (month == 5) ^ (month == 7) ^ (month == 8) ^ (month == 10) ^ (month == 12)) {
if (choice == 3) {
System.out.print("Enter the number of hours you used your plan package: ");
hours = input.nextInt();
if (hours > 744) {
System.out.println("Enter the number of hours the plan package was used: ");
System.out.println("Now the program will exit.");
System.exit(1);
}
else if (hours < 0) {
System.out.println("ERROR: The number of hours cannot be negative.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else {
System.out.println("The cost of your bill is: $30.99");
}
}
else {
System.out.println("The cost of package 3 bill is: $30.99");
savings_2 = total_1 - total_3d;
System.out.println("You could saved: $" + savings_2);
}
}
else if (month == 2) {
if (choice == 3) {
System.out.print("Enter the number of hours the plan package was used: ");
hours = input.nextInt();
if (hours > 672) {
System.out.println("ERROR: The number of hours cannot be higher than 672 on February.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else if (hours < 0) {
System.out.println("ERROR: The number of hours cannot be negative.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else {
System.out.println("The cost of your bill is: $30.99");
}
}
else {
System.out.println("The cost of package 3 bill is: $30.99");
savings_2 = total_1 - total_3d;
System.out.println("You could saved: $" + savings_2);
}
}
else {
if (choice == 3) {
System.out.print("Enter the number of hours the plan package was used: ");
hours = input.nextInt();
if (hours > 720) {
System.out.println("ERROR: The number of hours cannot be higher than 720 on the selected month.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else if (hours < 0) {
System.out.println("ERROR: The number of hours cannot be negative.");
System.out.println("Now the program will exit.");
System.exit(1);
}
else {
System.out.println("The cost of your bill is: $30.99");
}
}
else {
System.out.println("The cost of package 3 bill is: $30.99");
savings_2 = total_1 - total_3d;
System.out.println("You could saved: $" + savings_2);
}
}
}
}
}
编译代码会产生这样的结果:
HW04P05.java:176: error: variable hours might not have been initialized
if (hours < 20 && hours >= 1) {
^
HW04P05.java:178: error: variable total_1 might not have been initialized
savings_1 = total_1 - total_2d;
^
HW04P05.java:184: error: variable total_1 might not have been initialized
savings_1 = total_1 - total_2d;
^
HW04P05.java:214: error: variable hours might not have been initialized
if (hours < 20 && hours >= 1) {
^
HW04P05.java:216: error: variable total_1 might not have been initialized
savings_1 = total_1 - total_2d;
^
HW04P05.java:222: error: variable total_1 might not have been initialized
savings_1 = total_1 - total_2d;
^
HW04P05.java:252: error: variable hours might not have been initialized
if (hours < 20 && hours >= 1) {
^
HW04P05.java:254: error: variable total_1 might not have been initialized
savings_1 = total_1 - total_2d;
^
HW04P05.java:260: error: variable total_1 might not have been initialized
savings_1 = total_1 - total_2d;
^
HW04P05.java:286: error: variable total_1 might not have been initialized
savings_2 = total_1 - total_3d;
^
HW04P05.java:310: error: variable total_1 might not have been initialized
savings_2 = total_1 - total_3d;
^
HW04P05.java:334: error: variable total_1 might not have been initialized
savings_2 = total_1 - total_3d;
^
12 errors
【问题讨论】:
-
你在哪一行给变量
hours赋值? -
@IlyaBursov 有几行给小时赋值,但也有一些路径没有。
-
在您的
else-if语句中的某个时刻,您正在使用变量/s 而没有为其分配值。 -
该值必须由用户指定。
-
另外,您的意思是在您的 if 语句中使用排他或
^,还是您真的想要或||他们?
标签: java variables if-statement compiler-errors switch-statement