1

テキスト ファイルに保存されているすべての顧客を表示したいのですが、1 人の顧客が複数のテキスト ファイルに保存されており、複数回表示されています。これらの顧客の重複を排除する方法は? HashSet でも試してみましたが、うまくいきませんでした。これが私のコードです。

public class ReadFile {

private int countCustomer = 0;  
private File path;
private List<Customer> customers = new ArrayList<Customer>();

public ReadFile(File file_path) {

    path = file_path;

}

public String[] openFile() throws IOException {

    FileReader fr = new FileReader(path);
    BufferedReader br = new BufferedReader(fr); 
    int numberOfLines = readLines();
    String[] textData = new String[numberOfLines];
    for (int i = 0; i < numberOfLines; i++)
    {
        textData[i] = br.readLine();

    }

    br.close(); 
    return textData;
}

public void arrayCustomer(){

    try{
        String[] array = openFile();    
        for (int j=0; j< array.length;j++)   
        {
            String str = array[j];  
            String[] temp;
          String delimiter = " ";   

          temp = str.split(delimiter);

          String category = temp[0];  
          double balance = Double.parseDouble(temp[1]);   
          int moveNumber = Integer.parseInt(temp[2]);    
          int accountNumber = Integer.parseInt(temp[3]); 

          if (!isIn(new Customer(category, balance, moveNumber, accountNumber)))
          {
        customers.add(new Customer(category, balance, moveNumber, accountNumber)); 
        countCustomer++;
          }
        }
    }
    catch(IOException e){
        e.printStackTrace();
    }

}

public boolean isIn(Customer customer){

    for (int i = 0; i < customers.size(); i++){
        if (customers.get(i).getAccountNumber() == customer.getAccountNumber())
        {
            return true;
        }
    }
    return false;
}

public void listCustomers() {
    for (Customer customer : customers) {
        System.out.print("Category: " + customer.getCategory());
        System.out.print(" Balance: " + customer.getBalance());
        System.out.print(" Moves: " + customer.getMoveNumber());
        System.out.println(" Account number: " + customer.getAccountNumber());
    }
}


public int readLines() throws IOException {

    FileReader fr = new FileReader(path);
    BufferedReader br = new BufferedReader(fr);

    int numberOfLines = 0;
    String aLine;

    while((aLine = br.readLine()) != null) 
    {
        numberOfLines++;
    }
        br.close();
        return numberOfLines;
}



// The class with the main method

public class FileList {

public static Scanner scan;
public static ReadFile f;
public static final File folder = new File("C:/My_dir");

public static void main(String[] args) {

    Logger logger = Logger.getLogger("textfiles");
    scan = new Scanner(System.in);
    File[] listOfFiles = folder.listFiles();

    for (int i = 0; i < listOfFiles.length; i++)
    {   
        File fileEntry = listOfFiles[i];

        if (!fileEntry.isDirectory()) 
        {
            try{
                f = new ReadFile(fileEntry);
                f.openFile();
                f.arrayCustomer();
                f.listCustomers();
                }
                catch(IOException e)
                {
                    e.printStackTrace();
                }
        }
        else
            {
            logger.log(Level.INFO, "The directory is empty!");
            }
    }
4

1 に答える 1

2

yourが正しく定義されている場合、 ASetはそのトリックを実行する必要があります。同じフィールド セットで動作するとオブジェクトの両方があり、2 人の顧客がビジネス基準で定義されているように「同一」であるかどうかを正しく識別できることCustomerを確認する必要があります。Customerequals()hashCode()

于 2012-08-30T09:31:35.753 に答える