0

我正在尝试制作一个Java应用程序,它允许用户为超市制作目录,然后根据用户输入的代码以升序显示用户输入到目录中的所有产品。我已经搜索过它并发现我可以使用一种称为“排序”的方法,但是我尝试实现它但它不适用于我的问题,我不知道将它放在我的代码中的哪个位置。

我写的代码:2类1类:

public class Catalog {

private String description ; 
private String code ;
private double price ;
private String phrase ;

int counter = 0;

private Catalog [] list = new Catalog [100];

public Catalog (String productDescription , String productCode , double    productPrice  , String productPhrase)
{
    description = productDescription;
    code = productCode;
    price = productPrice;
    phrase = productPhrase;
}

public void setDescription (String productDescription)
{
    description = productDescription;
}

public String getDescription ()
{
    return description;
}

public void setCode (String productCode)
{
    code = productCode;
}

public String getCode ()
{
    return code;
}

public void setPrice (double productPrice)
{
    price = productPrice;
 }

public double getPrice ()
{
    return price;
 }

public void setPhrase (String productPhrase)
{
    phrase = productPhrase;
}

public String getPhrase ()
{
    return phrase;
}

第 2 类:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class CatalogTest {
    public static void main(String[] args) throws IOException {
        String name = null;
        String code = null;
        double price = 0.0;
        String phrase = null;
        BufferedReader input = new BufferedReader (new InputStreamReader  (System.in));
        Catalog product = new Catalog(name,code,price,phrase);
        Catalog [] productsArray = new Catalog [100];

        for (int i = 0 ; i < productsArray.length ; i ++)
        {
            System.out.println("Enter product description (or # to stop): ");
            name = input.readLine();
            if (!("#".equals(name)))
            {
                productsArray [i] = product;
                product.setDescription(name);
                System.out.println("Enter product code: ");
                code = input.readLine();
                productsArray [i] = product;
                product.setCode(code);
                System.out.println("Enter product unit price: ");
                price = Double.parseDouble(input.readLine());
                productsArray [i] = product;
                product.setPrice(price);
                System.out.println("Enter product unit phrase: ");
                phrase = input.readLine();
                productsArray [i] = product;
                product.setPhrase(phrase);
                productsArray [i] = new Catalog (name,code,price,phrase);
            }
            else
            {
                System.out.println("Your Catalog:");
                for (int j = 0; j < productsArray.length; j++)
                {
                    if(productsArray[j]!=null)
                    {
                        System.out.printf("%s, %s,$%.2f %s,",
                        productsArray[j].getCode(),
                        productsArray[j].getDescription(),
                        productsArray[j].getPrice(),
                        productsArray[j].getPhrase());
                        System.out.println();
                    }
                }
                break;
            }
        }
    }
}

所以有什么帮助吗?

4

2 回答 2

1

您可以编写自己的 Comparator 然后调用 Arrays.sort 方法:

public static class MyComparator implements Comparator<Catalog> {
    @Override
    public int compare( Catalog first, Catalog second ) {
        return first.getCode().compareTo( second.getCode() );
    }        
}

Arrays.sort( productsArray, new MyComparator() );
于 2013-02-05T21:17:23.827 回答
0

先说几点:

private Catalog [] list = new Catalog [100];

您的Catalog类实际上是目录中的单个产品,而Catalog[]您实例化的数组是目录本身。

您可以采取多种选择。如果可以的话,我建议你使用列表而不是数组。您可以使用Collections#sort并使您的CatalogProduct从现在开始)类实现Comparable接口。在那里,覆盖该compareTo方法并根据代码进行比较。

其他替代方法是使用 aTreeSet并定义Comparator将用作排序基础的 。我认为您对第一个选项会很好。

另一方面,如果您必须坚持使用数组,请使用 a Comparator(如TreeSet)和Arrays#sort方法。

于 2013-02-05T21:17:36.397 回答