当我运行测试程序时,它只返回0而不是年份。我不明白为什么。看来数据计算正确。我需要它显示人口增长范围的年份,而不是那些0。具体罪行的最低年数和最高年数。以下是迄今为止的代码(3个文件):
/**
* File: USCrimeClass.java
* Author: Noah Smith
* Date: 11/16/2020
* Purpose: To create a class to parse crime data
* /
public class USCrimeClass {
// Crime data fields for each data to retrieve
private int year;
private double populationGrowth;
private int maxMurderYear;
private int minMurderYear;
private int maxRobberyYear;
private int minRobberyYear;
//Crime data constructor to set variables
public USCrimeClass(int year, int populationGrowth, int maxMurderYear, int minMurderYear, int maxRobberyYear, int minRobberyYear){
this.year = year;
this.populationGrowth = populationGrowth;
this.maxMurderYear = maxMurderYear;
this.minMurderYear = minMurderYear;
this.maxRobberyYear = maxRobberyYear;
this.minRobberyYear = minRobberyYear;
}
// Constructor defaults
public USCrimeClass(int i){
this.year = 0;
this.populationGrowth = 0.0;
this.maxMurderYear = 0;
this.minMurderYear = 0;
this.maxRobberyYear = 0;
this.minRobberyYear = 0;
}
//Getter methods for each field
public int getYear() {return this.year; }
public double getPopulationGrowth() {return this.populationGrowth; }
public int getMaxMurderYear() {return this.maxMurderYear; }
public int getMinMurderYear() {return this.minMurderYear; }
public int getMaxRobberyYear() {return this.maxRobberyYear; }
public int getMinRobberyYear() {return this.minRobberyYear; }
// Setter method for each field
public void setYear(int year) {this.year = year;}
public void setPopulationGrowth(double populationGrowth) {this.populationGrowth = populationGrowth;}
public void setMaxMurderYear(int maxMurders) {this.maxMurderYear = maxMurders;}
public void setMinMurderYear(int minMurders) {this.minMurderYear = minMurders;}
public void setMaxRobberyYear(int maxRobbery) {this.maxRobberyYear = maxRobbery;}
public void setMinRobberyYear(int minRobbery) {this.minRobberyYear = minRobbery;}
}
/**
* File: USCrimeFile.java
* Author: Noah Smith
* Date: 11/16/2020
* Purpose: Access Crime.csv and create methods to calculate stats
*
* /
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class USCrimeFile {
public static USCrimeClass[] read(String filename){
// Array declaration
USCrimeClass[] stats = new USCrimeClass[20];
Scanner inputReader = null;
// Variable declaration
int count = 0;
String line;
// Access Crime.csv and create array
try{
inputReader = new Scanner(new File(filename));
// Read first line
inputReader.nextLine();
while (inputReader.hasNext()) {
line = inputReader.nextLine();
String[] data = line.split(",");
stats[count] = new USCrimeClass(Integer.parseInt(data[0]));
stats[count].setPopulationGrowth(Integer.parseInt(data[1]));
stats[count].setMaxMurderYear(Integer.parseInt(data[4]));
stats[count].setMinMurderYear(Integer.parseInt(data[4]));
stats[count].setMaxRobberyYear(Integer.parseInt(data[8]));
stats[count].setMinRobberyYear(Integer.parseInt(data[8]));
count++;
}
return stats;
}
catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
finally {
inputReader.close();
}
}
// Method calculation for population growth rate
public void populationGrowth(USCrimeClass[] data){
double growthRate;
System.out.println("Population growth rate: ");
for (int i = 0; i < data.length - 1; i++){
growthRate = 100 * (float) (data[i+1].getPopulationGrowth() - data[i].getPopulationGrowth()) / data[i].getPopulationGrowth();
System.out.println("From " + data[i].getYear() + " to " + data[i + 1].getYear() + " the population growth was "+ String.format("%.4f", growthRate) + "%");
}
}
// Method to find year with highest murder rate
public String maxMurderYear(USCrimeClass[] data) {
int iSize = data.length;
double currentMurderRate = 0.00;
double mMurderRate;
int murderHighYear = 0;
String stReturnValue;
// Access array
try {
for (int i = 0; i < iSize; i++) {
// Get murder rate
mMurderRate = data[i].getMaxMurderYear();
if (mMurderRate < currentMurderRate) {
murderHighYear = data[i].getYear();
}
currentMurderRate = mMurderRate;
}
stReturnValue = "The murder rate was highest in " + murderHighYear + ".";
return stReturnValue;
}
catch(Exception e){
System.out.println("Exception" + e.getMessage());
return null;
}
}
// Method to find lowest murder year
public String minMurderYear(USCrimeClass[] data) {
int iSize = data.length;
double currentMurderRate = 0.00;
double mMurderRate;
int murderLowYear = 0;
String stReturnValue;
try {
// Access array
for (int i = 0; i < iSize; i++) {
// Get the murder rate
mMurderRate = data[i].getMinMurderYear();
if (mMurderRate > currentMurderRate) {
murderLowYear = data[i].getYear();
}
currentMurderRate = mMurderRate;
}
stReturnValue = "The murder rate was lowest in " + murderLowYear + ".";
return stReturnValue;
}
catch (Exception e) {
System.out.println("Exception" + e.getMessage());
return null;
}
}
// Get the year with highest robberies
public String maxRobberyYear(USCrimeClass[] data) {
int iSize = data.length;
double currentRobberyRate = 0.00;
double dRobberyRate;
int robberyHighYear = 0;
String stReturnValue;
// Access array
try {
for (int i = 0; i < iSize; i++) {
// Get the robbery rate
dRobberyRate = data[i].getMaxRobberyYear();
if (dRobberyRate < currentRobberyRate) {
robberyHighYear = data[i].getYear();
}
currentRobberyRate = dRobberyRate;
}
stReturnValue = "The robbery rate was highest in " + robberyHighYear + ".";
return stReturnValue;
}
catch (Exception e) {
System.out.println("Exception" + e.getMessage());
return null;
}
}
// Method to find lowest robbery year
public String minRobberyYear(USCrimeClass[] data) {
int iSize = data.length;
double currentRobberyRate = 0.00;
double dRobberyRate;
int robberyLowYear = 0;
String stReturnValue;
// Access array
try {
for (int i = 0; i < iSize; i++) {
// Get robbery rate
dRobberyRate = data[i].getMinRobberyYear();
if (dRobberyRate > currentRobberyRate) {
robberyLowYear = data[i].getYear();
}
currentRobberyRate = dRobberyRate;
}
stReturnValue = "The robbery rate was lowest in " + robberyLowYear + ".";
return stReturnValue;
}
catch (Exception e) {
System.out.println("Exception" + e.getMessage());
return null;
}
}
}
/**
* File: TestUSCrime.java
* Author: Noah Smith
* Date: 11/16/2020
* Purpose:
* /
import java.util.Scanner;
public class TestUSCrime {
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
//Reference USCrimeFile
USCrimeFile oUSCrimeFile = new USCrimeFile();
USCrimeClass[] data = USCrimeFile.read("Crime.csv");
//Declare variables
long startTime = System.currentTimeMillis();
long endTime;
String userSelect;
while (true) {
// Welcome prompt
System.out.println("********Welcome to the US Crime Statistical Application********\n");
System.out.println("\n" + "Enter the number of the question you want answered. Enter 'Q' to quit the program:\n");
System.out.println("1. What were the percentages in population growth for each consecutive year from 1994-2013?");
System.out.println("2. What year was the murder rate the highest?");
System.out.println("3. What year wat the murder rate the lowest?");
System.out.println("4. What year was the robbery rate the highest?");
System.out.println("5. What year was the robbery rate the lowest?");
System.out.println("Q. Quit the program");
System.out.println("\nEnter your selection: ");
userSelect = input.nextLine();
System.out.println();
switch (userSelect){
case "1":
oUSCrimeFile.populationGrowth(data);
break;
case "2":
System.out.println("The murder rate was highest in " + oUSCrimeFile.maxMurderYear(data));
break;
case "3":
System.out.println("The murder rate was lowest in " + oUSCrimeFile.minMurderYear(data));
break;
case "4":
System.out.println("The robbery rate was highest in: " + oUSCrimeFile.maxRobberyYear(data));
break;
case "5":
System.out.println("The robbery rate was highest in: " + oUSCrimeFile.minRobberyYear(data));
break;
case "Q":
System.out.println("\nThank you for trying the US Crime Statistics Program");
endTime = System.currentTimeMillis();
System.out.println("\nElapsed time in seconds was: " + (endTime - startTime) / 1000 + "seconds.");
System.exit(0);
}
}
}
}
1条答案
按热度按时间3hvapo4f1#
今年我得加一个二传手。这就解决了这个问题,但是出现了一些与我后来解决的数据类型有关的其他问题。