搜索功能问题

时间:2012-01-02 16:14:31

标签: java arraylist

我的程序中有一个搜索功能,可以查找我的arraylist中的名字或人物。这可以找到该人的姓名,但我无法获得我需要的其他信息。我猜它是因为我还没有宣布什么。我不确定如何继续。

掌握我方法的第一堂课。

public String searchName(String guest)
{
  for (Booking s : bookings)
  {
      if (s.getGuest().equals(guest))
        return guest + " is in room " + roomID + "\n"; 
  }
  return guest + " is not booking in at the hostel";
}

我的第二课是我的GUI,它调用方法

else if (item.equals("Find Room"))
{
  String name = JOptionPane.showInputDialog(this, 
                    "Enter Guests Name",
                    "Find Room",
                    JOptionPane.QUESTION_MESSAGE);   
  output.setText( hostel.searchName(name));
}

我可以搜索人名,如果正确,可以找到并将信息成功地写入我的JTextArea。它不会显示roomID,只会出现null。我很困惑,我没有收到任何错误消息,而null与int不是字符串正常关联?

完整代码,如果需要GUI CLASS

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GUI extends JFrame implements ActionListener 
{
 private HostelFile hostel;
 private JPanel textOutput;
 private JScrollPane scroller;
 private JButton listFreeButton = new JButton("List Free Rooms");
 private JButton newBookingButton = new JButton("New Booking");
 private JButton cancelBookingButton = new JButton("Cancel Booking");
 private JButton listAllButton = new JButton("List All Bookings");   
 private JButton allRoomsButton = new JButton("List All Room Details");
 private JButton findRoomButton = new JButton("Find Room");
 private JButton exitButton = new JButton("Exit System");
 private JTextArea output = new JTextArea(30,30);

 public GUI(String hostelName)
 {
     super(hostelName);
     hostel = new HostelFile(hostelName);
     makeFrame();
     showFrame();
 }

 public void showFrame()    
 {   
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     
    setSize(800,600);
    setVisible(true);
 }

 public void makeFrame()    
 {
    JPanel buttonPanel = new JPanel();               
    buttonPanel.setLayout(new GridLayout(10,10,10,10));
    buttonPanel.setBorder(BorderFactory.createEtchedBorder());        
    buttonPanel.add(listFreeButton);
    buttonPanel.add(newBookingButton);
    buttonPanel.add(cancelBookingButton);
    buttonPanel.add(listAllButton);
    buttonPanel.add(allRoomsButton);
    buttonPanel.add(findRoomButton);
    buttonPanel.add(exitButton);

    textOutput = new JPanel();
    textOutput.setLayout(new BorderLayout());
    textOutput.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));

    output.setEditable(false);
    scroller = new JScrollPane(output);     
    textOutput.add(scroller);

    add(buttonPanel,BorderLayout.WEST);
    add(textOutput,BorderLayout.CENTER);

    listFreeButton.addActionListener(this);
    newBookingButton.addActionListener(this);
    cancelBookingButton.addActionListener(this);
    listAllButton.addActionListener(this);
    allRoomsButton.addActionListener(this);
    findRoomButton.addActionListener(this);
    exitButton.addActionListener(this);
 }

 public void actionPerformed( ActionEvent ae)    
 {
    String item = ae.getActionCommand(); 

    if (item.equals("List Free Rooms"))
    {
    }
    else if (item.equals("New Booking"))
    {
        AddBooking bookingGUI = new AddBooking(this);
    }
    else if (item.equals("Cancel Booking"))
    {
    }
    else if (item.equals("List All Bookings"))
    {
        output.setText(hostel.getAllBookings());
    }
    else if (item.equals("List All Room Details"))
    {
    }
    else if (item.equals("Find Room"))
    {
        String name = JOptionPane.showInputDialog(this, 
                                  "Enter Guests Name",
                                  "Find Room",
                                  JOptionPane.QUESTION_MESSAGE);   
        output.setText( hostel.searchName(name));
    }
    else if (item.equals("Exit System"))
    {
        hostel.saveListBookings();
        System.exit(0);
    }
 }


 public void addBooking(String roomID, String roomType, String guest)
 {
    output.setText(hostel.addBooking(roomID,roomType,guest));
 }
}

方法的完整代码

import java.util.*;
public class ListBookings
{
 private String hostelName;
 private ArrayList<Booking> bookings;
 private String roomID;
 private String roomType;
 private boolean ensuite;
 private String guest;
 private String nights;
 private String booked;
 /**
  * constructs objects for GUI
  */

 public ListBookings(String hostelName)
 {
    this.hostelName = hostelName;
    bookings = new ArrayList<Booking>();
 }

 public String getHostelName()
 {
    return hostelName;
 }

 public String addBooking(String roomID, String roomType, String guest)
 {
    if (roomID.equals(""))
        return "Error Please Entre Room ID";

    else if (roomType.equals(""))
        return "Error Please Entre Room Type";

    else if (guest.equals(""))
        return "Error Please Entre Guest Name";

    bookings.add(new Booking(roomID,roomType,guest));
    return "Room " + roomID + " " + roomType + " Has Been Booked For " + guest;
 }

 public String getAllBookings()
 {
    if (bookings.size() > 0)
    {
        String allBookings = "";
        for (Booking s : bookings)
        {
            allBookings = allBookings + s.getRoomID() + " " + s.getRoomType() + " " + s.getGuest() + "\n";
        }
        return allBookings;
    }
    else 
    {
        return "Bookings are Empty";
    }
 }

 public String searchName(String guest)
 {
    for (Booking s : bookings)
    {
        if (s.getGuest().equals(guest))
        return guest + " is in room " + roomID + "\n"; 
    }
    return guest + " is not booking in at the hostel";
 }

 public String deleteBooking(String roomID)
 {
    int index = 0;
    for ( Booking s : bookings )
    {
        if ( s.getRoomID().equals(roomID))
        {
            return "Room ID: " + roomID + " Room Type: " + roomType + " Guest: " + guest;
            //students.remove(index);
            //return name + " removed from  module " + moduleName + "\n";
        }
        index++;
    }
    return  "  Cannot find " + roomID + "\n";
 }
}

HostelFile

import java.util.*;
import java.io.*;
public class HostelFile extends ListBookings
{
 public HostelFile(String hostelName)
 {
    super(hostelName);
    readListBookings(hostelName);
 }

 private void readListBookings(String fileName)
 {
    String roomID;
    String roomType;
    String guest;
    try
    {
        Scanner fileScanner = new Scanner( new File ( fileName + ".txt"));
        while (fileScanner.hasNext())
        {
            roomID = fileScanner.next();
            roomType = fileScanner.next();
            guest = fileScanner.next();
            addBooking(roomID,roomType,guest);
        }
        fileScanner.close();
    }
    catch (IOException e)
    {
        System.out.println("File not found");
    }
 }


 public void saveListBookings()
 {
    String fileName = getHostelName() +".txt" ;  
    try { 
      PrintWriter print = new PrintWriter( 
                  new BufferedWriter( 
                             new FileWriter( fileName ) ) ); 

      print.println(getAllBookings());
      print.close();
    } 
    catch ( IOException iox ) {
       System.out.println("Problem writing " + fileName ); 
    }
 }             
}

1 个答案:

答案 0 :(得分:0)

var roomID可用于此目的没有意义。在预订中必须有一些属性来保存房间。类似于“s.getRoomID()”。

编辑:好的。看到所有类,很明显Booking有一个getRoomID()方法。

将您的功能更改为:

public String searchName(String guest)
{
    for (Booking s : bookings)
    {
        if (s.getGuest().equals(guest))
        return guest + " is in room " + s.getRoomId() + "\n"; 
    }
    return guest + " is not booking in at the hostel";
}