将文件读入两个ArrayLists

时间:2015-03-03 19:54:04

标签: java arrays loops arraylist

在我的项目中,我需要阅读两个不同的文件。一个人读取5人的信息,另一个人掌握这些人的统计数据。它们看起来像这样:

PEOPLE:
    1,Skippy,Jones
    2,Rod,Stewart
    3,Betty,Velveta
    4,Gina,Ginger
    5,Paul,Funyun

STATS:
    1   120
    1   130
    1   140
    1   150
    1   160
    1   170
    1   180
    1   190
    1   200
    1   210
    1   220
    1   230
    2   240
    2   250
    2   260
    ETC....

我将每个Salesperson存储在ArrayList中,并希望将每个月的每个销售统计信息存储在另一个ArrayList中。然后我想将这些统计信息设置给每个人,然后使用toString()打印所有这些数字。

问题:如何为SalesStats中的每个Salesperson设置每个月SalesPeople ArrayList

销售员司机:

public static void main(String[] args) throws FileNotFoundException {
    double monthSales = 0;
    int currentLine = 0;
    int currentLine2 = 0;
    int personNumber = 0;
    int personNumber2 = 0;
    String firstName = "";
    String lastName = "";
    ArrayList<Salesperson> SalesPeople = new ArrayList<Salesperson>(4);
    ArrayList<Double> SalesStats = new ArrayList<Double>(11);


    // reads in NewPeople.txt
            File NewPeople = new File("./src/NewPeople.txt");
            Scanner fileScanner = new Scanner(NewPeople);

            // while there is a new line in the data, goes to the next one
            while (fileScanner.hasNextLine()) {
                String line = fileScanner.nextLine();
                Scanner lineScanner = new Scanner(line);
                lineScanner.useDelimiter(",");

                // while there is a new attribute to read in on a given line, reads
                // data
                while (lineScanner.hasNext()) {
                    personNumber = lineScanner.nextInt();
                    firstName = lineScanner.next();
                    lastName = lineScanner.next();

                    Salesperson person = new Salesperson(personNumber, firstName, lastName);

                    SalesPeople.add(currentLine, person);
                    currentLine++;
                }

        // reads in SalesFigures.txt
                File SalesFigures = new File("./src/SalesFigures.txt");
                Scanner fileScanner2 = new Scanner(SalesFigures);

                // while there is a new line in the data, goes to the next one
                while (fileScanner2.hasNextLine()) {
                    String line2 = fileScanner2.nextLine();
                    Scanner lineScanner2 = new Scanner(line2);
                    lineScanner2.useDelimiter(" ");

                    // while there is a new attribute to read in on a given line, reads data
                    while (lineScanner2.hasNext()) {

                        personNumber2 = lineScanner2.nextInt();     
                        int k = 0;


                        if(personNumber2 == 1)
                        {
                            k = 0;
                            monthSales = lineScanner2.nextDouble();
                            SalesStats.add(currentLine2, monthSales);
                            SalesPeople.get(k).setSalesStats(SalesStats.get(currentLine2)); // need to assign this to all SalesPeople
                        }
                        else if(personNumber2 == 2)
                        {
                            k = 1;
                            monthSales = lineScanner2.nextDouble();
                            SalesStats.add(currentLine2, monthSales);
                            SalesPeople.get(k).setSalesStats(SalesStats.get(currentLine2));
                        }
                        else if(personNumber2 == 3)
                        {
                            k = 2;
                            monthSales = lineScanner2.nextDouble();
                            SalesStats.add(currentLine2, monthSales);
                            SalesPeople.get(k).setSalesStats(SalesStats.get(currentLine2));
                        }
                        else if(personNumber2 == 4)
                        {
                            k = 3;
                            monthSales = lineScanner2.nextDouble();
                            SalesStats.add(currentLine2, monthSales);
                            SalesPeople.get(k).setSalesStats(SalesStats.get(currentLine2));
                        }
                        else if(personNumber2 == 5)
                        {
                            k = 4;
                            monthSales = lineScanner2.nextDouble();
                            SalesStats.add(currentLine2, monthSales);
                            SalesPeople.get(k).setSalesStats(SalesStats.get(currentLine2));
                        }




                        currentLine2++;
                    }

销售员课程:

public class Salesperson {

    private ArrayList<Double> salesStats = new ArrayList<Double>(12);
    private int personNumber;
    private String firstName;
    private String lastName;

public Salesperson(int personNumber, String firstName, String lastName)

{
    this.personNumber = personNumber;
    this.firstName = firstName;
    this.lastName = lastName;
}


public ArrayList<Double> getSalesStats() {
    return salesStats;
}


public void setSalesStats(ArrayList<Double> salesStats) {
    this.salesStats = salesStats;
}


public int getPersonNumber() {
    return personNumber;
}


public void setPersonNumber(int personNumber) {
    this.personNumber = personNumber;
}




public String getFirstName() {
    return firstName;
}


public void setFirstName(String firstName) {
    this.firstName = firstName;
}


public String getLastName() {
    return lastName;
}


public void setLastName(String lastName) {
    this.lastName = lastName;
}


public String toString()
{
    double sum = 0;
    for(int i = 0; i < salesStats.size(); i++)
        sum += salesStats.get(i);

    double min = salesStats.get(0);
    double max = salesStats.get(0);

    for(double i: salesStats) {
        if(i < min) min = i;
        if(i > max) max = i;
    }

return "Sales statistics for " + firstName + " " + lastName + " :\n" + 
"\nSales for January: " + salesStats.get(0) +
"\nSales for February: " + salesStats.get(1) +
"\nSales for March: " + salesStats.get(2) +
"\nSales for April: " + salesStats.get(3) +
"\nSales for May: " + salesStats.get(4) +
"\nSales for June: " + salesStats.get(5) +
"\nSales for July: " + salesStats.get(6) +
"\nSales for August: " + salesStats.get(7) +
"\nSales for September: " + salesStats.get(8) +
"\nSales for October: " + salesStats.get(9) +
"\nSales for November: " + salesStats.get(10) +
"\nSales for December: " + salesStats.get(11) +
"\n Cumulative sales: " + sum + 
"\nHighest month of sales: " + max + 
"\nLowest month of sales: " + min;

}

}

1 个答案:

答案 0 :(得分:0)

请尝试使用此代码,使用地图解决问题。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;


public class SalesReport {
    public static void main(String[] args) throws FileNotFoundException {

        int currentLine = 0;       
        int personNumber=0;    
        String firstName = "";
        String lastName = "";
        ArrayList<Salesperson> SalesPeople = new ArrayList<Salesperson>(4);

                File NewPeople = new File("newpeople.txt");
                Scanner fileScanner = new Scanner(NewPeople);
                Map salesPeopleReport = new HashMap();
                // while there is a new line in the data, goes to the next one
                while (fileScanner.hasNextLine()) {
                    String line = fileScanner.nextLine();
                    Scanner lineScanner = new Scanner(line);
                    lineScanner.useDelimiter(",");

                    while (lineScanner.hasNext()) {
                        personNumber = lineScanner.nextInt();                       
                        firstName = lineScanner.next();
                        lastName = lineScanner.next();       

                        Salesperson person = new Salesperson(personNumber, firstName, lastName);
                        salesPeopleReport.put(personNumber,person);
                        SalesPeople.add(currentLine, person);
                        currentLine++;
                   }      

                }

                printReport(salesPeopleReport);

    }

    private static void printReport(Map salesPeopleReport) throws FileNotFoundException {
         File SalesFigures = new File("SalesFigure.txt");
         Scanner fileScanner2 = new Scanner(SalesFigures);
         ArrayList<Salesperson> finalReport = new ArrayList<Salesperson>();
         ArrayList<Double> SalesStats = new ArrayList<Double>(11);
         Salesperson person = null;
        while (fileScanner2.hasNextLine()) {
            String line2 = fileScanner2.nextLine();
            Scanner lineScanner2 = new Scanner(line2);
            lineScanner2.useDelimiter(",");

            while (lineScanner2.hasNext()) {
                Iterator it = salesPeopleReport.keySet().iterator();
                int key  = Integer.parseInt(lineScanner2.next());
                double  salesStats = lineScanner2.nextDouble();

                if (person == null ){
                    person =(Salesperson) salesPeopleReport.get(key);

                    finalReport.add(person);
                }

                if (key == person.getPersonNumber()){                   
                    SalesStats.add(salesStats);

                }else {
                    SalesStats = new  ArrayList<Double>(11);
                    SalesStats.add(salesStats);
                    if (key != person.getPersonNumber()){
                        person = null;
                    }
                }

            }
            if(person!=null)
           person.setSalesStats(SalesStats);

        }

        for(Salesperson salesperson : finalReport){
            System.out.println(salesperson.toString());
        }
    }
}