Я новичок в Java и не могу решить мою проблему. Я пытаюсь взять два массива информации о запасах и сравнить их друг с другом (сохраняя только те, которые появляются в обоих массивах). Я немного читал об общих алгоритмах, и, если они совпадают, я хотел иметь возможность создавать классы для назначения показателей пригодности для каждого набора массивов. Мой код на самом деле не работает (я могу заставить его анализировать каждый отдельный компонент массива, но не диапазон, который я хочу). Чтобы прояснить ситуацию, вот пример моих данных:
ID date Ticker Shares
1 2011-06-19 goog 0
1 2011-06-19 ibm 0
1 2011-06-19 gs 0
1 2011-06-19 msft 0
1 2011-06-19 c 5
2 2011-06-19 goog 0
2 2011-06-19 ibm 0
2 2011-06-19 gs 0
2 2011-06-19 msft 1
2 2011-06-19 c 4
3 2011-06-19 goog 0
3 2011-06-19 ibm 0
3 2011-06-19 gs 0
3 2011-06-19 msft 2
3 2011-06-19 c 3
4 2011-06-19 goog 0
4 2011-06-19 ibm 0
4 2011-06-19 gs 0
4 2011-06-19 msft 3
4 2011-06-19 c 2
5 2011-06-19 goog 0
5 2011-06-19 ibm 0
5 2011-06-19 gs 0
5 2011-06-19 msft 4
5 2011-06-19 c 1
Как так, у меня есть массив этого и еще один на предыдущую дату. Я хочу иметь возможность сравнить (сгруппированные по идентификаторам) два друг с другом, и найти целые совпадения. Но позже я хочу иметь возможность брать успешные совпадения и выполнять аналитику по ним с помощью других классов. Я думаю, что первым шагом является выявление совпадения. Вот мой код (он определяет только совпадение тикера / акций, и я не уверен, как заставить его соответствовать целому набору идентификаторов):
public void compare(int firstindex, int lastIndex, Object date1, ArrayList data1id, ArrayList data1ticker, ArrayList data1shares, ArrayList data1price, Object date2, ArrayList data2id, ArrayList data2ticker, ArrayList data2shares, ArrayList data2price) throws Exception {
ArrayList ticker = new ArrayList();
ArrayList shares = new ArrayList();
ArrayList price = new ArrayList();
while (firstindex < lastIndex) {
//System.out.print("date is " + date1);
ticker.add(data1ticker.get(firstindex));
shares.add(data1shares.get(firstindex));
price.add(data1price.get(firstindex));
firstindex++;
}
comparewithsecondarray(ticker, shares, price, date2, data2id, data2ticker, data2shares, data2price);
//System.out.println("***********");
}
public void comparewithsecondarray(ArrayList tickerarray, ArrayList sharesarray, ArrayList pricearray, Object date2, ArrayList data2id, ArrayList data2ticker, ArrayList data2shares, ArrayList data2price) throws Exception {
//get the total number of values in the array
int totalArrayList = tickerarray.size();
int counter= 0;
System.out.println("Array has been checked against second array and we're on " + counter);
System.out.println(tickerarray);
System.out.println(sharesarray);
System.out.println("+++++++");
while (counter < totalArrayList) {
Object ticker = tickerarray.get(counter);
Object shares = sharesarray.get(counter);
Object price = pricearray.get(counter);
loadSecondArray(ticker, shares, price, date2, data2id, data2ticker, data2shares, data2price);
counter++;
}
}
public void loadSecondArray(Object ticker, Object shares, Object price, Object date2, ArrayList data2id, ArrayList data2ticker, ArrayList data2shares, ArrayList data2price) throws Exception {
//System.out.println("ticker " + ticker);
//System.out.println("shares " + shares);
//System.out.println("price " + price);
//find the last number of the arrray
if (!data2id.isEmpty()) {
int counter2 = Integer.parseInt(data2id.get(data2id.size()-1).toString());
//System.out.println("last element in array2 is " + counter2);
}
//location is the id number we're looking for.
int location = 1;
while (location > counter2) {
boolean blnFound = data2id.contains(location);
//System.out.println("Does arrayList contain " + location + "? " + blnFound);
if (blnFound) {
if(firstindex == -1) {
//System.out.println("ArrayList does not contain " + location);
} else {
//System.out.println("ArrayList contains " + location + " at index :" + firstindex);
int firstindex = data2id.indexOf(location);
int lastIndex = data2id.lastIndexOf(location);
//send ranges to study
while (firstindex < lastIndex) {
//System.out.print("date is " + date1);
Object ticker2 = data2ticker.get(firstindex);
Object shares2= data2shares.get(firstindex);
Object price2 = data2price.get(firstindex);
if (ticker.equals(ticker2) && shares.equals(shares2)) {
System.out.println("We have a match!");
System.out.println(ticker);
System.out.println(ticker2);
System.out.println(shares);
System.out.println(shares2);
System.out.println("*****");
}
//add to the counter
firstindex++;
}
location++;
}
} else {
break;
}
}
Заранее извините за качество кода, я довольно новичок и все еще учусь. Я думаю, что первым шагом является определение совпадений, а затем есть способ передать эти совпадения (я полагаю, в качестве массивов) другим классам для анализа.
Любые предложения о том, как достичь моих целей в этом проекте, были бы хорошими (я читаю книгу о генетических алгоритмах, но ее немного сложно понять, поэтому я начинаю просматривать весь код, который я могу найти в интернете, чтобы понимаю как это делается).
Заранее спасибо