看下面的截图输入的部分!!!import java.util.*;class Ticket{
protected String trainNum;
protected String startCity;
protected String toCity;
protected String date;
protected String startTime;
protected String toTime;
protected int seatAccount;
protected double ticketPrice;
static int ticketsNum;

static Ticket ticket0 = Ticket.incTicket();
static Ticket ticket1 = Ticket.incTicket();
static Ticket[] tickets = new Ticket[ticketsNum + 1]; public Ticket(){}

public static Ticket incTicket(){
ticketsNum++;
return new Ticket();
}

public String getTrainNum(){return this.trainNum;}
public String getStartCity(){return this.startCity;}
public String getToCity(){return this.toCity;}
public String getDate(){return this.date;}
public String getStartTime(){return this.startTime;}
public String getToTime(){return this.toTime;}

public void setTrainInfo(String tN,String sC, String tC, String d, String sT, String tT, int sA, double tP){
this.trainNum = tN;
this.startCity = sC;
this.toCity = tC;
this.date = d;
this.startTime = sT;
this.toTime = tT;
this.seatAccount = sA;
this.ticketPrice = tP;
}

static void getTotalTrainsInfo(){
System.out.printf("%10s%9s%14s%14s%10s%10s%7s%10s\n", 
"班   次","日   期","始   发   站","终   点   站","始发时间","到达时间","座位量","票    价");
for(int i = 0; i < Ticket.ticketsNum; i++){
System.out.printf("  %-6s%-7s%-10s%-10s%-10s%-9s%-7d%-7.2f\n",tickets[i].trainNum,tickets[i].date,tickets[i].startCity,
tickets[i].toCity,tickets[i].startTime,tickets[i].toTime,tickets[i].seatAccount,tickets[i].ticketPrice);
}
}

static void printWithIndex(int i){
System.out.printf("%10s%9s%14s%14s%10s%10s%7s%10s\n", 
"班   次","日   期","始   发   站","终   点   站","始发时间","到达时间","座位量","票    价");
System.out.printf("  %-6s%-7s%-10s%-10s%-10s%-9s%-7d%-7.2f\n",tickets[i].trainNum,tickets[i].date,tickets[i].startCity,
tickets[i].toCity,tickets[i].startTime,tickets[i].toTime,tickets[i].seatAccount,tickets[i].ticketPrice);
} static void getTrainInfoByCity(){
Scanner input = new Scanner(System.in);
System.out.print("输入起点: ");
String startCity = input.nextLine();
System.out.print("输入终点: ");
String toCity = input.nextLine();
for(int index = 0; index < Ticket.ticketsNum; index++){
if(Ticket.tickets[index].getStartCity().compareTo(startCity) == 0 
&& Ticket.tickets[index].getToCity().compareTo(toCity) == 0){
printWithIndex(index);
}
}
}

/* static void getTrainInfoOfUser(){
Scanner input = new Scanner(System.in);
System.out.print("输入姓名: ");
String userName = input.nextLine();
for(int index = 0; index < Users.usersNum; index++){
if(Users.users[index].)
}
}*/
}class Users extends Ticket{ String userName;
public static int usersNum;

public static Ticket[] users = new Users[Users.usersNum + 1];

public Users(){
++usersNum;
}

static void queryPage(){
System.out.println("    *****查询系统***** ");
System.out.println(" 1-----> 全部路线查询");
System.out.println(" 2-----> 起终点查询");
System.out.println(" 3-----> 用户名查询");
}

static void querying(){
Scanner input = new Scanner(System.in);
queryPage();
while(true){
System.out.print("请选择: ");
int choice = input.nextInt();
switch(choice){
case 1:
Ticket.getTotalTrainsInfo();break;
case 2:
Ticket.getTrainInfoByCity();break;
case 3:

}
}
}
static void booking(){
boolean choice = false;
do{
Users user = new Users();
users[Users.usersNum - 1] = user;
System.out.println(Users.usersNum);
Scanner input = new Scanner(System.in);
System.out.print("输入姓名:");
String inputName = input.nextLine();
user.userName = inputName;
System.out.println(" 可供选择的班次信息入下:");
Ticket.getTotalTrainsInfo();
System.out.print("输入班次号: ");
String inputTrainNum = input.nextLine();
for(int index = 0; index < Ticket.ticketsNum; index++){
if(Ticket.tickets[index].getTrainNum().compareTo(inputTrainNum) == 0){
Ticket.tickets[index].seatAccount--;
// users[Users.usersNum - 1] = Ticket.tickets[index];
System.out.println(" ***订票成功***");
}
}
System.out.print("是否继续? (true/false): ");
choice = input.nextBoolean();
}while(choice);
if(choice == false){
BookingSystem.homePage();
}
}

static void returning(){

}
}public class BookingSystem {
static void homePage(){
System.out.println(" *****欢迎来到火车订票系统***** ");
System.out.println(" 1-----> 查询");
System.out.println(" 2-----> 订票");
System.out.println(" 3-----> 退票");
}
public static void main(String[] args){
(Ticket.tickets[0] = Ticket.ticket0).setTrainInfo("K000", "Hefei", "Beijing", "12/07", "08:30", "09:30", 50, 34.0);
(Ticket.tickets[1] = Ticket.ticket1).setTrainInfo("K111", "Shanghai", "Hefei", "21/07", "09:45", "11:00", 50, 50.5);
BookingSystem.homePage();
Scanner input = new Scanner(System.in);
while(true){
System.out.print("请选择: ");
int choice = input.nextInt();
switch(choice){
case 1:
Users.querying();
break;
case 2:
Users.booking();
break;
case 3:
break;
}
}
}
}
问题一:是数组越界问题
*****欢迎来到火车订票系统*****
1-----> 查询
2-----> 订票
3-----> 退票
请选择: 2
1
输入姓名:dai
可供选择的班次信息入下:
     班   次    日   期     始   发   站     终   点   站      始发时间      到达时间    座位量    票    价
  K000  12/07  Hefei     Beijing   08:30     09:30    50     34.00  
  K111  21/07  Shanghai  Hefei     09:45     11:00    50     50.50  
输入班次号: K000
***订票成功***
是否继续? (true/false): true //输入true无法继续订票
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Users.booking(BookingSystem.java:123)
at BookingSystem.main(BookingSystem.java:173)
问题二: 输入false后,在订票也不行,是数组越界问题
*****欢迎来到火车订票系统*****
1-----> 查询
2-----> 订票
3-----> 退票
请选择: 2
1
输入姓名:dai
可供选择的班次信息入下:
     班   次    日   期     始   发   站     终   点   站      始发时间      到达时间    座位量    票    价
  K000  12/07  Hefei     Beijing   08:30     09:30    50     34.00  
  K111  21/07  Shanghai  Hefei     09:45     11:00    50     50.50  
输入班次号: K000
***订票成功***
是否继续? (true/false): false
*****欢迎来到火车订票系统*****
1-----> 查询
2-----> 订票
3-----> 退票
请选择: 2
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Users.booking(BookingSystem.java:123)
at BookingSystem.main(BookingSystem.java:173)

解决方案 »

  1.   


        public static int usersNum;    
         
        public static Ticket[] users = new Users[Users.usersNum + 1];
         
        public Users(){
            ++usersNum;
        }
    users数组不会动态扩展的,只在首次初始化一下而已,它一直都只有1的size。修改下:public static List<Users> users = new ArrayList<Users>();
    booking那里users.add(user);
      

  2.   

    另外一个问题就是nextint的使用,回车会影响后面的选取。修改如下:package y2013.testCSDN;import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;class Ticket{
        protected String trainNum;
        protected String startCity;
        protected String toCity;
        protected String date;
        protected String startTime;
        protected String toTime;
        protected int seatAccount;
        protected double ticketPrice;
        static int ticketsNum;
         
        static Ticket ticket0 = Ticket.incTicket();
        static Ticket ticket1 = Ticket.incTicket();
        static Ticket[] tickets = new Ticket[ticketsNum + 1];
     
        public Ticket(){}
         
        public static Ticket incTicket(){
            ticketsNum++;
            return new Ticket();
        }
         
        public String getTrainNum(){return this.trainNum;}
        public String getStartCity(){return this.startCity;}
        public String getToCity(){return this.toCity;}
        public String getDate(){return this.date;}
        public String getStartTime(){return this.startTime;}
        public String getToTime(){return this.toTime;}
         
        public void setTrainInfo(String tN,String sC, String tC, String d, String sT, String tT, int sA, double tP){
            this.trainNum = tN;
            this.startCity = sC;
            this.toCity = tC;
            this.date = d;
            this.startTime = sT;
            this.toTime = tT;
            this.seatAccount = sA;
            this.ticketPrice = tP;
        }
             
        static void getTotalTrainsInfo(){
            System.out.printf("%10s%9s%14s%14s%10s%10s%7s%10s\n", 
                                "班   次","日   期","始   发   站","终   点   站","始发时间","到达时间","座位量","票    价");
            for(int i = 0; i < Ticket.ticketsNum; i++){
                System.out.printf("  %-6s%-7s%-10s%-10s%-10s%-9s%-7d%-7.2f\n",tickets[i].trainNum,tickets[i].date,tickets[i].startCity,
                                    tickets[i].toCity,tickets[i].startTime,tickets[i].toTime,tickets[i].seatAccount,tickets[i].ticketPrice);
            }
        }
         
        static void printWithIndex(int i){
            System.out.printf("%10s%9s%14s%14s%10s%10s%7s%10s\n", 
                    "班   次","日   期","始   发   站","终   点   站","始发时间","到达时间","座位量","票    价");
            System.out.printf("  %-6s%-7s%-10s%-10s%-10s%-9s%-7d%-7.2f\n",tickets[i].trainNum,tickets[i].date,tickets[i].startCity,
                    tickets[i].toCity,tickets[i].startTime,tickets[i].toTime,tickets[i].seatAccount,tickets[i].ticketPrice);
        }
     
        static void getTrainInfoByCity(){
            Scanner input = new Scanner(System.in);
            System.out.print("输入起点: ");
            String startCity = input.nextLine();
            System.out.print("输入终点: ");
            String toCity = input.nextLine();
            for(int index = 0; index < Ticket.ticketsNum; index++){
                if(Ticket.tickets[index].getStartCity().compareTo(startCity) == 0 
                        && Ticket.tickets[index].getToCity().compareTo(toCity) == 0){
                    printWithIndex(index);
                }
            }
        }
         
    /*    static void getTrainInfoOfUser(){
            Scanner input = new Scanner(System.in);
            System.out.print("输入姓名: ");
            String userName = input.nextLine();
            for(int index = 0; index < Users.usersNum; index++){
                if(Users.users[index].)
            }
        }*/
    }
     
    class Users extends Ticket{
     
        String userName;
        public static int usersNum;    
         
        public static List<Users> users = new ArrayList<Users>();
         
        public Users(){
            ++usersNum;
        }
         
        static void queryPage(){
            System.out.println("           *****查询系统*****    ");
            System.out.println("            1----->    全部路线查询");
            System.out.println("            2----->    起终点查询");
            System.out.println("            3-----> 用户名查询");
        }
         
        static void querying(){
            Scanner input = new Scanner(System.in);    
            queryPage();
            while(true){
                System.out.print("请选择: ");
                String str = input.nextLine();
                int choice = Integer.parseInt(str);
                switch(choice){
                case 1:
                    Ticket.getTotalTrainsInfo();break;
                case 2:
                    Ticket.getTrainInfoByCity();break;
                case 3:
                     
                }
            }
        }
         
     
        static void booking(){
            boolean choice = false;
            do{
                Users user = new Users();
                users.add(user);
                System.out.println(Users.usersNum);
                Scanner input = new Scanner(System.in);
                System.out.print("输入姓名:");
                String inputName = input.nextLine();
                user.userName = inputName;
                System.out.println("        可供选择的班次信息入下:");
                Ticket.getTotalTrainsInfo();
                System.out.print("输入班次号: ");
                String inputTrainNum = input.nextLine();
                for(int index = 0; index < Ticket.ticketsNum; index++){
                    if(Ticket.tickets[index].getTrainNum().compareTo(inputTrainNum) == 0){
                        Ticket.tickets[index].seatAccount--;
                //        users[Users.usersNum - 1] = Ticket.tickets[index];
                        System.out.println("    ***订票成功***");
                    }
                }
                System.out.print("是否继续? (true/false): ");
                String temp = input.nextLine();
                choice = Boolean.valueOf(temp);
            }while(choice);
            if(choice == false){
                BookingSystem.homePage();
            }
        }
         
        static void returning(){
             
        }
    }
     
    public class BookingSystem {
        static void homePage(){
            System.out.println("        *****欢迎来到火车订票系统*****    ");
            System.out.println("            1----->    查询");
            System.out.println("            2----->    订票");
            System.out.println("            3----->    退票");    
        }
        public static void main(String[] args){
            (Ticket.tickets[0] = Ticket.ticket0).setTrainInfo("K000", "Hefei", "Beijing", "12/07", "08:30", "09:30", 50, 34.0);
            (Ticket.tickets[1] = Ticket.ticket1).setTrainInfo("K111", "Shanghai", "Hefei", "21/07", "09:45", "11:00", 50, 50.5);    
            BookingSystem.homePage();
            Scanner input = new Scanner(System.in);
            while(true){
                System.out.print("请选择: ");
                String str = input.nextLine();
                int choice = Integer.parseInt(str);
                switch(choice){    
                case 1:
                    Users.querying();
                    break;
                case 2:
                    Users.booking();
                    break;
                case 3:
                    break;
                }
            }
        }
    }
      

  3.   

    我现在只看到多态,java学的不多,List<Users> users 这里我都看不懂啊,还有,除了你说的这种方法,要怎么才能让users数组动态扩展呢?
      

  4.   

    List<Users> 叫法是泛型  就是list的里面的对象的类型的意思 你用两次就习惯了
      

  5.   

    我现在只看到多态,java学的不多,List<Users> users 这里我都看不懂啊,还有,除了你说的这种方法,要怎么才能让users数组动态扩展呢?
    数组可以动态定义,但是一旦定义好了,其大小不可扩展了。List可以达到你需要的扩展,记录用户的目的。
    List不懂就再看看教材吧,这个是一个很常用的东西。
      

  6.   

    我现在只看到多态,java学的不多,List<Users> users 这里我都看不懂啊,还有,除了你说的这种方法,要怎么才能让users数组动态扩展呢?
    数组可以动态定义,但是一旦定义好了,其大小不可扩展了。List可以达到你需要的扩展,记录用户的目的。
    List不懂就再看看教材吧,这个是一个很常用的东西。
    ArrayList 构造的对象应该就可以动态扩展的吧,非要用泛型?
      

  7.   

    可是我改成你说的那样,users[Users.usersNum - 1] = user;怎么改啊,而且出了一些不会的问题,怎么修改啊?
      

  8.   

    改成:users.add(user);
    具体代码请看2L
      

  9.   

    我那个查询 switch 怎么不能跳转 break?
    *****欢迎来到火车订票系统*****
    1-----> 查询
    2-----> 订票
    3-----> 退票
    0-----> 退出
    请选择操作: 1
       *****查询系统*****
    1-----> 全部路线查询
    2-----> 起终点查询
    3-----> 用户名查询
    0-----> 退出
    请选择: 1
         班   次    日   期     始   发   站     终   点   站      始发时间      到达时间    座位量    票    价
      K000  12/07  Hefei     Beijing   08:30     09:30    50     34.00  
      K111  21/07  Shanghai  Hefei     09:45     11:00    50     50.50  
    请选择: 0
    请选择: //这里又回到查询的界面了....