?? simpclient.java
字號:
package com.sea0108.simpmethod;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
public class SimpClient {
public static final Font FONT = new Font("黑體", Font.PLAIN, 12);
private BranchDemarkationMethod bdm = null;
private SimpFrame sf = new SimpFrame();
private int demoCount;
public ArrayList<String> demoProcess;
public SimpClient() {
sf.setVisible(true);
sf.panels[5].setVisible(false);
sf.buttons[6].setEnabled(false);
sf.buttons[7].setEnabled(false);
sf.textArea.setEditable(false);
sf.textArea.setFont(FONT);
listen();
}
private void listen() {
sf.buttons[2].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (getBdm()) {
demoCount = -1;
sf.buttons[5].setEnabled(true);
sf.buttons[6].setEnabled(true);
demoProcess = new ArrayList<String>();
demoProcess.add("\n\t分支定界法解混合整數規劃問題的動態演示\n");
demoProcess.addAll(bdm.iterProcess);
demoProcess.add(getResult());
}
}
});
sf.buttons[4].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (demoCount > 0)
sf.textArea.setText("\n\n"
+ (String) demoProcess.get(--demoCount));
previousNextUpdate();
}
});
sf.buttons[5].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
sf.panels[5].setVisible(true);
if (demoCount < demoProcess.size() - 1)
sf.textArea.setText("\n\n"
+ (String) demoProcess.get(++demoCount));
previousNextUpdate();
}
});
sf.buttons[6].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
sf.panels[5].setVisible(true);
sf.buttons[7].setEnabled(true);
sf.textArea.setText("");
for (String s : demoProcess)
sf.textArea.append(s + "\t\n");
}
});
}
private void previousNextUpdate() {
if (demoCount == 0)
sf.buttons[4].setEnabled(false);
else if (demoCount == demoProcess.size() - 1)
sf.buttons[5].setEnabled(false);
else {
sf.buttons[4].setEnabled(true);
sf.buttons[5].setEnabled(true);
}
sf.buttons[7].setEnabled(true);
}
// if the value being returned is true then an Exception occures
private boolean getBdm() {
try {
String[][] mA = sf.getMatrixA();
String[] vB = sf.getVectorB();
String[] fCoefs = sf.getVectorObj();
int[] equationTypes = sf.getInequationsType();
boolean[] isInteger = sf.getIsInteger();
boolean isMaximization = sf.getObjType();
final int row = mA.length;
final int col = mA[0].length;
Fraction[][] matA = new Fraction[row][col];
Fraction[] vecB = new Fraction[row];
Fraction[] funCoefs = new Fraction[col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++)
matA[i][j] = new Fraction(mA[i][j]);
vecB[i] = new Fraction(vB[i]);
}
for (int j = 0; j < col; j++)
funCoefs[j] = new Fraction(fCoefs[j]);
bdm = new BranchDemarkationMethod(matA, vecB, funCoefs,
equationTypes, isInteger, isMaximization);
return true;
} catch (Exception e) {
MDialog dlg = new MDialog(sf, "錯誤提示", "輸入數據不完整或有誤");
dlg.setVisible(true);
e.printStackTrace();
return false;
}
}
public String getResult() {
if (bdm == null || bdm.fval == null)
return "\t(無解)";
else {
StringBuilder sb = new StringBuilder("\t(最優解(");
for (int i = 0; i < bdm.ans.length - 1; i++)
sb.append("x" + (i + 1) + ",");
sb.append("x" + bdm.ans.length + ")=(");
for (int i = 0; i < bdm.ans.length - 1; i++)
sb.append(bdm.ans[i] + ",");
sb.append(bdm.ans[bdm.ans.length - 1] + "),目標函數值:");
sb.append(bdm.fval + ")");
return sb.toString();
}
}
public static void main(String args[]) {
new SimpClient();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -