所以这个有点长。我正在尝试完成一个票价根据购买日期而变化的节目。我需要 Tester.Java 从对象中获取信息,并根据门票类型输出适当的价格。我已经在测试器中设置了一组 if 语句,但我现在对如何完成这个程序陷入了僵局。我将在下面粘贴我的代码。
测试器(包含主要方法):
package tester;
import java.util.Scanner;
public class Tester extends Ticket{
/**
* @param args the command line arguments
*/
public static void main(String[] args){
Scanner db = new Scanner(System.in);
Ticket firstTicket = new Ticket();
System.out.println("The first ticket: "+firstTicket.toString());
int x = 0;
while(x!=2){
if(x==2){
System.out.println("Goodbye.");
}
else{
System.out.println("What type of ticket are you purchasing?");
System.out.println("1.Walk Up");
System.out.println("2.Advance");
System.out.println("3.Student Advance");
int t = db.nextInt();
if(t==1){
}
if(t==2){
}
if(t==3){
}
}
System.out.println("Do you need another ticket?");
x= db.nextInt();
}
}
}
门票( super 舱):
package tester;
import java.util.Scanner;
public class Ticket {
public int ticket;
public double price;
/**
* holds default values for ticket number and price
*/
public Ticket(){
super();
this.ticket=1;
this.price=15.0;
}
/**
* Stores the values for ticket number and the price, based upon ticket type
* @param ticket
* @param price
*/
public Ticket(int ticket, double price){
this.ticket=ticket;
this.price=price;
}
/**
* returns the value of price
* @return price
*/
public double getPrice(){
return price;
}
@Override
public String toString(){
return "Ticket #" + ticket + " Ticket price: $"+ price;
}
}
步行票:
package tester;
/**
*
* @author dylan
*/
public class WalkupTicket extends Ticket{
/**
* holds the price of a walkup ticket 50$
*/
public WalkupTicket(){
this.price=50;
ticket++;
}
}
预售票:
package tester;
import java.util.Scanner;
public class AdvanceTicket extends Ticket {
/**
* stores the values of an advance ticket, depending on how many days before
* the event it is purchased
*/
public AdvanceTicket(){
Scanner db = new Scanner(System.in);
System.out.println("How many days before the event are you purchasing your ticket?");
int days = db.nextInt();
// days before is 10 or less days
if(days >= 10){
price=30;
ticket++;
}
// days before is more than 10
else{
this.price=40;
ticket++;
}
}
}
学生预售票:
package tester;
import java.util.Scanner;
public class StudentAdvanceTicket extends AdvanceTicket{
/**
* stores the values of an advance ticket, depending on how many days before
* the event it is purchased, with student discount.
*/
public StudentAdvanceTicket(){
Scanner db = new Scanner(System.in);
System.out.println("How many days before the event are you purchasing your ticket?");
int days = db.nextInt();
System.out.println("Are you a student?");
System.out.println("1. Yes");
System.out.println("2. No");
int stud = db.nextInt();
// days before is 10 or less days
if(days >= 10 && stud == 1){
price=15;
ticket++;
}
// days before is more than 10
if(days <= 10 && stud == 1){
this.price=20;
ticket++;
}
}
}
我觉得我犯了一个简单的错误,但我是 OOP 新手,所以我在这方面遇到了一些麻烦。
最佳答案
您应该为所有购买的门票节省总计,还是一次只保存一张门票的总计?
对于现场门票,您无需执行任何操作。总共 50 美元。
对于 Advance 和 StudentAdvance,您将创建该类型的新对象,并且构造函数将提前多少天显示菜单,以及不显示什么。然后您可以从中得到总数。
至于你的代码结构并不理想。对象的构造函数中不应包含所有代码。他们应该有一个 ShowMenu 函数,可以向用户显示菜单并读取他们的输入。构造函数大部分应该是空白的。
您也不需要三个不同的票证对象。一个票证对象应该能够自行处理所有这些。票证对象可以显示菜单并根据用户输入处理不同的价格。如果您需要保存总计或不同的票证,您可以在 main 方法上拥有一组票证对象。然后,您可以循环该数组来显示或求和票证。
希望这有帮助。
关于java - OOP 票价计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43811302/