I’ve been creating a stock market and I am unable to figure a solution to the error in the title.
at the point graph.draw in the class myStockProject is where I get the error. I have uploaded that class and the graph class. any help or solutions would be appreciated.
import java.util.*;
ArrayList<String> tickers = new ArrayList();
ArrayList<Float> openingPrices = new ArrayList();
ArrayList<Float> closingPrices = new ArrayList();
ArrayList<Float> adjustedClosingPrices = new ArrayList();
ArrayList<Float> lowestPrices = new ArrayList();
ArrayList<Float> highestPrices = new ArrayList();
ArrayList<Float> volume = new ArrayList();
ArrayList<String> dates = new ArrayList();
ArrayList<Integer> days = new ArrayList();
ArrayList<Integer> months = new ArrayList();
ArrayList<Integer> years = new ArrayList();
ArrayList<Integer> range = new ArrayList();
ArrayList<Data> myData;
ArrayList<Widget> queries;
Data singularData;
Screen screenOne;
Screen screenTwo;
Screen screenThree;
Graph myGraph = new Graph();
Widget firstWidget;
ArrayList <Widget> widgetList;
ArrayList <Widget> direction ;
TextWidget focus;
PFont widgetFont;
final int EVENT_TEXT=-1;
final int EVENT_BACKWARD=-2;
final int TEXT_WIDGET = 1;
final int EVENT_NULL=0;
int event;
int qEvents;
color widgetBorder;
int events = 1;
int queriedEvents = 1;
int screen;
void setup(){
size(800,500);
background(255);
myData = new ArrayList();
read_in_data();
arraySort();
println(count());
widgetBorder = color (0,0,0);
widgetFont=loadFont("Verdana-12.vlw");
textFont(widgetFont);
//TextWidget textEdit=new TextWidget(100, 25, 200, 40, "Type a ticker symbol",
//color(255), widgetFont, TEXT_WIDGET, 10);
//focus = null;
widgetList = new ArrayList<Widget>();
queries = new ArrayList<Widget>();
direction = new ArrayList<Widget>();
screenOne = new Screen(color(255), widgetList,null, null, null);
screenTwo = new Screen(color(255), direction, queries, null, null);
screenThree = new Screen (color(255), direction, null, null, null);
screen = 1;
int x = 100;
int y = 100;
String tickerText = "";
String previousTicker = "";
int index = 0;
for(int i = 0 ; i<count(); i++){
boolean quit = false;
while(quit == false){
tickerText=tickers.get(index);
if(!tickerText.equals(previousTicker)){
quit = true;
}
index++;
}
previousTicker=tickerText;
firstWidget = new Widget(x, y, 60, 30 ,tickerText, color(255,0,0), widgetFont, events);
focus = null;
widgetList.add(firstWidget);
y+=100;
if(y>=500){
y=60;
x+=100;
}
events++;
}
Widget openPrice = new Widget (400, 100, 100, 40, "opening price", color(255,0,0), widgetFont, queriedEvents);
queries.add(openPrice);
queriedEvents++;
Widget closePrice = new Widget (400, 150, 100, 40, "closing price", color(255,0,0), widgetFont, queriedEvents);
queries.add(closePrice);
queriedEvents++;
Widget adjClosePrice = new Widget (400, 200, 160, 40, "adjusted closing price", color(255,0,0), widgetFont, queriedEvents);
queries.add(adjClosePrice);
queriedEvents++;
Widget low = new Widget (400, 250, 100, 40, "lowest price", color(255,0,0), widgetFont, queriedEvents);
queries.add(low);
queriedEvents++;
Widget high = new Widget (400, 300, 100, 40, "highest price", color(255,0,0), widgetFont, queriedEvents);
queries.add(high);
queriedEvents++;
Widget volume = new Widget (400, 350, 100, 40, "stock volume", color(255,0,0), widgetFont, queriedEvents);
queries.add(volume);
queriedEvents++;
Widget previous = new Widget (50, 400, 50, 30, "back", color(255,0,0), widgetFont, EVENT_BACKWARD);
focus = null;
direction.add(previous);
}
void draw(){
background(100);
textSize(12);
background(255);
stroke(0);
fill(255);
if(screen == 1){
screenOne.draw();
}
else if (screen == 2){
screenTwo.draw();
}
else if (screen == 3){
screenThree.draw();
}
}
void mousePressed()
{
for(int i = 0;i<widgetList.size(); i++)
{
Widget myWidget = (Widget)widgetList.get(i);
event = myWidget.getEvent(mouseX, mouseY);
if(screen == 1)
{
event = screenOne.getEvent();
switch(event)
{
case EVENT_TEXT:
println("clicked");
focus = (TextWidget)myWidget;
return;
case 1:
screen = 2;
ranges();
focus = null;
return;
case 2:
screen = 2;
ranges();
focus = null;
return;
case 3:
screen = 2;
ranges();
focus = null;
return;
case 4:
screen = 2;
ranges();
focus = null;
return;
case 5:
screen = 2;
ranges();
focus = null;
return;
case 6:
screen = 2;
ranges();
focus = null;
return;
case 7:
screen = 2;
ranges();
focus = null;
return;
case 8:
screen = 2;
ranges();
focus = null;
return;
case 9:
screen = 2;
ranges();
focus = null;
return;
case 10:
screen = 2;
ranges();
focus = null;
return;
case 11:
screen = 2;
ranges();
focus = null;
return;
case 12:
screen = 2;
ranges();
focus = null;
return;
case 13:
screen = 2;
ranges();
focus = null;
return;
case 14:
screen = 2;
ranges();
focus = null;
return;
case 15:
screen = 2;
ranges();
focus = null;
return;
case 16:
screen = 2;
ranges();
focus = null;
return;
case 17:
screen = 2;
ranges();
focus = null;
return;
case 18:
screen = 2;
ranges();
focus = null;
return;
case 19:
screen = 2;
ranges();
focus = null;
return;
case 20:
screen = 2;
ranges();
focus = null;
return;
case 21:
screen = 2;
ranges();
focus = null;
return;
case 22:
screen = 2;
ranges();
focus = null;
return;
case 23:
screen = 2;
ranges();
focus = null;
return;
case 24:
screen = 2;
ranges();
focus = null;
return;
case 25:
screen = 2;
ranges();
focus = null;
return;
case 26:
screen = 2;
ranges();
focus = null;
return;
case 27:
screen = 2;
ranges();
focus = null;
return;
case 28:
screen = 2;
ranges();
focus = null;
return;
case 29:
screen = 2;
ranges();
focus = null;
return;
case 30:
screen = 2;
ranges();
focus = null;
return;
case 31:
screen = 2;
ranges();
focus = null;
return;
case 32:
screen = 2;
ranges();
focus = null;
return;
case 33:
screen = 2;
ranges();
focus = null;
return;
case 34:
screen = 2;
ranges();
focus = null;
return;
case 35:
screen = 2;
ranges();
focus = null;
return;
case 36:
screen = 2;
ranges();
focus = null;
return;
case 37:
screen = 2;
ranges();
focus = null;
return;
case 38:
screen = 2;
ranges();
focus = null;
return;
case 39:
screen = 2;
ranges();
focus = null;
return;
case 40:
screen = 2;
ranges();
focus = null;
return;
case 41:
screen = 2;
ranges();
focus = null;
return;
}
}
else if(screen == 2)
{
qEvents = screenTwo.getEvent();
if(qEvents == EVENT_BACKWARD)
{
screen = 1;
}
switch(qEvents){
case 1:
screen = 3;
return;
case 2:
screen=3;
//Graph.draw();
return;
case 3:
screen=3;
// Graph.draw();
return;
case 4:
screen=3;
// Graph.draw();
return;
case 5:
screen=3;
// Graph.draw();
return;
case 6:
screen=3;
//Graph.draw();
return;
}
}
else if(screen == 3){
qEvents = screenTwo.getEvent();
if(qEvents == EVENT_BACKWARD)
{
screen = 2;
}
}
}
}
void keyPressed(){
if(focus != null)
{
focus.append(key);
}
}
void read_in_data(){
String lines[] = loadStrings("daily_prices1k.csv");
for(int i = 0; i<lines.length; i++) {
singularData = new Data(lines[i]);
myData.add(singularData);
myNewArray(myData.get(i).myArray);
}
}
void myNewArray(String array[]){
tickers.add(array[0]);
openingPrices.add(convertToString(array[1]));
closingPrices.add(convertToString(array[2]));
adjustedClosingPrices.add(convertToString(array[3]));
lowestPrices.add(convertToString(array[4]));
highestPrices.add(convertToString(array[5]));
volume.add(convertToString(array[6]));
dates.add(array[7]);
breakUpDates(array[7]);
}
float convertToString(String points){
float point = float(points);
return point;
}
Integer convertDatesToString(String points){
int point = int (points);
return point;
}
void breakUpDates(String date){
String array[] = split(date, "-");
days.add(convertDatesToString(array[0]));
months.add(convertDatesToString(array[1]));
years.add(convertDatesToString(array[2]));
}
void arraySort(){
for(int i = 0; i<tickers.size(); i++){
String myTickers=tickers.get(i);
for(int index = 0; index<tickers.size(); index++){
if(tickers.get(index).equals(myTickers)&&i!=index){
String removeTicker = tickers.get(index);
tickers.remove(index);
tickers.add(i, removeTicker);
float removeClose = closingPrices.get(index);
closingPrices.remove(index);
closingPrices.add(i, removeClose);
float removeOpen = openingPrices.get(index);
openingPrices.remove(index);
openingPrices.add(i, removeOpen);
float removeAdjusted = adjustedClosingPrices.get(index);
adjustedClosingPrices.remove(index);
adjustedClosingPrices.add(i, removeAdjusted);
float removeLowest = lowestPrices.get(index);
lowestPrices.remove(index);
lowestPrices.add(i, removeLowest);
float removeHighest = highestPrices.get(index);
highestPrices.remove(index);
highestPrices.add(i, removeHighest);
float removeVolume = volume.get(index);
volume.remove(index);
volume.add(i, removeVolume);
int removeDay = days.get(index);
days.remove(index);
days.add(i, removeDay);
int removeMonth = months.get(index);
days.remove(index);
days.add(i, removeMonth);
int removeYear = years.get(index);
days.remove(index);
days.add(i, removeYear);
}
}
}
}
int count(){
int count = 1;
for(int i = 1; i< tickers.size(); i++){
String newTicker = tickers.get(i);
if(!tickers.get(i-1).equals(newTicker)){
count++;
}
}
return count;
}
void ranges(){
range = new ArrayList();
int count = 1 ;
for(int i = 1; i<tickers.size(); i++){
String newTicker = tickers.get(i);
if(!tickers.get(i-1).equals(newTicker)){
count++;
}
if(count == event){
range.add(i);
}
}
}
class Graph{
ArrayList<Integer> groupedDays;
ArrayList<Integer> groupedMonths;
ArrayList<Integer> groupedYears;
ArrayList<Float> graphPosition;
int margin, graphHeight, topOfMargin, leftOfMargin, rightOfMargin;
PFont font;
String fontList[] = PFont.list();
PVector[]positions;
float maximum;
float minimum;
float numberOfSpaces;
Graph(){
}
void draw(){
qEvents = screenTwo.getEvent();
switch(qEvents){
case 1:
dataPicked(openingPrices);
return;
case 2:
dataPicked (closingPrices);
return;
case 3:
dataPicked(adjustedClosingPrices);
return;
case 4:
dataPicked (lowestPrices);
return;
case 5:
dataPicked(highestPrices);
return;
case 6:
dataPicked (volume);
return;
}
findPosition();
drawGraph();
fill(0);
text(tickers.get(range.get(0)),600, 75);
for(int i = 0; i<positions.length; i++)
{
if(mouseX > positions[i].x-5 && mouseX < positions[i].x+5)
{
{
fill(#F00048);
ellipse(positions[i].x, positions[i].y, 10, 10);
textSize(24);
text(groupedYears.get(i), positions[i].x-25, height - margin);
{
noStroke();
fill(255);
{
fill(0);
textSize(12);
text("date:"+groupedDays.get(i),groupedMonths.get(i),groupedYears.get(i));
text("value:"+graphPosition.get(i), positions[i].x-30, positions[i].y+30);
}
}
}
}
else {
fill(200);
ellipse(positions[i].x, positions[i].y, 15, 15);
}
}
}
void dataPicked(ArrayList<Float> dataSet){
groupedDays = new ArrayList();
groupedMonths = new ArrayList();
groupedYears = new ArrayList();
graphPosition = new ArrayList();
if(range.get(0)==1){
range.add(0, 0);
}
int lastPieceOfData = range.get(range.size()-1);
for (int i = range.get(0); i<lastPieceOfData; i++){
groupedDays.add(days.get(i));
groupedMonths.add(months.get(i));
groupedYears.add(years.get(i));
graphPosition.add(dataSet.get(i));
}
int swap = 0;
int swap2 = 0;
float swapData = 0;
float swapData2 = 0;
for(int i = 0; i < groupedYears.size(); i++){
for(int j = 0; j<(groupedYears.size())-1; j++){
if(groupedYears.get(j)>groupedYears.get(j+1)){
swap = groupedYears.get(j);
swap2 = groupedYears.get(j+1);
groupedYears.set(j, swap2);
groupedYears.set(j+1, swap);
swap = groupedMonths.get(j);
swap2 = groupedMonths.get(j+1);
groupedMonths.set(j, swap2);
groupedMonths.set(j+1, swap);
swap = groupedDays.get(j);
swap2 = groupedDays.get(j+1);
groupedDays.set(j, swap2);
groupedDays.set(j+1, swap);
swapData = graphPosition.get(j);
swapData2 = graphPosition.get(j+1);
graphPosition.set(j, swapData2);
graphPosition.set(j+1, swapData);
}
}
for(int j = 0; j<(groupedMonths.size())-1; j++){
if(groupedMonths.get(j)>groupedMonths.get(j+1) && groupedYears.get(j)>groupedYears.get(j+1)){
swap = groupedDays.get(j);
swap2 = groupedDays.get(j+1);
groupedDays.set(j, swap2);
groupedDays.set(j+1, swap);
swap = groupedMonths.get(j);
swap2 = groupedMonths.get(j+1);
groupedMonths.set(j, swap2);
groupedMonths.set(j+1, swap);
swapData = graphPosition.get(j);
swapData2 = graphPosition.get(j+1);
graphPosition.set(j, swapData2);
graphPosition.set(j+1, swapData);
}
}
for(int j = 0; j<(groupedDays.size())-1; j++){
if(groupedMonths.get(j)>groupedMonths.get(j+1) && groupedDays.get(j)>groupedDays.get(j+1)){
swap = groupedDays.get(j);
swap2 = groupedDays.get(j+1);
groupedDays.set(j, swap2);
groupedDays.set(j+1, swap);
swapData = graphPosition.get(j);
swapData2 = graphPosition.get(j+1);
graphPosition.set(j, swapData2);
graphPosition.set(j+1, swapData);
}
}
}
}
void findPosition(){
positions = new PVector[graphPosition.size()];
maximum = Collections.max(graphPosition);
minimum = Collections.min(graphPosition);
margin = 100;
leftOfMargin = 150;
rightOfMargin = 100;
topOfMargin = 250;
graphHeight = (height - margin)-topOfMargin;
numberOfSpaces = (width - leftOfMargin - rightOfMargin)/groupedYears.size()-1;
for(int i = 0; i<graphPosition.size(); i++){
float adjust = map(graphPosition.get(i), minimum, maximum, 0, graphPosition.size());
float ypos = height-margin-adjust;
float xpos = margin +(numberOfSpaces *i);
positions[i] = new PVector(xpos, ypos);
}
}
void drawGraph(){
for(int i = 0; i< positions.length; i++){
stroke(100, 100);
line(positions[i].x, margin, positions[i].x, height-margin);
String year = Integer.toString(groupedYears.get(i));
if(i>0){
stroke(200);
line(positions[i].x, positions[i].y, positions[i-1].x, positions[i-1].y);
}
}
text(maximum, 5, margin);
text(minimum, 5, height - margin);
}
}