我遇到了问题。在最后一个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();
}
}
答案 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路径以获取更多信息