How would I make CampusClassAnalysis.java an immutable class and make the main.j
ID: 3717330 • Letter: H
Question
How would I make CampusClassAnalysis.java an immutable class and make the main.java correspond.
CampusClassAnalysis.java
public class CampusCrimeAnalysis {
private int year;
private String state;
private int campusType;
private int maleStudentCount;
private int femaleStudentCount;
private int murderCount;
private int negligentHomicidesCount;
private int rapeCount;
private int aggravatedAssaultsCount;
/**
*
* @return the year
*
*/
public int getYear() {
return year;
}
/**
*
* @param year
* the year to set
*
*/
public void setYear(int year) {
this.year = year;
}
/**
*
* @return the state
*
*/
public String getState() {
return state;
}
/**
*
* @param state
* the state to set
*
*/
public void setState(String state) {
this.state = state;
}
/**
*
* @return the campusType
*
*/
public int getCampusType() {
return campusType;
}
/**
*
* @param campusType
* the campusType to set
*
*/
public void setCampusType(int campusType) {
this.campusType = campusType;
}
/**
*
* @return the maleStudentCount
*
*/
public int getMaleStudentCount() {
return maleStudentCount;
}
/**
*
* @param maleStudentCount
* the maleStudentCount to set
*
*/
public void setMaleStudentCount(int maleStudentCount) {
this.maleStudentCount = maleStudentCount;
}
/**
*
* @return the femaleStudentCount
*
*/
public int getFemaleStudentCount() {
return femaleStudentCount;
}
/**
*
* @param femaleStudentCount
* the femaleStudentCount to set
*
*/
public void setFemaleStudentCount(int femaleStudentCount) {
this.femaleStudentCount = femaleStudentCount;
}
/**
*
* @return the murderCount
*
*/
public int getMurderCount() {
return murderCount;
}
/**
*
* @param murderCount
* the murderCount to set
*
*/
public void setMurderCount(int murderCount) {
this.murderCount = murderCount;
}
/**
*
* @return the negligentHomicidesCount
*
*/
public int getNegligentHomicidesCount() {
return negligentHomicidesCount;
}
/**
*
* @param negligentHomicidesCount
* the negligentHomicidesCount to set
*
*/
public void setNegligentHomicidesCount(int negligentHomicidesCount) {
this.negligentHomicidesCount = negligentHomicidesCount;
}
/**
*
* @return the rapeCount
*
*/
public int getRapeCount() {
return rapeCount;
}
/**
*
* @param rapeCount
* the rapeCount to set
*
*/
public void setRapeCount(int rapeCount) {
this.rapeCount = rapeCount;
}
/**
*
* @return the aggravatedAssaultsCount
*
*/
public int getAggravatedAssaultsCount() {
return aggravatedAssaultsCount;
}
/**
*
* @param aggravatedAssaultsCount
* the aggravatedAssaultsCount to set
*
*/
public void setAggravatedAssaultsCount(int aggravatedAssaultsCount) {
this.aggravatedAssaultsCount = aggravatedAssaultsCount;
}
}
Main.java
public class Main {
private static String inputFileName = "oncampuscrime.txt";
private static String crimeTypeList = "Murder,NegHom,Rape,AgAslt,All";
private static String yearList = "2014,2015,2016,All";
private static String campusTypeList = "0-All,1-Pub4yr,2-PriNoProf,3-PriProf4yr,4-Pub2yr,"
+ "5-PriNoProf2yr,6-PriProf2yr,7-Pub<2yr,8-PriNoProf<2yr,9-PriProf<2yr";
private static String stateAbbr = "AL,AK,AZ,AR,CA,CO,CT,DE,FL,GA,HI,ID,IL,IN,IA,KS,KY,LA,ME,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,OH,OK,OR,PA,RI,SC,SD,TN,TX,UT,VT,VA,WA,WV,WI,WY";
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(new File(inputFileName));
ArrayList<CampusCrimeAnalysis> campusCrimeAnalysisList = new ArrayList<>();
// reading data from file and creating a list of object storing each
// record in the file
while (scanner.hasNext()) {
String[] inputLineList = scanner.nextLine().split(" ");
if (inputLineList.length != 9) {
continue;
}
CampusCrimeAnalysis campusCrimeAnalysis = new CampusCrimeAnalysis();
campusCrimeAnalysis.setYear(Integer.parseInt(inputLineList[0]));
campusCrimeAnalysis.setState(inputLineList[1]);
campusCrimeAnalysis.setCampusType(Integer.parseInt(inputLineList[2]));
campusCrimeAnalysis.setMaleStudentCount(Integer.parseInt(inputLineList[3]));
campusCrimeAnalysis.setFemaleStudentCount(Integer.parseInt(inputLineList[4]));
campusCrimeAnalysis.setMurderCount(Integer.parseInt(inputLineList[5]));
campusCrimeAnalysis.setNegligentHomicidesCount(Integer.parseInt(inputLineList[6]));
campusCrimeAnalysis.setRapeCount(Integer.parseInt(inputLineList[7]));
campusCrimeAnalysis.setAggravatedAssaultsCount(Integer.parseInt(inputLineList[8]));
campusCrimeAnalysisList.add(campusCrimeAnalysis);
}
scanner.close();
String[] inputList = getInputList();
int totalStudentCount = -1;// indicate total needed
if (inputList[0].trim().toLowerCase().equals("percent")) {
totalStudentCount = 0; // to indicate percent needed
}
int year = inputList[2].trim().toLowerCase().equals("all") ? 0 : Integer.parseInt(inputList[2].trim());// year=0
// represents
// all
int campusType = Integer.parseInt(inputList[3]);// 0-represents all
String state = inputList[4].trim().toLowerCase().equals("all") ? "" : inputList[4].trim();// ""
// represents
// all
// states
int totalCrime = 0;
String crimeType = inputList[1].trim().toLowerCase();
int maleStudentCount = 0;
int femaleStudentCount = 0;
// iterate over the file contents and calculate counts based on user
// inputs
for (int i = 0; i < campusCrimeAnalysisList.size(); i++) {
CampusCrimeAnalysis object = campusCrimeAnalysisList.get(i);
// condition for all or specific year & all or specific campus &&
// all or specific state ignoring -1 values
if ((year == 0 || year == object.getYear()) && (campusType == 0 || campusType == object.getCampusType())
&& (state.equals("") || state.equalsIgnoreCase(object.getState()))) {
if (totalStudentCount == 0) {
totalStudentCount += object.getMaleStudentCount() + object.getFemaleStudentCount();
}
maleStudentCount += object.getMaleStudentCount();
femaleStudentCount += object.getFemaleStudentCount();
switch (crimeType) {
case "murder": // murder count
totalCrime += (object.getMurderCount() != -1 ? object.getMurderCount() : 0);
break;
case "neghom":// negligent homicides count
totalCrime += (object.getNegligentHomicidesCount() != -1 ? object.getNegligentHomicidesCount() : 0);
break;
case "rape":// rape count
totalCrime += (object.getRapeCount() != -1 ? object.getRapeCount() : 0);
break;
case "agaslt":// aggrevated assualts count
totalCrime += (object.getAggravatedAssaultsCount() != -1 ? object.getAggravatedAssaultsCount() : 0);
break;
default: // all counts
totalCrime += (object.getMurderCount() != -1 ? object.getMurderCount() : 0);
totalCrime += (object.getNegligentHomicidesCount() != -1 ? object.getNegligentHomicidesCount() : 0);
totalCrime += (object.getRapeCount() != -1 ? object.getRapeCount() : 0);
totalCrime += (object.getAggravatedAssaultsCount() != -1 ? object.getAggravatedAssaultsCount() : 0);
break;
}
}
}
// display results
System.out.println("Male students count:" + maleStudentCount);
System.out.println("Female students count:" + femaleStudentCount);
if (totalStudentCount == -1) {// total count required scenario
System.out.println("Total crime = " + totalCrime + (totalCrime == 0 ? "/No data available" : ""));
} else {
System.out.println((totalCrime == 0 ? "Crime count = 0 or no data avalialbe"
: "1 crime per " + Math.round((double) totalStudentCount / totalCrime) + " students"));
}
}
private static String[] getInputList() {
String[] inputList = new String[5];
Scanner scanner = new Scanner(System.in);
System.out.println("Enter Total or Percent:");
inputList[0] = scanner.nextLine();
System.out.println("Enter crime type (" + crimeTypeList + ")");
inputList[1] = scanner.nextLine();
if (crimeTypeList.indexOf(inputList[1]) == -1) {
inputList[1] = "All";
}
System.out.println("Enter year (" + yearList + "):");
inputList[2] = scanner.nextLine();
if (yearList.indexOf(inputList[2]) == -1) {
inputList[2] = "All";
}
System.out.println(campusTypeList + " " + "Enter campus type Nummber:");
inputList[3] = scanner.nextLine();
try {
if (Integer.parseInt(inputList[3]) < 0 || Integer.parseInt(inputList[3]) > 9) {
inputList[3] = "0";
}
} catch (Exception e) {// occurs when non-numeric values entered.
inputList[3] = "0";
}
// printing state abbreviations 10/line
String[] stateAbbrList = stateAbbr.split(",");
for (int i = 0; i < stateAbbrList.length; i++) {
System.out.print(stateAbbrList[i]);
if ((i + 1) % 10 == 0 && i < stateAbbrList.length) {
System.out.println("");
} else {
System.out.print(" ");
}
}
inputList[4] = scanner.nextLine();
if (stateAbbr.indexOf(inputList[4]) == -1) {
inputList[4] = "All";
}
scanner.close();
return inputList;
}
}
Explanation / Answer
Below is your immutable class and Main class
CampusCrimeAnalysis.java
public final class CampusCrimeAnalysis {
private final int year;
private final String state;
private final int campusType;
private final int maleStudentCount;
private final int femaleStudentCount;
private final int murderCount;
private final int negligentHomicidesCount;
private final int rapeCount;
private final int aggravatedAssaultsCount;
public CampusCrimeAnalysis(int year, String state, int campusType, int maleStudentCount, int femaleStudentCount,
int murderCount, int negligentHomicidesCount, int rapeCount, int aggravatedAssaultsCount) {
this.year = year;
this.state = state;
this.campusType = campusType;
this.maleStudentCount = maleStudentCount;
this.femaleStudentCount = femaleStudentCount;
this.murderCount = murderCount;
this.negligentHomicidesCount = negligentHomicidesCount;
this.rapeCount = rapeCount;
this.aggravatedAssaultsCount = aggravatedAssaultsCount;
}
/**
*
*
*
* @return the year
*
*
*
*/
public int getYear() {
return year;
}
/**
*
*
*
* @return the state
*
*
*
*/
public String getState() {
return state;
}
/**
*
*
*
* @return the campusType
*
*
*
*/
public int getCampusType() {
return campusType;
}
/**
*
*
*
* @return the maleStudentCount
*
*
*
*/
public int getMaleStudentCount() {
return maleStudentCount;
}
/**
*
*
*
* @return the femaleStudentCount
*
*
*
*/
public int getFemaleStudentCount() {
return femaleStudentCount;
}
/**
*
*
*
* @return the murderCount
*
*
*
*/
public int getMurderCount() {
return murderCount;
}
/**
*
*
*
* @return the negligentHomicidesCount
*
*
*
*/
public int getNegligentHomicidesCount() {
return negligentHomicidesCount;
}
/**
*
*
*
* @return the rapeCount
*
*
*
*/
public int getRapeCount() {
return rapeCount;
}
/**
*
*
*
* @return the aggravatedAssaultsCount
*
*
*
*/
public int getAggravatedAssaultsCount() {
return aggravatedAssaultsCount;
}
}
Main.java
public class Main {
private static String inputFileName = "oncampuscrime.txt";
private static String crimeTypeList = "Murder,NegHom,Rape,AgAslt,All";
private static String yearList = "2014,2015,2016,All";
private static String campusTypeList = "0-All,1-Pub4yr,2-PriNoProf,3-PriProf4yr,4-Pub2yr,"
+ "5-PriNoProf2yr,6-PriProf2yr,7-Pub<2yr,8-PriNoProf<2yr,9-PriProf<2yr";
private static String stateAbbr = "AL,AK,AZ,AR,CA,CO,CT,DE,FL,GA,HI,ID,IL,IN,IA,KS,KY,LA,ME,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,OH,OK,OR,PA,RI,SC,SD,TN,TX,UT,VT,VA,WA,WV,WI,WY";
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(new File(inputFileName));
ArrayList<CampusCrimeAnalysis> campusCrimeAnalysisList = new ArrayList<>();
// reading data from file and creating a list of object storing each
// record in the file
while (scanner.hasNext()) {
String[] inputLineList = scanner.nextLine().split(" ");
if (inputLineList.length != 9) {
continue;
}
CampusCrimeAnalysis campusCrimeAnalysis = new CampusCrimeAnalysis(Integer.parseInt(inputLineList[0]),
inputLineList[1], Integer.parseInt(inputLineList[2]), Integer.parseInt(inputLineList[3]),
Integer.parseInt(inputLineList[4]), Integer.parseInt(inputLineList[5]),
Integer.parseInt(inputLineList[6]), Integer.parseInt(inputLineList[7]),
Integer.parseInt(inputLineList[8]));
campusCrimeAnalysisList.add(campusCrimeAnalysis);
}
scanner.close();
String[] inputList = getInputList();
int totalStudentCount = -1;// indicate total needed
if (inputList[0].trim().toLowerCase().equals("percent")) {
totalStudentCount = 0; // to indicate percent needed
}
int year = inputList[2].trim().toLowerCase().equals("all") ? 0 : Integer.parseInt(inputList[2].trim());// year=0
// represents
// all
int campusType = Integer.parseInt(inputList[3]);// 0-represents all
String state = inputList[4].trim().toLowerCase().equals("all") ? "" : inputList[4].trim();// ""
// represents
// all
// states
int totalCrime = 0;
String crimeType = inputList[1].trim().toLowerCase();
int maleStudentCount = 0;
int femaleStudentCount = 0;
// iterate over the file contents and calculate counts based on user
// inputs
for (int i = 0; i < campusCrimeAnalysisList.size(); i++) {
CampusCrimeAnalysis object = campusCrimeAnalysisList.get(i);
// condition for all or specific year & all or specific campus &&
// all or specific state ignoring -1 values
if ((year == 0 || year == object.getYear()) && (campusType == 0 || campusType == object.getCampusType())
&& (state.equals("") || state.equalsIgnoreCase(object.getState()))) {
if (totalStudentCount == 0) {
totalStudentCount += object.getMaleStudentCount() + object.getFemaleStudentCount();
}
maleStudentCount += object.getMaleStudentCount();
femaleStudentCount += object.getFemaleStudentCount();
switch (crimeType) {
case "murder": // murder count
totalCrime += (object.getMurderCount() != -1 ? object.getMurderCount() : 0);
break;
case "neghom":// negligent homicides count
totalCrime += (object.getNegligentHomicidesCount() != -1 ? object.getNegligentHomicidesCount() : 0);
break;
case "rape":// rape count
totalCrime += (object.getRapeCount() != -1 ? object.getRapeCount() : 0);
break;
case "agaslt":// aggrevated assualts count
totalCrime += (object.getAggravatedAssaultsCount() != -1 ? object.getAggravatedAssaultsCount() : 0);
break;
default: // all counts
totalCrime += (object.getMurderCount() != -1 ? object.getMurderCount() : 0);
totalCrime += (object.getNegligentHomicidesCount() != -1 ? object.getNegligentHomicidesCount() : 0);
totalCrime += (object.getRapeCount() != -1 ? object.getRapeCount() : 0);
totalCrime += (object.getAggravatedAssaultsCount() != -1 ? object.getAggravatedAssaultsCount() : 0);
break;
}
}
}
// display results
System.out.println("Male students count:" + maleStudentCount);
System.out.println("Female students count:" + femaleStudentCount);
if (totalStudentCount == -1) {// total count required scenario
System.out.println("Total crime = " + totalCrime + (totalCrime == 0 ? "/No data available" : ""));
} else {
System.out.println((totalCrime == 0 ? "Crime count = 0 or no data avalialbe"
: "1 crime per " + Math.round((double) totalStudentCount / totalCrime) + " students"));
}
}
private static String[] getInputList() {
String[] inputList = new String[5];
Scanner scanner = new Scanner(System.in);
System.out.println("Enter Total or Percent:");
inputList[0] = scanner.nextLine();
System.out.println("Enter crime type (" + crimeTypeList + ")");
inputList[1] = scanner.nextLine();
if (crimeTypeList.indexOf(inputList[1]) == -1) {
inputList[1] = "All";
}
System.out.println("Enter year (" + yearList + "):");
inputList[2] = scanner.nextLine();
if (yearList.indexOf(inputList[2]) == -1) {
inputList[2] = "All";
}
System.out.println(campusTypeList + " " + "Enter campus type Nummber:");
inputList[3] = scanner.nextLine();
try {
if (Integer.parseInt(inputList[3]) < 0 || Integer.parseInt(inputList[3]) > 9) {
inputList[3] = "0";
}
} catch (Exception e) {// occurs when non-numeric values entered.
inputList[3] = "0";
}
// printing state abbreviations 10/line
String[] stateAbbrList = stateAbbr.split(",");
for (int i = 0; i < stateAbbrList.length; i++) {
System.out.print(stateAbbrList[i]);
if ((i + 1) % 10 == 0 && i < stateAbbrList.length) {
System.out.println("");
} else {
System.out.print(" ");
}
}
inputList[4] = scanner.nextLine();
if (stateAbbr.indexOf(inputList[4]) == -1) {
inputList[4] = "All";
}
scanner.close();
return inputList;
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.