在JCreator中,我需要创建一个允许我找到矩阵求逆的程序,我之前使用过代码来查找矩阵求逆,但是在尝试获取int GUI格式时遇到了麻烦。
到目前为止,这是我的GUI大纲,
*Matrix
*
*/
import java.awt.*; // Java Library
import javax.swing.*; // Java Library
import java.awt.event.*; // Java Library
public class Matrix extends JFrame{ // class
private JTextField jtfSize; // Text field
private JTextField jtfElements; // Text field
private JTextField jtfResult; // Text field
private JLabel jlblSize; // Label
private JLabel jlblElements; // Label
private JLabel jblblResult; // Lablel
private JPanel entryPanel; // Panel
private JPanel buttonPanel; // Panel
private JButton jbtCalculate; // Button
public static void main (String[] args ){ // main
Matrix Frame = new Matrix(); // Frame
frame.setTitle("Matrix Inverse Calcualator"); // Frame Name
frame.setSize ( 500, 500 ); // Frame Size
frame.setLocation (400, 400); // Frame Location on Screen
frame.setDefaultCloseOperation(EXIT_ON_CLOSE); // Set Close Option
frame.setVisible(true); //
}
public Matrix(){ //
jlblSize = new JLabel ("Matrix Size:", JLabel.CENTER ); // Centre Label
jlblElements = new JLabel ("Matrix Elements: ", JLabel.CENTER ); // Centre Lable
jlblResult = new JLabel ("RESULT: ", JLabel.CENTER ); // Centre Jlabel
jtfSize = new JTextField(12); // Text Field
jtfElements = new JTextField(12); // Text field 12 font
jtfResult = new JTextField(12); // Text Field 12 front
entryPanel = new JPanel(); // Panel
jtfResult.setEditable( false ); // make RESULT Field uneditable
entryPanel.setLayout (new GridLayout (3,2) ); // Set layout manager of Panel
entryPanel.add( jlblSize ); // Add component to Panel
entryPanel.add( jtfSize ); // Add component to Panel
entryPanel.add( jlblElements ); // Add component to Panel
entryPanel.add( jtfElements ); // Add component to Panel
entryPanel.add( jlblResult ); // Add component to Panel
entryPanel.add( jtfResult ); // Add component to Panel
add(entryPanel, BorderLayout.CENTER); // add entryPanel to frame
jbtCalculate = new JButton("Calculate"); // Add button and insert text for button
buttonPanel = new JPanel(); // Creates Panel for Button
buttonPanel.add(jbtCalculate); // insert Calculate button to panel
add( buttonPanel, BorderLayout.SOUTH); // Panel layout
jbtCalculate.addMouseListener(new List_ButtonCAL()); //
}
private class list_ButtonCAL implements MouseListener{ //
public void mouseClicked (MouseEvent event){ //
double x=Double.parseDouble(jtfSize.getText());
double y=String.parseDouble(jtfElements.getText());
jtfResult.setText(String.);
}
}
}
现在这是我正在处理的代码, 我无法弄清楚如何将其置于GUI格式中。
import java.util.Scanner; // Import Scanner library
class matrixinverse { // start of class
public static void main(String argv[]){ // start of main
Scanner input = new Scanner(System.in); // input Scanner library
System.out.println("Enter the dimension of square matrix: "); // Ouput on screen
int n = input.nextInt(); // user inputs figure
double a[][]= new double[n][n]; //
System.out.println("Enter the elements of matrix: "); // Ouput on screen
for(int i=0; i<n; i++) //
for(int j=0; j<n; j++)
a[i][j] = input.nextDouble(); //
double d[][] = invert(a); //
System.out.println("The inverse is: "); // Ooutput on screen
for (int i=0; i<n; ++i){ //
for (int j=0; j<n; ++j) { //
System.out.print(d[i][j]+" "); //
} //
System.out.println(); //
} //
input.close(); //
}
public static double[][] invert(double a[][]){ //
int n = a.length; //
double x[][] = new double[n][n]; //
double b[][] = new double[n][n]; //
int index[] = new int[n]; //
for (int i=0; i<n; ++i) //
b[i][i] = 1; //
gaussian(a, index); //
for (int i=0; i<n-1; ++i) //
for (int j=i+1; j<n; ++j) //
for (int k=0; k<n; ++k) //
b[index[j]][k]
-= a[index[j]][i]*b[index[i]][k]; //
for (int i=0; i<n; ++i){ //
x[n-1][i] = b[index[n-1]][i]/a[index[n-1]][n-1]; //
for (int j=n-2; j>=0; --j){
x[j][i] = b[index[j]][i]; //
for (int k=j+1; k<n; ++k) {
x[j][i] -= a[index[j]][k]*x[k][i]; //
}
x[j][i] /= a[index[j]][j];
}
}
return x;
} //
public static void gaussian(double a[][], int index[]){
int n = index.length; //
double c[] = new double[n]; //
for (int i=0; i<n; ++i)
index[i] = i;
for (int i=0; i<n; ++i){
double c1 = 0;
for (int j=0; j<n; ++j){
double c0 = Math.abs(a[i][j]);
if (c0 > c1) c1 = c0;
}
c[i] = c1;
}
int k = 0;
for (int j=0; j<n-1; ++j){
double pi1 = 0;
for (int i=j; i<n; ++i){
double pi0 = Math.abs(a[index[i]][j]);
pi0 /= c[index[i]];
if (pi0 > pi1){
pi1 = pi0;
k = i;
}
}
int itmp = index[j];
index[j] = index[k];
index[k] = itmp;
for (int i=j+1; i<n; ++i)
{
double pj = a[index[i]][j]/a[index[j]][j];
a[index[i]][j] = pj;
for (int l=j+1; l<n; ++l)
a[index[i]][l] -= pj*a[index[j]][l];
}
}
}
}
任何帮助都将不胜感激。在此先感谢:)
答案 0 :(得分:0)
我建议研究MVC(模型 - 视图 - 控制器)或其他一些GUI设置。由于这是一个相当简单的项目,MVC可能稍微有点过分,但它的基础是有一个单独的类来运行计算,接收和发送信息到GUI(视图)。在您的情况下,当按下jbtCalculate时,另一个类将从GUI读取信息,然后在发送数据之前进行计算。如果您对MVC有任何疑问,this link上的一些答案可能会帮助您开始。