在我的项目中,我需要阅读两个不同的文件。一个人读取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;
}
}
答案 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());
}
}
}