Although I'm a novice in Java I am to make a pool simulator in java with the ability to handle any arbitrary number of balls (i have created a Ball object, balls will be stored in the Ball array called balls). All the parameters are to be read in from an input file. I wrote some code hoping it would read in the data and create the balls array.

Unfortunately all I get is an exception, I have no clue why. Please tell me what's wrong and how to fix it.

The input file is built as shown, if more balls are required more of the input for ball blocks are to be added...

Here is my code:

*Note that Vector is my self-written 2d vector class, not the usual java class, I won't be needing it in this simulation.

```
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Input {
public static void main(String[] args) throws IOException, FileNotFoundException {
/// initializing general parameters
double tablewidth = 0;
double tableheight = 0;
double pocketnumber = 0;
double pocketradius = 0;
double ballnumber = 0;
/// initializing ball parameters
double ballXpos = 0;
double ballYpos = 0;
double ballVmag = 0;
double ballVangle = 0;
double ballmass = 0;
double ballcolour = 0;
double ballradius = 0;
double ballmju = 0;
// seting up file reader to read in parameters
FileReader inputfile = new FileReader("input.txt");
BufferedReader in = new BufferedReader(inputfile);
String line;
///reading in parameters
try{
while ((line = in.readLine()) != null) {
if (line.startsWith("Width of pool table")){
tablewidth = Double.valueOf(line.substring(20)).doubleValue();
}
if (line.startsWith("Height of pool table")){
tableheight = Double.valueOf(line.substring(21)).doubleValue();
}
if (line.startsWith("Number of pockets")){
pocketnumber = Double.valueOf(line.substring(18)).doubleValue();
}
if (line.startsWith("Radius of pockets")){
pocketradius = Double.valueOf(line.substring(18)).doubleValue();
}
if (line.startsWith("Number of balls")){
ballnumber = Double.valueOf(line.substring(16)).doubleValue();
}
///create array of balls for the specified number of balls
Ball balls[] = new Ball[(int)ballnumber];
double VelX, VelY;
// the for loop will fill the array of balls with parameters.
for(int i=0; i < ballnumber; i++){
if (line.startsWith("Initial x position")){
ballXpos = Double.valueOf(line.substring(19)).doubleValue();
}
if (line.startsWith("Initial y position")){
ballYpos = Double.valueOf(line.substring(19)).doubleValue();
}
Vector ballposition = new Vector (ballXpos, ballYpos);
if (line.startsWith("Initial velocity magnitude")){
ballVmag = Double.valueOf(line.substring(27)).doubleValue();
}
if (line.startsWith("Angle of projection")){
ballVangle = Double.valueOf(line.substring(20)).doubleValue();
}
// calculating the components of initial velocity
VelY = ballVmag*Math.sin(ballVangle*(Math.PI/180.0));
VelX = ballVangle*Math.cos(ballVangle*(Math.PI/180.0));
Vector ballvelocity = new Vector(VelX, VelY);
if (line.startsWith("Mass")){
ballmass = Double.valueOf(line.substring(5)).doubleValue();
}
if (line.startsWith("Radius")){
ballradius = Double.valueOf(line.substring(7)).doubleValue();
}
if (line.startsWith("Colour")){
ballcolour = Double.valueOf(line.substring(7)).doubleValue();
}
if (line.startsWith("Friction coefficient")){
ballmju = Double.valueOf(line.substring(21)).doubleValue();
}
balls[i] =new Ball(ballposition, ballvelocity, ballmass, ballradius, ballcolour, ballmju);
}
}
}
/// exception to deal with invalid input in the parameters file
catch (Exception e){
System.out.println("invalid input");
System.exit(0);
}
in.close();
inputfile.close();
}
}
```

And the input file "input.txt" starts here:

INPUT BELOW:

Width of pool table 600

Height of pool table 400

Number of pockets 6

Radius of pockets 15

Number of balls 2

INPUT FOR BALLS

Initial x position 306

Initial y position 48

Initial velocity magnitude 30

Angle of projection 0

Radius 13

Colour 3

Friction coefficient 0.2

Initial x position 234

Initial y position 220

Initial velocity magnitude 35

Angle of projection 30

Mass 0.5

Radius 13

Colour 5

Friction coefficient 0