PedroJavaNew
PedroJavaNew

Reputation: 11

Arrays with mutliple elements in java and other Issue

Having problems linking this program to this class. The program takes in a set of String + double arrays and goes through a series of sorts to yield a result. Our instructions are to sort then by name and sort then by price.

Main problem is that the Strings are displaying as hexadecimal eg(Item@4fjipe) etc.

Second problem is my sorts. I just have no idea how to make them work. Please help if at all possible. I will include both the class and the program. Bear in mind they are 2 different .java working together. I'm a beginner, by the way.

public class Item
{
private String itemName; // hold the name of the item
private double itemPrice; // hold the price of the item

public Item(String s, double p) // Constructor
{
    itemName = s;
    itemPrice = p;
}//end constructor

public void setName(String n)
{//method to set the item name
    itemName = n;
}//end method

public String getName()
{//method to get the item name
    return itemName;
}//end method   

public double setPrice(double p1)
{//method to set the price of the item
    itemPrice = p1;
    return itemPrice;
}//end method

public double getPrice()
{//method to get the price of the item
    return itemPrice;
}//end method

}//end class

AND NOW THE OTHER BEGINS. THIS ONE IS STILL A HOT MESS.

import javax.swing.*;
import java.util.Arrays;
public class CoffeeDriver
{
public static void main (String[] args)
{
    Item[] itemArray = new Item[5]; // Array of type Item declaration

    boolean loopControl = false; //variable for control of our loop

    while (!loopControl)
    {
        itemArray[0] = new Item("Coffee", 1.00);
        itemArray[1] = new Item("Water", 2.00);
        itemArray[2] = new Item("Milk", 1.50);
        itemArray[3] = new Item("Bagel",1.25);
        itemArray[4] = new Item("Donut", 0.75);

        String input = JOptionPane.showInputDialog(null, "Welcome to Wings Coffee Shop.  We have a great list items on our menu. \nWould you like to see these items sorted by name of by price? (n/p):");

        if(input.equals("n"))
        {
            sortName(itemArray);
            JOptionPane.showMessageDialog(null, itemArray);

        }//end if

        else if(input.equals("p"))
        {   
            sortPrice(itemArray);

            JOptionPane.showMessageDialog(null, itemArray);

        }

        else 
        {
            loopControl = true; 
        }

    }//end while

}//end main


public static void sortName(Item[] itemArray)
{
    int n = itemArray.length;
    Item temp = new Item("",0);

    for (int i =0; i < n; i++)
    {
        for(int j =1; j<(n-1); j++)
        {
            temp.setPrice(itemArray[j+1].getPrice());
            temp.setName(itemArray[j+1].getName());

            if(itemArray[j+1] == itemArray[j])
            {

                temp.setPrice(itemArray[j+1].getPrice());
                temp.setName(itemArray[j+1].getName());
                itemArray[j+1].setPrice(itemArray[j].getPrice());
                itemArray[j+1].setName(itemArray[j].getName());
                itemArray[j].setPrice(temp.getPrice());
                itemArray[j].setName(temp.getName());
                temp = itemArray[j+1];
                itemArray[j+1] = itemArray[j];
                itemArray[j] = temp;

                JOptionPane.showMessageDialog(null, itemArray);

            }//end if

        }//end inner for

    }//end outer for

}//end sortName


public static void sortPrice(Item[] itemArray)
{
    int n = itemArray.length;
    Item temp = new Item("",0);

    for (int i =0; i < n; i++)
    {
        for(int j =1; j<(n-1); j++)
        {
            temp.setPrice(itemArray[j+1].getPrice());
            temp.setName(itemArray[j+1].getName());

            if(itemArray[j+1] == itemArray[j])
            {

                temp.setPrice(itemArray[j+1].getPrice());
                temp.setName(itemArray[j+1].getName());
                itemArray[j+1].setPrice(itemArray[j].getPrice());
                itemArray[j+1].setName(itemArray[j].getName());
                itemArray[j].setPrice(temp.getPrice());
                itemArray[j].setName(temp.getName());
                temp = itemArray[j+1];
                itemArray[j+1] = itemArray[j];
                itemArray[j] = temp;

                JOptionPane.showMessageDialog(null, itemArray);

            }//end if

        }//end inner for

    }//end outer for

}//end sortPrice

}//end class

Upvotes: 0

Views: 107

Answers (2)

Reimeus
Reimeus

Reputation: 159844

You need to override the toString method in your Item class. You could use:

@Override
public String toString() {
    return "Item [itemName=" + itemName + ", itemPrice=" + itemPrice + "]";
}

As you need to have 2 separate methods to sort by name and by price, you could use a custom comparator for both cases, using the appropriate field to compare against. Have a look at Arrays.sort() for doing the actual sorting.

Upvotes: 1

Romski
Romski

Reputation: 1942

'Item@4fjipe' is the object reference as provided by the default implementation of Object.toString() - read the API for reference.

A hexadecmial literal in Java start swith 0x, e.g. 0x10.

For your specific problem, you have a data object that you wish to sort in 2 different ways. Read the API documentation for Comparator and Comparable. Then check the Collections API to see which collections might offer you sorting.

Upvotes: 0

Related Questions