简体   繁体   中英

Can't display search results from query in Java

I am still fairly new to programming and am needing some help with finishing a program.

It is a simple enough program, written in Bluej, that takes inputs from the user which is to then be displayed or searched for.

I am struggling with both of these methods (display and search) as I keep getting the message displayed that I implemented to display that there were no records to display.

public class Collection extends Dvd
{
//private ArrayList<Dvd> dvds;
//private int[] array;
private Dvd dvd1;
private Dvd dvd2;
private Dvd dvd3;

/**
 * Constructor for objects of class Collection
 */
public Collection()
{
    //array = new int[2];
    //dvd1 = dvd1;
    //dvd2 = dvd2;
    //dvd3 = dvd3;
    dvd1 = new Dvd();
    dvd2 = new Dvd();
    dvd3 = new Dvd(); 
}
public static void main(String args[])
{    
     //creates an instance of the collection class 
    Collection collection = new Collection();
    collection.menu();
}
public void displayDvds()
{
    float totalPrice = 0;
    totalPrice = dvd1.getDvdPrice() + dvd2.getDvdPrice() + dvd3.getDvdPrice();
    double totalRunTime = 0;
    totalRunTime = dvd1.getRunTime() + dvd2.getRunTime() + dvd3.getRunTime();

    if (dvd1.getTitle() == "" || dvd1.getDirector() == "" || dvd1.getLead() == "" || dvd1.getRunTime() == 0 || dvd1.getDvdPrice() == 0 || dvd2.getTitle() == "" || 
        dvd2.getDirector() == "" || dvd2.getLead() == "" || dvd2.getRunTime() == 0 || dvd2.getDvdPrice() == 0 || dvd3.getTitle() == ""|| dvd3.getDirector() == ""
        ||dvd3.getLead() == "" ||dvd3.getRunTime() == 0 ||dvd3.getDvdPrice() == 0)
        {
           System.out.println("Sorry, there were no search results to display.");
        }
         else  
         {
    System.out.println(" \nDvd Collection:\n DVD1:\n Title: " + dvd1.getTitle() + " \nDirector: "
                        + dvd1.getDirector() + " \nLead Act: " + dvd1.getLead() + " \nRun Time: " + dvd1.getRunTime() + " \nPrice: "
                        + dvd1.getDvdPrice());

    System.out.println(" \nDvd Collection:\n DVD1:\n Title: " + dvd2.getTitle() + " \nDirector: "
                        + dvd2.getDirector() + " \nLead Act: " + dvd2.getLead() + " \nRun Time: " + dvd2.getRunTime() + " \nPrice: "
                        + dvd2.getDvdPrice());

    System.out.println(" \nDvd Collection:\n DVD1:\n Title: " + dvd3.getTitle() + " \nDirector: "
                        + dvd3.getDirector() + " \nLead Act: " + dvd3.getLead() + " \nRun Time: " + dvd3.getRunTime() + " \nPrice: "
                        + dvd3.getDvdPrice());

    System.out.println(" \nCombined cost of combined Dvd's: " + totalPrice);

    System.out.println(" \nCombined Run Time of combined Dvd's: " + totalRunTime);
}
}

public void searchDvd()
 {
    String temp = ""; // Temporary variable to hold title
    // Assign dvd 3's title to temp

    System.out.println ("\nPlease enter Title to search for: ");
    temp= Genio.getString();

    if(temp.equals(dvd1.getTitle()))
    {
        System.out.println("\nDvd is present in collection at location 1 (Dvd 1 in collection): " + dvd1.getTitle());
    }
     if(temp.equals(dvd2.getTitle()))
    {
        System.out.println("\nDvd is present in collection at location 2 (Dvd 2 in collection): " + dvd2.getTitle());
    }
     if(temp.equals(dvd3.getTitle()))
    {
        System.out.println("\nDvd is present in collection at location 3 (Dvd 3 in collection): " + dvd3.getTitle());
    }
    else 
     System.out.println("\nSorry, there were no search results to display.\n ");
}
public void menu()
      {
          //declare the option field
          int option;

               //start do while loop for the menu
               do
               {
                    //display the menu
                    System.out.println("1: Add (up to 3) Dvd's to Collection");
                    System.out.println("2: Display Dvd Collection");
                    System.out.println("3: Search Dvd Collection by collection");
                    System.out.println("4: Quit program");

                    //prompt user to enter a selection
                    System.out.println("Please select an option (1 - 4): ");
                    //use genio to get the user input
                    option=Genio.getInteger();

                    // Option 1 allows user to add up to 3 Dvd's
                    if (option == 1) 
                    { 
                        dvd1.getInputs();
                        dvd2.getInputs();
                        dvd3.getInputs();
                    }
                    // Option 2 allows user to display Dvd collection
                    if (option == 2)
                        displayDvds();
                    //i Option 3 allows the user to search the Dvd collection by title
                    if (option == 3)
                        searchDvd();
               }

               // Option 4 will print a message that tells that the program may be exited
                    while (option != 4);
                    System.out.println("You may now close the program");
}

Entire Dvd Class:

public Dvd( )
{
  dvdTitle = ""; 
  dvdDirector = ""; 
  dvdLead = ""; 
  dvdRunTime = 0; 
  dvdPrice = 0;
}

public void getInputs()
{
    System.out.println("Please enter the Dvd Title: ");
    dvdTitle=Genio.getString();

    System.out.println("Please enter the Dvd Director: ");    
    dvdDirector=Genio.getString();

    System.out.println("Please enter the Dvd Lead Actor/Actress: ");      
    dvdLead=Genio.getString();

    System.out.println("Please enter the Dvd Run Time: ");    
    dvdRunTime=Genio.getInteger();

    System.out.println("Please enter the Dvd Cost: ");      
    dvdRunTime=Genio.getInteger();
}
   public String getTitle(){
     return dvdTitle;
   }
   public String getDirector(){
     return dvdDirector;
   }
   public String getLead(){
     return dvdLead;
   }
   public double getRunTime()
   {
     return dvdRunTime;
   }
   public float getDvdPrice()
   {
     return dvdPrice;
   }      

}

