Please what is wrong with the below. It\'s asking about list and won\'t compile
ID: 3771765 • Letter: P
Question
Please what is wrong with the below. It's asking about list and won't compile
package testscoregui;
import java.util.ArrayList;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.scene.layout.HBox;
import javafx.geometry.Pos;
import javafx.geometry.Insets;
import javafx.scene.layout.BorderPane;
import javafx.scene.control.TextField;
public class TestScoreGUI extends Application {
private final TextField tfEnterScore = new TextField();
private final TextField tfNumberOfScores = new TextField();
private final TextField tfAverageScore = new TextField();
private final TextField tfBestScore = new TextField();
@Override // override the start method in the application class
public void start(Stage primaryStage) {
//Create user interface
// Create gridpane and add textfields
GridPane pane = new GridPane();
pane.setHgap(5);
pane.setVgap(5);
pane.add(new Label("Enter score:"), 0, 0);
pane.add(tfEnterScore, 1, 0);
pane.add(new Label("Number of scores:"), 0, 1);
pane.add(tfNumberOfScores, 1, 1);
pane.add(new Label("Average score:"), 0, 2);
pane.add(tfAverageScore, 1, 2);
pane.add(new Label("Best score:"), 0, 3);
pane.add(tfBestScore, 1, 3);
// set properties for gridpane
pane.setAlignment(Pos.CENTER);
tfEnterScore.setAlignment(Pos.BOTTOM_RIGHT);
tfNumberOfScores.setAlignment(Pos.BOTTOM_RIGHT);
tfAverageScore.setAlignment(Pos.BOTTOM_RIGHT);
tfBestScore.setAlignment(Pos.BOTTOM_RIGHT);
tfNumberOfScores.setEditable(false);
tfAverageScore.setEditable(false);
tfBestScore.setEditable(false);
// Create four buttons
HBox hBox = new HBox(5);
hBox.setSpacing(10);
hBox.setAlignment(Pos.CENTER);
hBox.setPadding(new Insets(5));
Button btEnterScore = new Button("Enter score");
Button btClear = new Button("Clear");
Button btExit = new Button("Exit");
hBox.getChildren().addAll(btEnterScore, btClear, btExit);
// Create borderpane and align hbox and pane in
BorderPane borderPane = new BorderPane();
borderPane.setCenter(pane);
borderPane.setBottom(hBox);
// Create a scene and place borderpane in the stage
Scene scene = new Scene(borderPane, 300, 200);
primaryStage.setTitle("Test Scores");
primaryStage.setScene(scene);
primaryStage.show();
btEnterScore.setOnAction(( ActionEvent e) -> {
// Create array to store scores as elements
double score;
score = Double.parseDouble(tfEnterScore.getText());
ArrayList<Integer> list = new ArrayList<>();
for(int i = 1; i <= score; i++)
list.add(i);
double sum = 0;
for (int i = 0 ; i < list.size(); i++)
sum += list(i);
// Display results
tfNumberOfScores.setText(String.format("", list.size()));
tfAverageScore.setText(String.format("", sum / list.size()));
tfBestScore.setText(String.format("", java.util.Collections.max(list)));
});
btClear.setOnAction(e -> {
//list.clear();
});
btExit.setOnAction(e -> {
System.exit(0);
});
}
public static void main(String[] args) {
Application.launch(args);
}
}
Explanation / Answer
list is an ArrayList so its element cannot be retrieved using list(i) (Java will look for method list()), Use its get(int index) method to reteieve an element from the list.
Use
sum += list.get(i); instead of sum += list(i); in line 81
Full Updated Code
package testscoregui;
import java.util.ArrayList;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.scene.layout.HBox;
import javafx.geometry.Pos;
import javafx.geometry.Insets;
import javafx.scene.layout.BorderPane;
import javafx.scene.control.TextField;
public class TestScoreGUI extends Application {
private final TextField tfEnterScore = new TextField();
private final TextField tfNumberOfScores = new TextField();
private final TextField tfAverageScore = new TextField();
private final TextField tfBestScore = new TextField();
@Override // override the start method in the application class
public void start(Stage primaryStage) {
//Create user interface
// Create gridpane and add textfields
GridPane pane = new GridPane();
pane.setHgap(5);
pane.setVgap(5);
pane.add(new Label("Enter score:"), 0, 0);
pane.add(tfEnterScore, 1, 0);
pane.add(new Label("Number of scores:"), 0, 1);
pane.add(tfNumberOfScores, 1, 1);
pane.add(new Label("Average score:"), 0, 2);
pane.add(tfAverageScore, 1, 2);
pane.add(new Label("Best score:"), 0, 3);
pane.add(tfBestScore, 1, 3);
// set properties for gridpane
pane.setAlignment(Pos.CENTER);
tfEnterScore.setAlignment(Pos.BOTTOM_RIGHT);
tfNumberOfScores.setAlignment(Pos.BOTTOM_RIGHT);
tfAverageScore.setAlignment(Pos.BOTTOM_RIGHT);
tfBestScore.setAlignment(Pos.BOTTOM_RIGHT);
tfNumberOfScores.setEditable(false);
tfAverageScore.setEditable(false);
tfBestScore.setEditable(false);
// Create four buttons
HBox hBox = new HBox(5);
hBox.setSpacing(10);
hBox.setAlignment(Pos.CENTER);
hBox.setPadding(new Insets(5));
Button btEnterScore = new Button("Enter score");
Button btClear = new Button("Clear");
Button btExit = new Button("Exit");
hBox.getChildren().addAll(btEnterScore, btClear, btExit);
// Create borderpane and align hbox and pane in
BorderPane borderPane = new BorderPane();
borderPane.setCenter(pane);
borderPane.setBottom(hBox);
// Create a scene and place borderpane in the stage
Scene scene = new Scene(borderPane, 300, 200);
primaryStage.setTitle("Test Scores");
primaryStage.setScene(scene);
primaryStage.show();
ArrayList<Integer> list = new ArrayList<>();
btEnterScore.setOnAction(( ActionEvent e) -> {
// Create array to store scores as elements
double score;
score = Double.parseDouble(tfEnterScore.getText());
for(int i = 1; i <= score; i++)
list.add(i);
double sum = 0;
for (int i = 0 ; i < list.size(); i++)
sum += list.get(i);
// Display results
tfNumberOfScores.setText(String.format("", list.size()));
tfAverageScore.setText(String.format("", sum / list.size()));
tfBestScore.setText(String.format("", java.util.Collections.max(list)));
});
btClear.setOnAction(e -> {
list.clear();
});
btExit.setOnAction(e -> {
System.exit(0);
});
}
public static void main(String[] args) {
Application.launch(args);
}
}