【问题标题】:How do I add an object to my arraylist from data read from a file?如何从从文件读取的数据中将对象添加到我的数组列表?
【发布时间】:2017-03-26 21:06:16
【问题描述】:

我知道从我的文件中读取的数据已正确解析和读入,但是当我尝试将其添加到我的 arraylistCTARoute 对象时,我得到一个 ArrayIndexOutOfBoundsException 尝试从显然不存在的索引。

另外,reader = new ReadFile(); 中的 CTARoute 行似乎存在问题。

CTARoute 类:

public class CTARoute{

        static ReadFile reader;

        private String StationName;
        private double Latitude;
        private double Longitude;
        private String Location;
        private boolean WheelChair;
        private int GreenLine;
        private int RedLine;

        public CTARoute(){

            StationName = "";
            Latitude = 0;
            Longitude = 0;
            Location = "elevated";
            WheelChair = true;
            GreenLine = 0;
            RedLine = 0;

        }

        public CTARoute(String StationName, double Latitude, double Longitude, String Location, boolean wheelChair, int GreenLine,int RedLine){


            this.StationName = StationName;
            this.Latitude = Latitude;
            this.Longitude = Longitude;
            this.Location = Location;
            this.WheelChair = WheelChair;
            this.GreenLine = GreenLine;
            this.RedLine = RedLine;
        }
        public String getStationName(){
            return StationName;
        }
        public Double getLatitude(){
            return Latitude;
        }
        public Double getLongitude(){
            return Longitude;
        }
        public String getLocation(){
            return Location;
        }
        public Boolean getWheelChair(){
            return WheelChair;
        }
        public int getGreenLine(){
            return GreenLine;
        }
        public int getRedLine(){
            return RedLine;
        }

        public void setStationName(String station){
            StationName = station;
        }
        public void setLatitude(double lat){
            Latitude = lat;
        }
        public void setLongitude(double lon){
            Longitude = lon;
        }
        public void setLocation(String loc){
            Location = loc;
        }
        public void setWheelChair(Boolean whe){
            WheelChair = whe;
        }

    public static void main(String args[]){ 

        Scanner scan = new Scanner(System.in);

         reader = new ReadFile();
}   

ReadFile 类:

public class ReadFile {

    ArrayList<CTARoute> route;


    public ReadFile(){


     String csvFile = "CTAStops(1).csv";
     File file = new File(csvFile);

     try{

         Scanner inputStream = new Scanner(file);
         inputStream.nextLine();

         while(inputStream.hasNextLine()){

             route = new ArrayList<CTARoute>();

             String data = inputStream.nextLine();
             String var[] = data.split(",");


            route.add(new CTARoute(var[0],Double.parseDouble(var[1]),Double.parseDouble(var[2]),var[3],Boolean.parseBoolean(var[4]),Integer.parseInt(var[5]),Integer.parseInt(var[6])));


         }

         inputStream.close();

     System.out.println(route.get(2).getStationName()); //testing to see if CTARoute objects are actually added to route.....

     }catch (FileNotFoundException e){

         e.printStackTrace();
     }  

 }

}   

【问题讨论】:

    标签: java file parsing object arraylist


    【解决方案1】:

    问题在于下面的代码,当您的CTAStops(1).csv 文件中的一行不包含带有分隔符的 7 个元素时,会导致ArrayIndexOutOfBoundsException

     route.add(new CTARoute(var[0],Double.parseDouble(var[1]),Double.parseDouble(var[2]),var[3],Boolean.parseBoolean(var[4]),Integer.parseInt(var[5]),Integer.parseInt(var[6])));
    

    另外,请注意构造函数应该只用于初始化类的实例变量(查看here),在构造函数中编写复杂的逻辑并不是最佳实践(就像你在ReadFile() 中所做的那样错误的)。 你的代码真的很难阅读和维护。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 1970-01-01
      相关资源
      最近更新 更多