2 baidu 31670843 baidu_31670843 于 2016.04.08 09:59 提问

Java编写的售票系统问题求教

编程初学者,我用Java编写了一个简单的售票系统,但是运行时候报错,希望大牛能帮我看一下!
这是一个User类:

package subwayTicketSellingSystem;
import java.util.Scanner;

public class User
{
private String ticketType;
private Ticket tic;
private TicketMachine machine;
public double money;
public Ticket buyTicket;
public static void main(String[] args)
{
User user1 = new User();
System.out.println("Please choose your ticket type: ");
System.out.println("1: normal ticket");
System.out.println("2: day ticket");
Scanner ticketType = new Scanner(System.in);
String ticType = ticketType.nextLine();
switch(ticType)
{
case "1":
user1.tic = new norTicket();
break;
case "2":
user1.tic = new dayTicket();
}
System.out.println("Your ticket price is: " + user1.tic.calculatePrice());
System.out.println("Please pay for your tickets: ");
Scanner money = new Scanner(System.in);
String userMoney = money.nextLine();
if (user1.machine.collectMoney())
{
System.out.println("Your charge is: " + user1.machine.giveCharge());
user1.machine.printTicket();
}
else System.out.println("Mnoey is not enough, invalid operation.");
}
}
这是一个TicketMachine类:
package subwayTicketSellingSystem;

public class TicketMachine
{
User u1 = new User();
public Ticket Tickets[];
public double getTicketPrice()
{
return u1.buyTicket.calculatePrice();
}
public boolean collectMoney()
{
if ( u1.money >= u1.buyTicket.calculatePrice())
return true;
else return false;
}
public double giveCharge()
{
return u1.money - u1.buyTicket.calculatePrice();
}
public Ticket printTicket()
{
System.out.println("Your original station: ");
return null;
}
}
报错信息:
Exception in thread "main" java.lang.NullPointerException
at subwayTicketSellingSystem.User.main(User.java:31)
十分感谢!

5个回答

strutce
strutce   Ds   Rxr 2016.04.08 10:10

是的user1对象中的参数为null,你debug下,那个值为null

qq_26636247
qq_26636247   2016.04.08 10:14

case "1":
user1.tic = new norTicket();
break;
case "2":
user1.tic = new dayTicket();

user属性赋值要用setTic(),对象属性要有get、set方法的!

u011225629
u011225629   2016.04.08 11:18

String userMoney = money.nextLine();
if (user1.machine.collectMoney())
{
System.out.println("Your charge is: " + user1.machine.giveCharge());
user1.machine.printTicket();
}、
这部分的出现的空指针错误,八成是你的user1为空所以。。。。

theSnai1
theSnai1   2016.04.08 12:57

at subwayTicketSellingSystem.User.main(User.java:31),提示User类的main方法中的user.java文件的31行报错空指针,因为User的属性machine没有进行初始化,Java的默认构造函数会将machine置为null,因而报错空指针。

liuweihong2000
liuweihong2000   2016.04.09 17:38

我专门把你的代码放入了eclipse,可以很明显地看出,machine没有实例化。应该调用 new 来生成对象。
更进一步,象这种 TicketMachine 往往在系统中只有一个,应该采用单例模式。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
javaSE基础编程——线程同步(模拟火车站售票操作)
 用多线程模拟火车站的售票操作。    a.售票总数为100张车票    b.由四个窗口(线程)模拟售票    线程休眠1秒钟售一张火车票.    要求:同步块,同步方法。 package com.cissst.software.synthread; public class MainThread {  /**   * @param args   * 5.用多线程模
java模拟火车站售票系统源代码
模拟火车站售票系统模拟火车站售票系统模拟火车站售票系统模拟火车站售票系统
JAVA车站管理售票系统
包括登录、查询车次、购票、退票等功能。
java线程——模拟多窗口售票过程
假设有5个售票员,在同时卖100张票,模拟买票过程。 我们知道,在售票过程中,不同窗口同时售票,对于同一张票,不可以出售两次,售票员在售票过程中互不影响,而又需要同时售票。这就需要利用线程来实现。 import java.util.Random; public class Test {     public static void main(String[] args) {     
自动售票系统(JAVA课程代码)
JAVA课程的一个动车自动售票系统程序,程序代码这些比较简单,基本功能也能够实现。但是没有使用Swing界面
使用Java实现的简易多窗口卖票程序
/* * * 使用Runnable接口方式实现线程,并实现多窗口卖票。 * * * * */ public class Demo1 implements Runnable { int num = 50;// 因为只创建了一个Demo1对象,所以此处并不需要加上Static关键字。 int i = 0; public void run() { while (true)
JAVA 个人版电影院售票管理系统
Netbeans实现的电影院管理售票系统
电影订票系统Java实用源码整理learns
电影订票系统Java实用源码整理learns
Java多线程实现简单的售票程序
设计一个多线程程序如下:设计一个火车售票模拟程序。假如火车站要有100张火车票要卖出,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况 1、要求打印出每个售票点所卖出的票号 2、各售票点不能售出相同票号的火车票   package com.hebust.java.third; import java.util.Random;
java线程例子(售票窗口同时出售1000张票)
售票窗口同时出售1000张票 public class Station extends thread{ public Station(String name){ super(name) } static int ticket = 1000; static object ob="a"; public void run(){ while(ticket>0){ synchronized(ob)