Я работаю с большим набором данных и извлекаю определенные его части в основном методе с двумя другими классами (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.