Genio Class:

public class Genio
{


/**
 * Constructor for objects of class genio, but nothing needing constructed!
 */
public Genio()
{
}


/** 
 * getStr()  is a private method which safely returns a string for use
 * by the public methods getString() and getCharacter() in the class.
 * 
 * @return String for further processing withing the class
 */

private static String getStr() 
{
    String inputLine = "";
    BufferedReader reader = 
        new BufferedReader(new InputStreamReader(System.in));
    try 
    {
        inputLine = reader.readLine();
    }

    catch(Exception exc) 
    {
        System.out.println ("There was an error during reading: "
                            + exc.getMessage());
    }
    return inputLine;
}

/** 
 * getInteger() returns an integer value. Exception handling is used to trap
 * invalid data - including floating point numbers, non-numeric characters
 * and no data. In the event of an exception, the user is prompted to enter
 * the correct data in the correct format.
 * 
 * @return validated int value 
 */
public static int getInteger()
{
    int temp=0;
    boolean OK = false;

    BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
    do 
    {
        try
        {
            temp = Integer.parseInt(keyboard.readLine());
            OK = true;
        }

        catch (Exception eRef)
        {
            if (eRef instanceof NumberFormatException) 
            {
                System.out.print("Integer value needed: ");
            }
            else
            {
                System.out.println("Please report this error: "+eRef.toString());
            }
        }

    } while(OK == false);
    return(temp);
 }

/** 
 * getFloat() returns a floating point value. Exception handling is used to trap
 * invalid data - including non-numeric characters and no data.
 * In the event of an exception (normally no data or alpha), the user is prompted to enter
 * data in the correct format
 * 
 * @return validated float value
 */        
public static float getFloat()
{
    float temp=0;
    boolean OK = false;

    BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
    do 
    {
        try
        {
            temp = Float.parseFloat(keyboard.readLine());
            OK = true;
        }


        catch (Exception eRef)
        {
            if (eRef instanceof NumberFormatException) 
            {
                System.out.print("Number needed: ");
            } 
            else
            {
                System.out.println("Please report this error: "+eRef.toString());
            }
        }

    } while(OK == false);

    return(temp);
 }

/** 
 * getDouble() returns a double precision floating point value. 
 * Exception handling is used to trap invalid data - including non-numeric
 * characters and no data.
 * In the event of an exception, the user is prompted to enter
 * data in the correct format
 * 
 * @return validated double precision value
 */        
public static double getDouble()
{
    double temp=0;
    boolean OK = false;
    BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
    do 
    {
        try
        {
            temp = Double.parseDouble(keyboard.readLine());
            OK = true;
        }

        catch (Exception eRef)
        {
            if (eRef instanceof NumberFormatException) 
            {
                System.out.print("Number needed: ");
            }
            else
            {
                System.out.println("Please report this error: "+eRef.toString());
            }
        }

    } while(OK == false);

    return(temp);
 }

/** 
 * getCharacter() returns a character from the keyboard. It does this by 
 * reading a string then taking the first character read. Subsequent characters
 * are discarded without raising an exception.
 * The method checks to ensure a character has been entered, and prompts 
 * if it has not.
 * 
 * @return validated character value
 */

 public static char getCharacter()
 {
     String tempStr="";
     char temp=' ';
     boolean OK = false;
     do 
     {
         try
         {
             tempStr = getStr();
             temp = tempStr.charAt(0);
             OK = true;
         }

         catch (Exception eRef)
         {
             if (eRef instanceof StringIndexOutOfBoundsException)
             {
                 // means nothing was entered so prompt ...
                 System.out.print("Enter a character: ");
             }            
             else 
             {
                 System.out.println("Please report this error: "+eRef.toString());
             }
         }

     } while(OK == false);

     return(temp);
 }

 /** 
  * getString() returns a String entered at the keyboard.
  * @return String value
  */

 public static String getString()
 {
    String temp="";
    try
    {
        temp = getStr();
    }
    catch (Exception eRef)
    {
        System.out.println("Please report this error: "+eRef.toString());
    }
    return(temp);
 }     

} I apologise if my code is written terribly but my methods do work when I invoke them individually.

As mentioned, the problem is that when I select display or search (after adding records), I only get the message "Sorry, there were no search results to display."

The problem is dvdPrice is never getting set for the DVD's it is staying at 0. You put dvdRunTime twice in your getInputs() method.

public void getInputs()
{
    System.out.println("Please enter the Dvd Title: ");
    dvdTitle=Genio.getString();

    System.out.println("Please enter the Dvd Director: ");    
    dvdDirector=Genio.getString();

    System.out.println("Please enter the Dvd Lead Actor/Actress: ");      
    dvdLead=Genio.getString();

    System.out.println("Please enter the Dvd Run Time: ");    
    ***dvdRunTime=Genio.getInteger();*** //should be dvdRunTime = Genio.getDouble();

    System.out.println("Please enter the Dvd Cost: ");      
    ***dvdRunTime=Genio.getInteger();*** //should be dvdPrice = Genio.getFloat();
}

Also if statement should be like this:

if (dvd1.getTitle().equalsIgnoreCase("")) {

When comparing strings use equals or equalsIgnoreCase method not ==. I changed it to just dvd1.getTitle().equalsIgnoreCase because you enter all 3 dvd's at the same time so if the title of the first one hasn't been entered then none of them have.

Here is full working code for both classes although there is still somethings that should be changed:

Collection:

public class Collection {
    // private ArrayList<Dvd> dvds;
    // private int[] array;
    private Dvd dvd1 = null;
    private Dvd dvd2 = null;
    private Dvd dvd3 = null;

    /**
     * Constructor for objects of class Collection
     */
    public Collection() {
        // array = new int[2];
        // dvd1 = dvd1;
        // dvd2 = dvd2;
        // dvd3 = dvd3;
        dvd1 = new Dvd();
        dvd2 = new Dvd();
        dvd3 = new Dvd();
    }

    public static void main(String args[]) {
        // creates an instance of the collection class
        Collection collection = new Collection();
        collection.menu();
    }

    public void displayDvds() {
        float totalPrice = 0;
        totalPrice = dvd1.getDvdPrice() + dvd2.getDvdPrice()
                + dvd3.getDvdPrice();
        double totalRunTime = 0;
        totalRunTime = dvd1.getRunTime() + dvd2.getRunTime()
                + dvd3.getRunTime();

        if (dvd1.getTitle().equalsIgnoreCase("")) {
            System.out
                    .println("Sorry, there were no search results to display.");
        } else {
            System.out.println(" \nDvd Collection:\n DVD1:\n Title: "
                    + dvd1.getTitle() + " \nDirector: " + dvd1.getDirector()
                    + " \nLead Act: " + dvd1.getLead() + " \nRun Time: "
                    + dvd1.getRunTime() + " \nPrice: " + dvd1.getDvdPrice());

            System.out.println(" \nDvd Collection:\n DVD1:\n Title: "
                    + dvd2.getTitle() + " \nDirector: " + dvd2.getDirector()
                    + " \nLead Act: " + dvd2.getLead() + " \nRun Time: "
                    + dvd2.getRunTime() + " \nPrice: " + dvd2.getDvdPrice());

            System.out.println(" \nDvd Collection:\n DVD1:\n Title: "
                    + dvd3.getTitle() + " \nDirector: " + dvd3.getDirector()
                    + " \nLead Act: " + dvd3.getLead() + " \nRun Time: "
                    + dvd3.getRunTime() + " \nPrice: " + dvd3.getDvdPrice());

            System.out.println(" \nCombined cost of combined Dvd's: "
                    + totalPrice);

            System.out.println(" \nCombined Run Time of combined Dvd's: "
                    + totalRunTime);
        }
    }

    public void searchDvd() {
        String temp = ""; // Temporary variable to hold title
        // Assign dvd 3's title to temp

        System.out.println("\nPlease enter Title to search for: ");
        temp = Genio.getString();

        if (temp.equals(dvd1.getTitle())) {
            System.out
                    .println("\nDvd is present in collection at location 1 (Dvd 1 in collection): "
                            + dvd1.getTitle());
        }
        if (temp.equals(dvd2.getTitle())) {
            System.out
                    .println("\nDvd is present in collection at location 2 (Dvd 2 in collection): "
                            + dvd2.getTitle());
        }
        if (temp.equals(dvd3.getTitle())) {
            System.out
                    .println("\nDvd is present in collection at location 3 (Dvd 3 in collection): "
                            + dvd3.getTitle());
        } else
            System.out
                    .println("\nSorry, there were no search results to display.\n ");
    }

    public void menu() {
        // declare the option field
        int option;

        // start do while loop for the menu
        do {
            // display the menu
            System.out.println("1: Add (up to 3) Dvd's to Collection");
            System.out.println("2: Display Dvd Collection");
            System.out.println("3: Search Dvd Collection by collection");
            System.out.println("4: Quit program");

            // prompt user to enter a selection
            System.out.println("Please select an option (1 - 4): ");
            // use genio to get the user input
            option = Genio.getInteger();

            // Option 1 allows user to add up to 3 Dvd's
            if (option == 1) {
                dvd1.getInputs();
                dvd2.getInputs();
                dvd3.getInputs();
            }
            // Option 2 allows user to display Dvd collection
            if (option == 2)
                displayDvds();
            // i Option 3 allows the user to search the Dvd collection by title
            if (option == 3)
                searchDvd();
        }

        // Option 4 will print a message that tells that the program may be
        // exited
        while (option != 4);
        System.out.println("You may now close the program");
    }
}

Dvd:

public class Dvd {
    private String dvdTitle;
    private String dvdDirector;
    private String dvdLead;
    private double dvdRunTime;
    private float dvdPrice;

    public Dvd() {
        dvdTitle = "";
        dvdDirector = "";
        dvdLead = "";
        dvdRunTime = 0;
        dvdPrice = 0;
    }

    public void getInputs() {
        System.out.println("Please enter the Dvd Title: ");
        dvdTitle = Genio.getString();

        System.out.println("Please enter the Dvd Director: ");
        dvdDirector = Genio.getString();

        System.out.println("Please enter the Dvd Lead Actor/Actress: ");
        dvdLead = Genio.getString();

        System.out.println("Please enter the Dvd Run Time: ");
        dvdRunTime = Genio.getDouble();

        System.out.println("Please enter the Dvd Cost: ");
        dvdPrice = Genio.getFloat();
    }

    public String getTitle() {
        return dvdTitle;
    }

    public String getDirector() {
        return dvdDirector;
    }

    public String getLead() {
        return dvdLead;
    }

    public double getRunTime() {
        return dvdRunTime;
    }

    public float getDvdPrice() {
        return dvdPrice;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM