Design a Java application that will read a file containing data related to the US. Crime statistics from 1994-2013.
Here are the codes I have so far:
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 count){
this.year = 0;
this.populationGrowth = 0.0;
this.maxMurderYear = 0;
this.minMurderYear = 0;
this.maxRobberyYear = 0;
this.minRobberyYear = 0;
}
/**
* Getter methods for each field
* @return percentage growth and years for murder and robbery
*/
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;}
}
import java.io.File;
import java.util.Scanner;
import java.io.FileNotFoundException;
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 {
File file=new File(“Crime.csv”);
inputReader = new Scanner(new File(“Crime.csv”));
// 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 stats;
}
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;
}
}
}
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(“n******** 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);
}
}
}
}