繁体   English   中英

如何打印从 .csv 文件输入的正确值 - JAVA?

[英]How to print the correct values input from a .csv file -- JAVA?

当我运行测试程序时,它只返回零而不是年份。 我不明白为什么。 似乎统计数据计算正确。 我需要它显示人口增长范围的年份而不是那些零。 以及特定犯罪的最低和最高年份。 这是到目前为止的代码(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);
            }
        }
    }

}

我不得不为这一年添加一个二传手。 这解决了这个问题,但是出现了一些与我后来解决的数据类型有关的其他问题。

    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].setYear(Integer.parseInt(data[0]));
                    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++;
                }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM