?? bank.java
字號:
{
for(int i=0;i<proceNumber;i++)
{
Process[i]=i+1;
}
}
//********************************//全排列算法
public void addVector(int arr[],Vector vector[])
{
String string="";
do
{
for (int i = 0; i < arr.length; i++) {
string=string+arr[i];
}
vector[finall].addElement(string);
finall++;
string="";
} while (nextPermutation(arr));
}
public boolean nextPermutation(int[] arr) {
int postLeft = -1;
for (int i = arr.length - 1; i > 0; i--) {
if (arr[i - 1] < arr[i]) {
postLeft = i - 1;
break;
}
}
if (postLeft < 0) {
return false;
}
int postRight = -1;
for (int i = arr.length - 1; i >= postLeft; i--) {
if (arr[i] > arr[postLeft]) {
postRight = i;
break;
}
}
swap(arr, postLeft, postRight);
reverse(arr, postLeft + 1, arr.length);
return true;
}
public void swap(int[] arr, int ind1, int ind2)
{
int t = arr[ind1];
arr[ind1] = arr[ind2];
arr[ind2] = t;
}
public void reverse(int[] arr, int ind1, int ind2)
{
for (int i = 0; i < (ind2 - ind1) / 2; i++)
{
swap(arr, ind1 + i, ind2 - 1 - (i));
}
}
//復原函數(shù)
//********************************/
public int sum(int k)
{
int sum=1;
for(;k>0;k--)
{
sum=sum*k;
}
return sum;
}
public int inner3(int current,int a[][])
{
int amount=0;
for(int i=0;i<a[current].length;i++)
{
if(system[i]<a[current][i])
{
amount=1;
break;
}
}
return amount;
}
public void addSystem(int j,int a[][])
{
for(int i=0;i<a[j].length;i++)
{
system[i]=system[i]+allocation[j][i];
}
System.out.println();
}
public void huiFui()
{
for(int h=0;h<system.length;h++)
{
system[h]=systemF[h];
}
}
public int outer(String string)
{
int amount=0;
for(int j=0;j<string.length();j++)
{
int current=Integer.parseInt(string.substring(j,j+1))-1;
if(inner3(current,need)==0)
{
addSystem(current,allocation);
}
if(inner3(current,need)==1)
{
amount=1;
break;
}
}
return amount;
}
public void secure(Vector vectorAll[])
{
for(int k=0;k<vectorAll.length;k++)
{
string=(String)vectorAll[k].elementAt(0);
System.out.println("string="+string);
int amount=outer(string);
if(amount==1)
{
System.out.println(string+"不是安全序列被移除!");
vectorAll[k].removeElementAt(0);
huiFui();
}
if(amount==0)
{
System.out.println(string+"是安全序列!");
huiFui();
}
}
}
public void test()
{
repuestAlternate=Integer.parseInt(requestAlternate.getText());
int current=repuestAlternate-1;
for(int j=0;j<max[current].length;j++)
{
if(request[j]>max[current][j])
{
JOptionPane.showMessageDialog(firstFrame,"request大于max,不能分配!");
System.exit(0);
}
}
for(int j=0;j<system.length;j++)
{
if(request[j]>system[j])
{
JOptionPane.showMessageDialog(firstFrame,"request大于system,不能分配!");
System.exit(0);
}
}
for(int j=0;j<need[current].length;j++)
{
need[current][j]=need[current][j]-request[j];
allocation[current][j]=allocation[current][j]+request[j];
system[j]=system[j]-request[j];
}
}
public void getInformation()
{
getMaxAndAllocation();
getRequestNumber(requestTextField.getText(),request);
getRequestNumber(systemJTextField.getText(),system);
getRequestNumber(systemJTextField.getText(),systemF);
addNum();
Process(Process);
addVector(Process,vectorAll);
}
public void clear2()
{
if(vectorAllF.size()>0)
{
vectorAllF.removeAllElements();
}
}
public void clear()
{
for(int j=0;j<maxTextField.length;j++)
{
maxTextField[j].setText("");
AllocationTextField[j].setText("");
}
systemJTextField.setText("");
requestTextField.setText("");
requestAlternate.setText("");
proceNumberText.setText("");
sourceNumberText.setText("");
Remove();
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==firstFrameSureButton)//主窗口的確定按鈕
{
getInformation();
secure(vectorAll);
for(int j=0;j<vectorAll.length;j++)
{
if(vectorAll[j].size()!=0)
{
vectorAllF.addElement(vectorAll[j].elementAt(0));
}
}
}
if(e.getSource()==secondFrameSureButton)//父窗口個窗口的確定按鈕
{
proceNumber=Integer.parseInt(proceNumberText.getText());
vectorAll=new Vector[sum(proceNumber)];
for(int j=0;j<vectorAll.length;j++)
{
vectorAll[j]=new Vector();
}
Process=new int[proceNumber];
sourceNumber=Integer.parseInt(sourceNumberText.getText());
if(sourceNumber==1)
{
requestAlternate.setEditable(false);
requestTextField.setEditable(false);
}
setMax();
firstFrame.setVisible(true);
secondFrame.setVisible(false);
}
if(e.getSource()==resultButton)
{
list=new JList(vectorAllF);
if(vectorAllF.size()>0)
{
String string="安全序列共"+vectorAllF.size()+"個";
label1.setText(string);
}
if(vectorAllF.size()==0)
{
String string="不存在安全序列";
label1.setText(string);
}
JScrollPane panelThirdFrame = new JScrollPane(list);
thirdPanel2.add(panelThirdFrame);
thirdFrame.setVisible(true);
}
if(e.getSource()==nextButton)
{
clear();
}
if(e.getSource()==testButton)
{
getInformation();
test();
for(int h=0;h<system.length;h++)
{
systemF[h]=system[h];
}
secure(vectorAll);
for(int j=0;j<vectorAll.length;j++)
{
if(vectorAll[j].size()!=0)
{
vectorAllF.addElement(vectorAll[j].elementAt(0));
}
}
}
if(e.getSource()==frame3Button)
{
thirdFrame.setVisible(false);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -