⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inputexcepess.java

📁 有限自动机输入,转换,识别,图形显示与化简
💻 JAVA
字号:
package cn.work.zdj.ui;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.part.ViewPart;

import cn.work.zdj.sys.AutoMachine;
import cn.work.zdj.sys.IAppConstants;

public class InputExcepess extends ViewPart {
	private Group group_1;
	//private AutoMachine machine;
	private int i = 1;
	private Text tExcepess[] = new Text[10];
	private Button bExcepess[] = new Button[10];
	
	public InputExcepess() {
		// TODO 自动生成构造函数存根
	}

	@Override
	public void createPartControl(Composite parent) {
		// TODO 自动生成方法存根
		final Composite composite = new Composite(parent,SWT.NONE);
		composite.setLayout(new GridLayout(1,false));
		
		group_1 = new Group(composite,SWT.None);
		group_1.setText("输入表达式");
		
		final GridLayout gridLayout = new GridLayout(4,false);
		gridLayout.marginRight = 10;
		gridLayout.verticalSpacing = 10;
		gridLayout.marginHeight = 10;
		group_1.setLayout(gridLayout);
		
		Label label1 = new Label(group_1,SWT.RIGHT);
		label1.setText("输入表达式");
		tExcepess[0] = new Text(group_1,SWT.BORDER);
		GridData gd = new GridData(GridData.FILL_BOTH);
		gd.widthHint = 200;
		tExcepess[0].setLayoutData(gd);
		bExcepess[0] = new Button(group_1,SWT.None);
		bExcepess[0].setText("验证");
		
		
		final SelectionListener listener = new SelectionListener(){
			public void widgetDefaultSelected(SelectionEvent e) {
				// TODO 自动生成方法存根
				
			}

			public void widgetSelected(SelectionEvent e) {
				// TODO 自动生成方法存根
				
				IViewPart vp = getViewSite().getPage().findView(IAppConstants.OLD_ZDJ_VIEW_ID);
				Table table = ((OldZdj)vp).getTableViewer().getTable();
				AutoMachine machine = (AutoMachine)table.getItem(table.getSelectionIndex()).getData();
				String express = null;
				if(e.widget == bExcepess[0]){
					express = tExcepess[0].getText();
				}else if(e.widget == bExcepess[1])
					express = tExcepess[1].getText();
				
				else if(e.widget == bExcepess[2])
					express = tExcepess[2].getText();
				
				else if(e.widget == bExcepess[3])
					express = tExcepess[3].getText();
				
				else if(e.widget == bExcepess[4])
					express = tExcepess[4].getText();
				
				else if(e.widget == bExcepess[5])
					express = tExcepess[5].getText();
				
				else if(e.widget == bExcepess[5])
					express = tExcepess[5].getText();
				
				else if(e.widget == bExcepess[6])
					express = tExcepess[6].getText();
				
				else if(e.widget == bExcepess[7])
					express = tExcepess[7].getText();
				
				else if(e.widget == bExcepess[8])
					express = tExcepess[8].getText();
				
				else if(e.widget == bExcepess[9])
					express = tExcepess[9].getText();
				
				
				//String state2 = null;
				Set<String> set =null;
				Set<String> set2 = null;
				for(int i=0;i<express.length();i++){
					//MessageDialog.openInformation(null,"提示",""+express.charAt(i));
					if(i == 0){
						//state2 = machine.getFunction().outputNextState(machine.getFirState(), express.charAt(i));	
						set = machine.getFunction().outputNextState(machine.getFirState(), express.charAt(i));	
						//MessageDialog.openInformation(null,"提示",""+set.toString());
						if(set == null)
							break;
						continue;
					}
					
					//state2 = machine.getFunction().outputNextState(state2,express.charAt(i));
					//MessageDialog.openInformation(null,"提示",state2);

					Iterator states = set.iterator();
					
					while(states.hasNext()){
						String temp2 = states.next().toString();
						Set temp = machine.getFunction().outputNextState(temp2,express.charAt(i));
						
						
						if(temp == null||temp.size() ==0){
							//MessageDialog.openInformation(null,"提示",temp2);
							
							continue;
						}
						
						if(set2 == null)
							set2 = new HashSet();
						Iterator states2 = temp.iterator();
						while(states2.hasNext()){
							String strState2 = states2.next().toString();
							if(strState2 != null && !strState2.equals(""))
								set2.add(strState2);
						}
						//MessageDialog.openInformation(null,"提示",set2.toString());
						
					}
					set = null;
					if(set2 == null||set2.size() ==0)
						break;
					set = set2;
					set2 = null;
					//if(state2 == null)
						//break;
				}
				//if(state2 == null || !machine.getEndStates().contains(state2)){
				boolean isSucess = false;
				
				if(set != null){
					Iterator states = set.iterator();
					while(states.hasNext()){
						if(machine.getEndStates().contains(states.next().toString())){
							isSucess = true;
							break;
						}
					}
					
					
				}
					
				if(!isSucess){
					MessageDialog.openInformation(null,"提示","自动机:"+machine.getLabel()+"  无法验证该表达式");
				}else{
					MessageDialog.openInformation(null,"提示","自动机:"+machine.getLabel()+"  成功验证该表达式");
				}
			}
			
		};
		bExcepess[0].addSelectionListener(listener);
		
		Button bExcepess_2 = new Button(group_1,SWT.NONE);
		bExcepess_2.setText("增加");
		bExcepess_2.addSelectionListener(new SelectionListener(){
			
			public void widgetDefaultSelected(SelectionEvent e) {
				// TODO 自动生成方法存根
				
			}

			public void widgetSelected(SelectionEvent e) {
				// TODO 自动生成方法存根
				if(i==10){
					MessageDialog.openInformation(null,"提示","表达式添加不能超过十个");
					return;
				}
				Label label2 = new Label(group_1,SWT.RIGHT);
				label2.setText("输入表达式");
				tExcepess[i] = new Text(group_1,SWT.BORDER);
				GridData gd = new GridData(GridData.FILL_BOTH);
				gd.widthHint = 200;
				tExcepess[i].setLayoutData(gd);
				
				bExcepess[i] = new Button(group_1,SWT.None);
				bExcepess[i].setText("验证");
				bExcepess[i].addSelectionListener(listener);
				Label label = new Label(group_1,SWT.None);
				composite.layout(true);
				i++;
			}
			
		});
	}

	@Override
	public void setFocus() {
		// TODO 自动生成方法存根
		
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -