0

将此程序链接到此类时遇到问题。该程序接受一组 String + double 数组并经过一系列排序以产生结果。我们的指示是按名称排序,然后按价格排序。

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

第二个问题是我的类型。我只是不知道如何让它们工作。如果可能,请提供帮助。我将包括课程和程序。请记住,它们是 2 个不同的 .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
4

2 回答 2

1

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

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

由于您需要有 2 种单独的方法来按名称按价格排序,因此您可以为这两种情况使用自定义比较器,使用适当的字段进行比较。查看Arrays.sort()进行实际排序。

于 2012-11-27T02:00:17.357 回答
0

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

Java 中的十六进制文字以 0x 开头,例如 0x10。

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

于 2012-11-27T02:18:08.010 回答