Java 生成账单
我有个问题。在最后一个switch语句中,当我按4时,这将返回主菜单。为1,2,3输入的所有值都将重置。我应该怎么做才能使这些值不被重置。 包分配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
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();
}