Простые числа java
Не могу понять как исправить код так, что бы он выводил k количества чисел, а не все простые числа до числа k.
Пример: При вводе 5 он должен вывести 5 простых чисел(2,3,5,7,11) а не числа до 5 (2,3,5);
Код:
//Библиотеки
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
class Okno extends JFrame { // Наследуем JFrame
// Подготавливаем переменные
private final JPanel panel;
private final JButton button;
private final JTextArea area;
private final JTextField textArea;
public Okno() { // Задаем настройки окна
setSize(400, 1000); // Размер
setResizable(false); // Изменяемость
setTitle("Простые числа"); // Имя
button = new JButton(); // Реализация кнопки
button.setText("Посчитать"); // Текст на кнопке
button.addActionListener(this::buttonPressed); // Слушатель
button.setBounds(10, 500, 230, 60); // Положение и размеры
area = new JTextArea(5, 10); // Арена для текста
area.setText("Тут будут циферки");
area.setBounds(250, 10, 120, 940);
//Это для красивого переноса
area.setLineWrap(true);
area.setWrapStyleWord(true);
area.setEditable(false); // Не изменяема
textArea = new JTextField(10); // Поле куда вводдим цифры для их обработки
textArea.setText("");
textArea.setBounds(10, 400, 230, 60);
panel = new JPanel(); // Реализуем panel
panel.setLayout(null); // Задаем слой
//Добавление элементов на panel
panel.add(button);
panel.add(textArea);
panel.add(area);
JScrollPane scrollPane = new JScrollPane(area); // Привязка ползунка
scrollPane.setViewportView(area); // Устанавливаем привязку к JTextArea
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); // Настройка ползунка
scrollPane.setBounds(250, 10, 120, 940); // Где должен быть
panel.add(scrollPane, BorderLayout.CENTER); // добавляем ее на panel
setContentPane(panel); // Установка panel в Okno
setDefaultCloseOperation(EXIT_ON_CLOSE); // Выход при закрытии
setVisible(true); // Видимость
}
//Тут просто идет считывание из textArea, вывод в area только простых чисел
private void buttonPressed(ActionEvent e) {
StringBuilder sb = new StringBuilder();
try {
int k = Integer.parseInt(textArea.getText());
for (int i = 2; k > i; i++) {
int count = 0;
for (int j = 2; j <= k && count < 2; ++j) {
if (i % j == 0) count++;
}
if (count < 2) sb.append(i).append("\n");
}
area.setText(String.valueOf(sb));
} catch (NumberFormatException ex) { // Если некорректный ввод то выдача ошибки
JOptionPane.showMessageDialog(Okno.this,
"Некорректный ввод данных", "Ошибка"
, JOptionPane.INFORMATION_MESSAGE);
}
}
}
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
Примерно так:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
class Okno extends JFrame { // Наследуем JFrame
// Подготавливаем переменные
private final JPanel panel;
private final JButton button;
private final JTextArea area;
private final JTextField textArea;
public Okno() { // Задаем настройки окна
setSize(400, 1000); // Размер
setResizable(false); // Изменяемость
setTitle("Простые числа"); // Имя
button = new JButton(); // Реализация кнопки
button.setText("Посчитать"); // Текст на кнопке
button.addActionListener(this::buttonPressed); // Слушатель
button.setBounds(10, 500, 230, 60); // Положение и размеры
area = new JTextArea(5, 10); // Арена для текста
area.setText("Тут будут циферки");
area.setBounds(250, 10, 120, 940);
//Это для красивого переноса
area.setLineWrap(true);
area.setWrapStyleWord(true);
area.setEditable(false); // Не изменяема
textArea = new JTextField(10); // Поле куда вводдим цифры для их обработки
textArea.setText("");
textArea.setBounds(10, 400, 230, 60);
panel = new JPanel(); // Реализуем panel
panel.setLayout(null); // Задаем слой
//Добавление элементов на panel
panel.add(button);
panel.add(textArea);
panel.add(area);
JScrollPane scrollPane = new JScrollPane(area); // Привязка ползунка
scrollPane.setViewportView(area); // Устанавливаем привязку к JTextArea
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); // Настройка ползунка
scrollPane.setBounds(250, 10, 120, 940); // Где должен быть
panel.add(scrollPane, BorderLayout.CENTER); // добавляем ее на panel
setContentPane(panel); // Установка panel в Okno
setDefaultCloseOperation(EXIT_ON_CLOSE); // Выход при закрытии
setVisible(true); // Видимость
}
//Тут просто идет считывание из textArea, вывод в area только простых чисел
private void buttonPressed(ActionEvent e) {
//StringBuilder sb = new StringBuilder();
try {
int k = Integer.parseInt(textArea.getText());
int counter = 0;
for (int i = 2; k > i; i++) {
int count = 0;
for (int j = 2; j <= k && count < 2; ++j) {
if (i % j == 0) count++;
}
if (count < 2) counter++;//sb.append(i).append("\n");
}
//area.setText(String.valueOf(sb));
area.setText(String.valueOf(counter));
} catch (NumberFormatException ex) { // Если некорректный ввод то выдача ошибки
JOptionPane.showMessageDialog(Okno.this,
"Некорректный ввод данных", "Ошибка",
JOptionPane.INFORMATION_MESSAGE);
}
}
}