生成账单

时间:2017-04-18 01:28:20

标签: java

我遇到了问题。在最后一个switch语句中,当我按下4即返回主菜单。为1,2,3输入的所有值都将重置。我应该怎么做才能使这些值不被重置。 包分配;

import java.util.Scanner;

public class Assign3 {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int menuSel;
        Boolean done = false;
        for (int i = 0; i <= 78; i++) {
            System.out.print("=");
        }
        System.out.println("\n\t\t FEDERATION UNIVERSITY PHONE BILL COMPARISON SYSTEM");
        System.out.println("");
        System.out.println("Developed by Abhitesh Jindal, Student ID 30334858 for ITECH1000 Semester 1 2017");
        System.out.println("");
        for (int i = 0; i <= 78; i++) {
            System.out.print("=");
        }
        while (!done) {
            System.out.println("\nMAIN MENU");
            System.out.println("Please select an option from the menu: "
                    + "\n\t 1. Enter Usage Details \n\t " + "2. Display Cost Under Plan A \n\t "
                    + "3. Display Cost Under Plan B \n\t " + "4. Clear Usage Details \n\t "
                    + "5. Exit System");
            System.out.println("Enter selection:");
            menuSel = s.nextInt();
            switch (menuSel) {
            case 1:
                System.out.print(" Enter Usage Details ");
                submenu();
                break;
            case 2:
                System.out.print("Display Cost Under Plan A");
                break;
            case 3:
                System.out.println("Display Cost Under Plan B");
                break;
            case 4:
                System.out.println("Clear Usage Details");
                break;
            case 5:
                System.out.println("Exit System");
                done = true;
                break;
            default:
                System.out.println("Value must be between 1 and 5. Please try again:");
                break;
            }
        }
        s.close();
    }

    static void submenu() {
        Scanner a = new Scanner(System.in);
        Boolean done1 = false;
        int numCalls = 0;
        int SMS = 0;
        int callLength = 0;
        int totalCallSeconds = 0;
        while (!done1) {
            System.out.println("\nENTER USAGE DETAILS MENU: " + "\n1. Phone Call" + "\n2. SMS"
                    + "\n3. Data Usage" + "\n4. Return to main menu");
            System.out.println("Enter Selection:");
            int subMenu = a.nextInt();
            switch (subMenu) {
            case 1:
                System.out.println("Enter Length of Call in Seconds:  ");
                ++numCalls;
                System.out.println("Total Call" + numCalls);
                callLength = a.nextInt();
                totalCallSeconds = totalCallSeconds + callLength;
                System.out.println("Total Seconds" + totalCallSeconds);
                if (callLength < 1) {
                    System.out.println("Value must be positive.Please Enter value again");
                    callLength = a.nextInt();
                    totalCallSeconds = totalCallSeconds + callLength;
                    System.out.println("Total Seconds" + totalCallSeconds);
                }
                break;
            case 2:
                ++SMS;
                System.out.print("Total number of SMS= " + SMS);
                break;
            case 3:
                System.out.println("Enter amount of Data used:");
                int DataUsed = a.nextInt();
                if (DataUsed < 1) {
                    System.out.println("Value must be positive");
                    System.out.println("Enter Value again");
                    DataUsed = a.nextInt();
                }
                break;
            case 4:
                System.out.println("Return to mainu menu");
                return;
            default:
                System.out.println("Invalid Selection");
                break;
            }
        }
        a.close();
    }
}                       

1 个答案:

答案 0 :(得分:1)

有很多方法可以解决这个问题,每种方法各有利弊。

您正在使用,即所谓的面向对象编程语言(OOP),它具有与之相关的独特特征和最佳实践。

在OOP中,操纵/管理数据的数据和功能被“封装”到“对象”中。这个解决方案将会延伸这个概念,但基本上是相同的想法。

此解决方案不是在static方法的main上下文中运行,而是创建Assign3的实例,并允许程序在其上下文中运行(批量)大词,不要紧张)。

这意味着,我们可以定义“实例字段”,它们包含对象的值/属性,并且可以在同一实例或副本中与对象的其他方法共享。

所以,我要做的第一件事就是移动方法变量并改为实例字段/变量......

public class Assign3 {

    int numCalls = 0;
    int SMS = 0;
    int callLength = 0;
    int totalCallSeconds = 0;

这使得它们可供全班使用

接下来,我将把main方法的内容移动到Assign3的实例方法中,这样我就可以从类的实例访问它了。

public void mainMenu() {
    Scanner s = new Scanner(System.in);
    int menuSel;
    Boolean done = false;
    for (int i = 0; i <= 78; i++) {
        System.out.print("=");
    }
    System.out.println("\n\t\t FEDERATION UNIVERSITY PHONE BILL COMPARISON SYSTEM");
    System.out.println("");
    System.out.println("Developed by Abhitesh Jindal, Student ID 30334858 for ITECH1000 Semester 1 2017");
    System.out.println("");
    for (int i = 0; i <= 78; i++) {
        System.out.print("=");
    }
    while (!done) {
        System.out.println("\nMAIN MENU");
        System.out.println("Please select an option from the menu: "
                + "\n\t 1. Enter Usage Details \n\t " + "2. Display Cost Under Plan A \n\t "
                + "3. Display Cost Under Plan B \n\t " + "4. Clear Usage Details \n\t "
                + "5. Exit System");
        System.out.println("Enter selection:");
        menuSel = s.nextInt();
        switch (menuSel) {
            case 1:
                System.out.print(" Enter Usage Details ");
                submenu();
                break;
            case 2:
                System.out.print("Display Cost Under Plan A");
                break;
            case 3:
                System.out.println("Display Cost Under Plan B");
                break;
            case 4:
                System.out.println("Clear Usage Details");
                break;
            case 5:
                System.out.println("Exit System");
                done = true;
                break;
            default:
                System.out.println("Value must be between 1 and 5. Please try again:");
                break;
        }
    }
    s.close();
}

然后,在main方法中,我将创建一个新的类实例,并调用它的mainMenu方法来推动滚动...

public static void main(String[] args) {
    Assign3 assign3 = new Assign3();
    assign3.mainMenu();
}

虽然这可能看起来令人困惑,但这实际上是非常简单的OOP原则。我强烈建议您查看Classes and Objects路径以获取更多信息