Как получить определенные c данные из большого импортированного набора данных с помощью классов, разбиения и синтаксического анализа, циклов и индексации - PullRequest
0 голосов
/ 06 августа 2020

Я работаю с большим набором данных и извлекаю определенные его части в основном методе с двумя другими классами (WeatherStation и WeatherReading). Данные представляют собой показания температуры на множестве метеостанций. Я импортирую данные и разделяю их на разные части (идентификатор станции, имя, широта, долгота, год, время, темп и т.д. c) и разбираю части на разные типы данных.

Моя проблема теперь в поиск станции с наибольшим разбросом между высокими и низкими температурами. Затем мне нужно вывести идентификатор станции, имя, широту, долготу, а также максимальную и минимальную температуру. Мой подход заключался в загрузке всех идентификаторов в список массивов с помощью! Sites.contain. Так что у меня был список всех сайтов без повторов. Затем я преобразовал ArrayList в массив (.toArray). Затем начните новый l oop с остальными данными и используйте индекс массива, чтобы найти максимум / минимум и вариацию этой станции. Затем проиндексируйте ++ и начните со следующей станции.

Я не могу заставить его работать и не знаю почему. Я снова попытался импортировать WeatherData; не повезло. Я попытался назначить getTemp () локальной переменной и использовать ее вместо этого, но я застрял.

    int id=0;
    String name="";
    double lat=0;
    double lon=0;
    int year=0;
    int month=0;
    int date=0;
    int hour=0;
    double windSpeed=0;
    double temp=0;
    double temp1;
    double temp2;
    int index=0;
    double highTemp=0;
    double lowTemp=100;
    double variation=0;
    double mostVar=0;
    
    double lat1=0;
    double lon1=0;
    WeatherStation thisStation = new WeatherStation (id, name, lat, lon);
    WeatherReading thisReading = new WeatherReading(year, month, date, hour, windSpeed, temp);
    
    ArrayList<Integer> singleSites= new ArrayList <Integer>();
    
    String[] weatherData = WeatherData.getData();{ // get the weather data
        
        for (int i = 1; i < weatherData.length; i++) {
            String line = weatherData[i];
            String[] elements = line.split(","); // Split the data at ","   
                        
            String siteid = elements[0]; // convert all the site id's at index 0 to integers
            id = Integer.parseInt(siteid);
            //thisStation.setId(id);
            if(!singleSites.contains(id)) {
                singleSites.add(id);
            }
        }   
        
        
        Integer[] siteArray = new Integer[singleSites.size()];
        siteArray =singleSites.toArray(siteArray); //Convert the sites ArrayList to an Array

        
        
        for (int i = 1; i < weatherData.length; i++) {//start  a new loop through the data
            String line = weatherData[i];
            String[] elements = line.split(","); // Split the data at ","   

            String siteid = elements[0]; // convert all the site id's at index 0 to integers
            id = Integer.parseInt(siteid);
            thisStation.setId(id);
            
            thisStation.setName(elements[1]);
            
            //parse the different elements into different data types
            
            String stringLat = elements[2];    
            lat= Double.parseDouble(stringLat);
            lat = thisStation.setLat(lat);
            lat=thisStation.setLat(lat);
                
            String stringLon = elements[3];
            lon= Double.parseDouble(stringLon);
            lat = thisStation.setLon(lon);
            lat=thisStation.setLon(lon);
            
            String stringTemp=elements[9];
            temp=Double.parseDouble(stringTemp);
            temp=thisReading.setTemp(temp);
            
            while(index<siteArray.length) {   
                while(thisStation.getId()==siteArray[index]) { //using the index of siteArray to only search one site
                    
                    if(thisReading.getTemp()> highTemp) {  //Find the highest temp and assign it to highTemp
                        highTemp=thisReading.getTemp();
                        }
                        
                        if(thisReading.getTemp()< lowTemp) {  //Find the lowest temp and assign it to lowTemp
                            lowTemp=thisReading.getTemp();
                        }
                            variation=highTemp-lowTemp; // The variation is highest minus lowest
                            if(variation>mostVar) {   
                                
                                mostVar=variation; //assign the highest variation to mostVar
                            }
                        
                            //Here will go the rest of the code to get station id,name,lat/lon after the temp part is workin.

            }
                index++;   //Put the index up by one on the siteArray and start the process on a new site.
        }
            
        }
    
        
        }       
}

Если я попытаюсь использовать System.out.println (mostVar), я ничего не получу. Я почти уверен, что он не проходит должным образом из-за части siteArray [index] или из-за того, что темп назначается highTemp и lowTemp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...