#java
Вопрос:
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class CirclesGUI {
private static JFrame mainFrame;
private static JPanel mainPanel, navPanel, inputPanel, buttonPanel;
private static JLabel radLabel, colLabel;
private static JTextField navField, radField, colField;
private static JButton upButton, downButton, addButton, modifyButton, saveButton, averageButton;
private static int count = 0, nav = 0;
private static Circle circles[] = new Circle[20];
public static void main(String[] args) {
loadCircleData();
init();
}
private static void init() {
mainFrame = new JFrame("Circles");
mainPanel = new JPanel(new GridLayout(3, 1));
navPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
downButton = new JButton("<");
navField = new JTextField(20);
navField.setEditable(false);
navField.setText(circles[nav].toString());
upButton = new JButton(">");
navPanel.add(downButton);
navPanel.add(navField);
navPanel.add(upButton);
inputPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
radLabel = new JLabel("Radius");
radField = new JTextField(5);
colLabel = new JLabel("Color");
colField = new JTextField(10);
inputPanel.add(radLabel);
inputPanel.add(radField);
inputPanel.add(colLabel);
inputPanel.add(colField);
buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
addButton = new JButton("Add");
modifyButton = new JButton("Modify");
saveButton = new JButton("Save");
averageButton = new JButton("Average");
saveButton.setEnabled(false);
buttonPanel.add(addButton);
buttonPanel.add(modifyButton);
buttonPanel.add(saveButton);
buttonPanel.add(averageButton);
mainPanel.add(navPanel);
mainPanel.add(inputPanel);
mainPanel.add(buttonPanel);
mainFrame.add(mainPanel);
mainFrame.setSize(350, 300);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setLocationRelativeTo(null);
mainFrame.setVisible(true);
upButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (nav >= count - 1) {
JOptionPane.showMessageDialog(null, "No more circles to show!");
nav = count;
} else
navField.setText(circles[ nav].toString());
}
});
downButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (nav <= 0) {
JOptionPane.showMessageDialog(null, "No more circles to show!");
nav = 0;
} else
navField.setText(circles[--nav].toString());
}
});
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (count >= 20)
JOptionPane.showConfirmDialog(null, "Array full! Maximum 20 circles reached.");
else {
if (radField.getText().equals("") || colField.getText().equals(""))
JOptionPane.showMessageDialog(null, "Please enter the circle data to add one!");
else {
double radius = Double.parseDouble(radField.getText().trim());
String color = colField.getText().trim();
Circle circle = new Circle(radius, color);
circles[count ] = circle;
nav = count - 1;
navField.setText(circles[nav].toString());
radField.setText("");
colField.setText("");
JOptionPane.showMessageDialog(null, "Circle added successfully! Number of circles = " count ".");
count ;
}
}
}
});
modifyButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
addButton.setEnabled(false);
modifyButton.setEnabled(false);
averageButton.setEnabled(false);
saveButton.setEnabled(true);
radField.setText(circles[nav].getRadius() "");
colField.setText(circles[nav].getColor());
}
});
saveButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (radField.getText().equals("") || colField.getText().equals(""))
JOptionPane.showMessageDialog(null, "Please enter the circle data to add one!");
else {
double rad = Double.parseDouble(radField.getText().trim());
String col = colField.getText().trim();
circles[nav].setRadius(rad);
circles[nav].setColor(col);
radField.setText("");
colField.setText("");
addButton.setEnabled(true);
modifyButton.setEnabled(true);
saveButton.setEnabled(false);
averageButton.setEnabled(true);
JOptionPane.showMessageDialog(null, "Changes to circle at index " (nav 1) " saved successfully.");
navField.setText(circles[nav].toString());
}
}
});
}
private static void loadCircleData() {
circles[count ] = new Circle(5, "White");
circles[count ] = new Circle(7, "Black");
circles[count ] = new Circle(9, "Gray");
circles[count ] = new Circle(11, "Blue");
circles[count ] = new Circle(13, "Red");
}
private static double getAverage() {
double res = 0;
int counter = 0;
while (counter < count) {
res = circles[counter].getRadius();
JOptionPane.showMessageDialog();
}
return res / circles.length;
}
}
Вопрос в следующем: «Создайте программу с кнопками, надписями и текстовыми полями. Эта программа должна содержать данные для кругов. Создайте массив кругов (длина 20 должна быть достаточной). Пользователь может ввести радиус и цвет круга. Там должна быть кнопка «Добавить», чтобы добавить введенный пользователем круг, кнопка «Изменить», чтобы изменить радиус и/или цвет круга, и кнопка «Среднее значение», чтобы найти средний радиус всех кругов. У вас также должен быть набор кнопок для навигации по вашему массиву кругов, отображающих текущий для пользователя в ваших текстовых полях».
Все работает, кроме последней части, где мне нужно получить ответы среднего радиуса, чтобы они появились. Не уверен, что добавить в диалоговое окно сообщения. Пожалуйста, помогите мне. Я действительно не знаю, что делать.
Ответ №1:
Это не кажется слишком сложным. Вам просто нужно будет добавить действие к вашей кнопке «Среднее значение», чтобы отобразить среднее значение следующим образом:
averageButton.addActionListener(e -> {
double average = getAverage();
JOptionPane.showMessageDialog(mainFrame, "Average: " average);
});
Но вам также необходимо исправить свой getAverage()-метод.
В настоящее время у вас нет рабочего условия выхода, потому что вы не увеличиваете количество.
Подведение итогов в порядке, но вы не можете разделить в конце на размер массива, так как он фиксированный и не зависит от текущего содержимого.
Вместо этого вы можете использовать счетчик, который вы увеличиваете во время итерации по массиву, так что вот так:
private static double getAverage() {
double res = 0;
int counter = 0;
while (counter < count) {
res = circles[counter].getRadius();
counter ;
}
return res / counter;
}
Вы могли бы просто подумать о замене массива кругов чем-то более динамичным, например списком, тогда вам больше не нужно проверять этот размер, и после суммирования радиусов вы действительно можете определить среднее значение, сказав
return res / circles.size()