Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生成账单_Java - Fatal编程技术网

Java 生成账单

Java 生成账单,java,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

我有个问题。在最后一个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();
    }
}                       
import java.util.Scanner;
公开课3{
公共静态void main(字符串[]args){
扫描仪s=新的扫描仪(System.in);
国际货币基金组织;
布尔完成=假;

对于(inti=0;i有许多方法可以解决这个问题,每种方法都有各自的优缺点

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

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

与在
main
方法的
static
上下文中操作不同,此解决方案将创建
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();
}

虽然这似乎令人困惑,但实际上这是非常简单的OOP原则。我强烈建议您查看跟踪了解更多信息

在哪里存储“用法详细信息”?将属性包装在一个普通的旧java对象(POJO)中并将它们返回给调用方。如果需要,请允许该方法接受包含以前值的对象,以便可以更新them@MadProgrammer当前位置他还没有进入POJO阶段,而是处于“一切都是静态的”阶段舞台。但我看不到任何静态场,我猜他需要。我不知道怎么做。我对这件事很陌生。你能告诉我吗@HovercraftFullOfEels@HovercraftFullOfEels我只想看到世界燃烧:)向风车倾斜,我看到我的…底座:P@MadProgrammer还是同一个问题。当我按return to menu(返回菜单)时,它没有存储值。@AbhiteshJindal那么您可能没有从子菜单方法中删除局部变量
public static void main(String[] args) {
    Assign3 assign3 = new Assign3();
    assign3.mainMenu();
}