Я кодировал алгоритм приоритетного планирования без вытеснения в Java с GUI. Сначала он запрашивает у пользователя общее количество процессов, а затем создаются текстовые поля и метки в соответствии с количеством процессов, введенных пользователем. После нажатия на кнопку подтверждения отображается среднее время ожидания. Хотя это не дает ошибок, но показывает неправильное среднее время ожидания. Есть ли какие-либо ошибки / изменения, необходимые для получения правильного среднего времени ожидания?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class fcfs extends JFrame implements ActionListener {
JButton jb[] = new JButton[3];
JTextField jt1[], jt2[];
JLabel jl[], jl1, jl2, jl3;
JPanel jp, jp1;
Container con;
int k, p;
String str[] = { "SUBMIT", "RESET", "EXIT" };
String str1[] = { "Process", " AT", "ST", "WT", "TAT" };
int x, i, j, a, b, e, f, pos;
public fcfs() {
super("Non-preemptive Priority scheduling algoritham");
con = getContentPane();
k = Integer.parseInt(JOptionPane.showInputDialog("Enter number of process"));
jl1 = new JLabel("Process");
jl2 = new JLabel("Arival Time");
jl3 = new JLabel("Burst Time");
jl = new JLabel[k];
jt1 = new JTextField[k];
jt2 = new JTextField[k];
for (int i = 0; i < k; i++) {
jl[i] = new JLabel("process" + (i + 1));
jt1[i] = new JTextField(10);
jt2[i] = new JTextField(10);
}
for (int i = 0; i < 3; i++) {
jb[i] = new JButton(str[i]);
}
con.setLayout(new GridLayout(k + 2, 3));
con.add(jl1);
con.add(jl2);
con.add(jl3);
int l = 0;
for (int i = 0; i < k; i++) {
con.add(jl[l]);
con.add(jt1[l]);
con.add(jt2[l]);
l++;
}
l = 0;
for (int i = 0; i < 3; i++) {
con.add(jb[l]);
jb[l].addActionListener(this);
l++;
}
}
public void actionPerformed(ActionEvent ae) {
int FT[] = new int[k];
int WT[] = new int[k];
int TAT[] = new int[k];
int FT1[] = new int[k];
float NTAT[] = new float[k];
float s = 0;
float avg;
JPanel main = new JPanel();
main.setLayout(new BorderLayout());
jp = new JPanel();
jp1 = new JPanel();
jp.setLayout(new GridLayout(k + 1, 7));
jp1.setLayout(new FlowLayout());
if (ae.getSource() == jb[2]) {
System.exit(0);
} else if (ae.getSource() == jb[0]) {
for (int i = 0; i < k; i++) {
pos = i;
for (int j = i + 1; j < k; j++) {
if (Integer.parseInt(jt1[j].getText()) < Integer.parseInt(jt1[pos].getText())) {
pos = j;
}
}
a = Integer.parseInt(jt1[i].getText());
b = Integer.parseInt(jt1[pos].getText());
x = a;
a = b;
b = x;
FT[i] = Integer.parseInt(jt2[i].getText());
FT[pos] = Integer.parseInt(jt2[pos].getText());
x = FT[i];
FT[i] = FT[pos];
FT[pos] = x;
}
WT[0] = 0;
for (i = 1; i < k; i++) {
WT[i] = 0;
for (j = 0; j < i; j++) {
WT[i] = WT[i] + FT[j];
}
s = s + WT[i];
}
for (int i = 0; i < 5; i++) {
jp.add(new JLabel(str1[i]));
}
for (int i = 0; i < k; i++) {
jp.add(new JLabel("process" + (i + 1)));
jp.add(new JLabel(" " + Integer.parseInt(jt1[i].getText())));
jp.add(new JLabel("" + Integer.parseInt(jt2[i].getText())));
jp.add(new JLabel("" + WT[i]));
jp.add(new JLabel("" + TAT[i]));
}
avg = s / k;
String str2 = "Average Waiting Time is " + avg;
jp1.add(new JLabel(str2));
main.add(jp, BorderLayout.NORTH);
main.add(jp1, BorderLayout.SOUTH);
JOptionPane.showMessageDialog(null, main, "output", JOptionPane.PLAIN_MESSAGE);
} else if (ae.getSource() == jb[1]) {
setVisible(false);
fcfs window = new fcfs();
window.setSize(400, 300);
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
public static void main(String[] args) {
fcfs window = new fcfs();
window.setSize(400, 300);
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}