在java和其他问题中有多个元素的数组

时间:2012-11-27 01:56:54

标签: java arrays string methods double

将此程序与此课程相关联时出现问题。该程序接受一组String + double数组并经过一系列的排序以产生结果。我们的指示是按名称排序,然后按价格排序。

主要问题是字符串显示为十六进制,例如(Item @ 4fjipe)等。

第二个问题是我的种类。我根本不知道如何使它们工作。请尽可能帮助。我将包括课程和课程。请记住,他们是两个不同的.java一起工作。顺便说一句,我是初学者。

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

现在和其他开始。这一个仍然是一个热门话题。

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

2 个答案:

答案 0 :(得分:1)

您需要覆盖toString课程中的Item方法。你可以使用:

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

由于您需要使用2个单独的方法按名称​​和按价格进行排序,因此您可以对两种情况使用custom comparator,并使用相应的字段进行比较。请查看Arrays.sort()进行实际排序。

答案 1 :(得分:0)

'Item @ 4fjipe'是由Object.toString()的默认实现提供的对象引用 - 阅读API以供参考。

Java中的hexadecmial文字启动swith 0x,例如为0x10。

对于您的特定问题,您有一个数据对象,您希望以两种不同的方式对其进行排序。阅读Comparator和Comparable的API文档。然后检查Collections API以查看哪些集合可能为您提供排序。