I am creating a Probabilistic outcome simulator where information is inputted from a .csv file. The file contains two teams, their losses, wins, ranks, and previous game outcomes. At the end, their "Confidence" ranks are put into one ArrayList and both of the teams are put into another ArrayList (Depending on who won will that team be put into the ArrayList first). So each corresponding two teams has one confidence score. Here's my code so far:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.stage.FileChooser;
import javafx.geometry.*;
import java.util.*;
import java.io.*;
public class POS extends Application
{
private ArrayList<Double> confidenceList = new ArrayList<>();
private ArrayList<String> cityList = new ArrayList<>();
private BorderPane pane = new BorderPane();
private Button runBtn = new Button("Run");
@Override
public void start(Stage stage)
{
VBox vBox = new VBox(20);
vBox.setPadding(new Insets(15));
Button selectBtn = new Button("Select File");
selectBtn.setStyle("-fx-font: 22 arial; -fx-base: #b6e7c9;");
vBox.getChildren().add(selectBtn);
selectBtn.setOnAction(e->
{
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Open Resource File");
FileChooser.ExtensionFilter extFilter =
new FileChooser.ExtensionFilter("TEXT files (*.csv)", "*.CSV", ".xlsv", ".XLSV");
fileChooser.getExtensionFilters().add(extFilter);
File file = fileChooser.showOpenDialog(stage);
run(file);
});
RadioButton weekBtn = new RadioButton("Current Week");
RadioButton seasonBtn = new RadioButton("Entire Season");
runBtn.setStyle("-fx-font: 22 arial; -fx-base: #b6e7c9;");
weekBtn.setSelected(true);
seasonBtn.setDisable(true);
vBox.getChildren().add(weekBtn);
vBox.getChildren().add(seasonBtn);
vBox.getChildren().add(runBtn);
pane.setLeft(vBox);
Scene scene = new Scene(pane, 500, 200);
stage.setScene(scene);
stage.setTitle("POS");
stage.show();
}
public void run(File file)
{
runBtn.setOnAction(e->
{
try
{
Scanner input = new Scanner(file);
input.nextLine();
sortFile(file, input);
input.close();
}
catch (InputMismatchException ex)
{
System.out.println("Error you seem to have typed the wrong type of file");
}
catch(IOException ex)
{
System.out.println("Error, file could not be found");
}
});
}
public void sortFile(File file, Scanner input)
{
if (!input.hasNext())
{
sortArrays(confidenceList, cityList);
}
else
{
String strList = Arrays.toString(input.nextLine().split("\t"));
String[] arrList = strList.split(",");
int homeRank = Integer.parseInt(arrList[1]);
int roadRank = Integer.parseInt(arrList[6]);
Random r = new Random();
int lowestTeamRank = Math.abs(homeRank - roadRank);
double numForHomeTeam = 0;
double numForRoadTeam = 0;
if (homeRank < roadRank)
{
numForHomeTeam = ((r.nextInt(lowestTeamRank) - r.nextInt(2)) + (getLastGameOutcome(arrList[4])* r.nextInt(3))) - getWinPct(arrList[2], arrList[3]);
numForRoadTeam = ((r.nextInt(roadRank) + r.nextInt(2)) + (getLastGameOutcome(arrList[9])* r.nextInt(3))) - getWinPct(arrList[7], arrList[8]);
}
else if (homeRank > roadRank)
{
numForHomeTeam = ((r.nextInt(homeRank) - r.nextInt(2)) + (getLastGameOutcome(arrList[4])* r.nextInt(3))) - getWinPct(arrList[2], arrList[3]);
numForRoadTeam = r.nextInt(lowestTeamRank) - r.nextInt(2) + getLastGameOutcome(arrList[9])* r.nextInt(3) - getWinPct(arrList[7], arrList[8]);
}
double confidenceRate = Math.round(Math.abs(numForHomeTeam - numForRoadTeam));
confidenceList.add(confidenceRate);
if (numForHomeTeam < numForRoadTeam)
{
cityList.add(arrList[0]);
cityList.add(arrList[5]);
}
else if (numForHomeTeam > numForRoadTeam)
{
cityList.add(arrList[5]);
cityList.add(arrList[0]);
}
else
{
cityList.add(arrList[0]);
cityList.add(arrList[5]);
}
sortFile(file, input);
}
}
public int getLastGameOutcome(String lastGame)
{
if (lastGame.charAt(0) == 'W')
{
return (int)(Math.random() * 3);
}
else
{
return (int)(Math.random() * -3);
}
}
public double getWinPct(String wins, String losses)
{
double newWins = Double.parseDouble(wins);
double newLosses = Double.parseDouble(losses);
return newWins / (newWins + newLosses);
}
public void sortArrays(ArrayList<Double> doubleArray, ArrayList<String> stringArray)
{
}
}
Example of how I want this to precisely be like:
ArrayList with confidence ranks: 2, 50, 20, 30, etc.
ArrayList with teams: Chicago, Detroit, Atlanta, NY, etc.
Chicago and Detroit would correspond to 2, Atlanta and NY would correspond to 50. After sorting, it should look something like this:
50, 30, 20, 2
Atlanta, NY......
How do I implement this?
Citywith a string valuename, and a double valuerankand store instances of this class into aList?