All pastes #944816 Raw Edit

Stuff

public java v1 · immutable
·published 2008-03-16 13:28 UTC
rendered paste body
package afn_landa;import java.awt.Point;import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.util.Vector;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.UIManager;public class Demo extends JFrame{	private static final long serialVersionUID = 1L;	public Demo() 	{		super();		initComponents();		this.setVisible(true);	}	private void testeazaButActionPerformed(ActionEvent e) {		testeazaAutomat();	}	private void masinaNouaButActionPerformed(ActionEvent e) {		alfabetTx.setText("");		stariTx.setText("");		stariStartTx.setText("");		stariFinaleTx.setText("");		tranzitiiTx.setText("");		inputTf.setText("");		logTx.setText("");	}	private void incarcaFisierButActionPerformed(ActionEvent e) {		// TODO add your code here	}	private void button2ActionPerformed(ActionEvent e) {		// TODO add your code here	}	private void initComponents() 	{		scrollPane1 = new JScrollPane();		alfabetTx = new JTextArea();		scrollPane2 = new JScrollPane();		stariTx = new JTextArea();		scrollPane3 = new JScrollPane();		stariStartTx = new JTextArea();		scrollPane4 = new JScrollPane();		stariFinaleTx = new JTextArea();		scrollPane5 = new JScrollPane();		tranzitiiTx = new JTextArea();		inputTf = new JTextField();		testeazaBut = new JButton();		inputL = new JLabel();		scrollPane6 = new JScrollPane();		logTx = new JTextArea();		rezultatFinalL = new JLabel();		finalResultL = new JLabel();		logL = new JLabel();		label3 = new JLabel();		label4 = new JLabel();		label5 = new JLabel();		label6 = new JLabel();		label7 = new JLabel();		masinaNouaBut = new JButton();		incarcaFisierBut = new JButton();		button2 = new JButton();		//======== this ========		setLayout(null);		addWindowListener(wl);		setTitle("AFN cu Landa Tranzitii    Pacher Dragos");		setSize(618, 565);		setResizable(false);		this.setLocation(300, 200);		//======== scrollPane1 ========		{			scrollPane1.setViewportView(alfabetTx);		}		add(scrollPane1);		scrollPane1.setBounds(10, 170, 105, 120);		//======== scrollPane2 ========		{			scrollPane2.setViewportView(stariTx);		}		add(scrollPane2);		scrollPane2.setBounds(125, 170, 100, 120);		//======== scrollPane3 ========		{			scrollPane3.setViewportView(stariStartTx);		}		add(scrollPane3);		scrollPane3.setBounds(235, 170, 90, 120);		//======== scrollPane4 ========		{			scrollPane4.setViewportView(stariFinaleTx);		}		add(scrollPane4);		scrollPane4.setBounds(335, 170, 100, 120);		//======== scrollPane5 ========		{			scrollPane5.setViewportView(tranzitiiTx);		}		add(scrollPane5);		scrollPane5.setBounds(445, 170, 160, 120);		add(inputTf);		inputTf.setBounds(90, 310, 345, 20);		//---- testeazaBut ----		testeazaBut.setText("Testeaza Masina");		testeazaBut.addActionListener(new ActionListener() {			public void actionPerformed(ActionEvent e) {				testeazaButActionPerformed(e);			}		});		add(testeazaBut);		testeazaBut.setBounds(450, 307, 155, testeazaBut.getPreferredSize().height);		//---- inputL ----		inputL.setText("String intrare");		add(inputL);		inputL.setBounds(10, 311, 80, inputL.getPreferredSize().height);		//======== scrollPane6 ========		{			scrollPane6.setViewportView(logTx);		}		add(scrollPane6);		scrollPane6.setBounds(5, 365, 600, 135);		//---- rezultatFinalL ----		rezultatFinalL.setText("Rezultat final");		add(rezultatFinalL);		rezultatFinalL.setBounds(new Rectangle(new Point(6, 510), rezultatFinalL.getPreferredSize()));		add(finalResultL);		finalResultL.setBounds(100, 510, 80, finalResultL.getPreferredSize().height);		//---- logL ----		logL.setText("Log");		add(logL);		logL.setBounds(10, 340, 20, 15);		//---- label3 ----		label3.setText("Alfabet");		add(label3);		label3.setBounds(new Rectangle(new Point(15, 145), label3.getPreferredSize()));		//---- label4 ----		label4.setText("Stari");		add(label4);		label4.setBounds(new Rectangle(new Point(130, 145), label4.getPreferredSize()));		//---- label5 ----		label5.setText("Stari start");		add(label5);		label5.setBounds(new Rectangle(new Point(240, 145), label5.getPreferredSize()));		//---- label6 ----		label6.setText("Stari finale");		add(label6);		label6.setBounds(new Rectangle(new Point(335, 145), label6.getPreferredSize()));		//---- label7 ----		label7.setText("Tranzitii");		add(label7);		label7.setBounds(new Rectangle(new Point(450, 145), label7.getPreferredSize()));		//---- masinaNouaBut ----		masinaNouaBut.setText("Creaza masina noua");		masinaNouaBut.addActionListener(new ActionListener() {			public void actionPerformed(ActionEvent e) {				masinaNouaButActionPerformed(e);			}		});		add(masinaNouaBut);		masinaNouaBut.setBounds(170, 20, 265, masinaNouaBut.getPreferredSize().height);		//---- incarcaFisierBut ----		incarcaFisierBut.setText("Incarca din fisier");		incarcaFisierBut.addActionListener(new ActionListener() {			public void actionPerformed(ActionEvent e) {				incarcaFisierButActionPerformed(e);			}		});		add(incarcaFisierBut);		incarcaFisierBut.setBounds(170, 55, 265, incarcaFisierBut.getPreferredSize().height);		//---- button2 ----		button2.setText("Salveaza rezultat");		button2.addActionListener(new ActionListener() {			public void actionPerformed(ActionEvent e) {				button2ActionPerformed(e);			}		});		add(button2);		button2.setBounds(170, 90, 265, button2.getPreferredSize().height);		/*{ // compute preferred size			Dimension preferredSize = new Dimension();			for(int i = 0; i < getComponentCount(); i++) {				Rectangle bounds = getComponent(i).getBounds();				preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);				preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);			}			Insets insets = getInsets();			preferredSize.width += insets.right;			preferredSize.height += insets.bottom;			setMinimumSize(preferredSize);			setPreferredSize(preferredSize);		}*/		alfabetTx.setText("l\n0\n1");		stariTx.setText("s0\ns1\ns2\ns3\ns4");		stariStartTx.setText("s0");		stariFinaleTx.setText("s1\ns3");		tranzitiiTx.setText("s0 0\ns0 1\ns0 l s1 s3\ns1 0 s2\ns1 1 s1\ns1 l\ns2 0 s1\ns2 1 s2\ns2 l\ns3 0 s3\ns3 1 s4\ns3 l\ns4 0 s4\ns4 1 s3\ns4 l");		inputTf.setText("010");	}	private JScrollPane scrollPane1;	private static JTextArea alfabetTx;	private JScrollPane scrollPane2;	private static JTextArea stariTx;	private JScrollPane scrollPane3;	private static JTextArea stariStartTx;	private JScrollPane scrollPane4;	private static JTextArea stariFinaleTx;	private JScrollPane scrollPane5;	private static JTextArea tranzitiiTx;	private static JTextField inputTf;	private JButton testeazaBut;	private JLabel inputL;	private JScrollPane scrollPane6;	private JTextArea logTx;	private JLabel rezultatFinalL;	private JLabel finalResultL;	private JLabel logL;	private JLabel label3;	private JLabel label4;	private JLabel label5;	private JLabel label6;	private JLabel label7;	private JButton masinaNouaBut;	private JButton incarcaFisierBut;	private JButton button2;	WindowListener wl = new WindowListener() {		public void windowActivated(WindowEvent e) {		}		public void windowClosed(WindowEvent e) {		}		public void windowClosing(WindowEvent e) {			System.exit(0);		}		public void windowDeactivated(WindowEvent e) {		}		public void windowDeiconified(WindowEvent e) {		}		public void windowIconified(WindowEvent e) {		}		public void windowOpened(WindowEvent e) {		}	};	/*TODO	 * 1. nouldelandat nu stiu daca face corect ce trebuie, mai are un bug pe undeva, debug klumea	 * 2. de progrmat landaInchiderea	 * 3. de testat angrenajul	 * */	public void TestMethods()	{		String []ion = {"s1, s2"};		String []fin = {"s2, s3"};		//boolean bau = recunoscut(ion, fin);		//System.out.println(bau);		//String []rez = reuniuneStariLandaTranzitii(ion, fin);		//for (int i = 0; i < rez.length; i++)		//	System.out.print(rez[i] + " ");		String [][] tranz = {				{"",  "l",  "0",  "1"},				{"s0",  "s1"},				{"s1",  "s2"},				{"s1",  "s0"},				{"s2",  "s1"},		};		String []test = noulDeLandat(tranz, ion, "1");		for (int i = 0; i < test.length; i++)			System.out.print(test[i] + " ");		log(ion, fin);		JOptionPane.showMessageDialog(this, "bau");		System.exit(0);	}	public void testeazaAutomat()	{		//TestMethods();		///Pt ca am incarcat cu \n, s-ar putea sa fie probleme la split		///cand incarcam din fisier sau cand le dam gata din memorie		int nrStari = stariTx.getLineCount();		int nrAlfabet = alfabetTx.getLineCount();		String []liniiAlfabet = alfabetTx.getText().split("\n");		String []liniiStari = stariTx.getText().split("\n");		String []tranzitiiLinii = tranzitiiTx.getText().split("\n");		String []stFinale = stariFinaleTx.getText().split("\n");		// bagam in matrice [stari x alfabet] tranzitiile		String [][] tranz = new String[nrStari + 1][nrAlfabet + 1];		//prima linie este formata din alfabet si landa		for (int i = 1; i < nrAlfabet+1; i++) {			tranz[0][i] = liniiAlfabet[i-1];		}		logTx.append("-> [incarcare alfabet] ");		for (int i = 1; i < liniiAlfabet.length; i++)			logTx.append(liniiAlfabet[i] + " ");		//prima coloana este formata din stari		for (int i = 1; i < nrStari+1; i++) {			tranz[i][0] = liniiStari[i-1];		}		logTx.append("\n-> [incarcare stari] ");		for (int i = 0; i < liniiStari.length; i++)			logTx.append(liniiStari[i] + " ");		logTx.append("\n");		for (int i = 0; i < nrStari + 1; i++) {			for (int j = 0; j < nrAlfabet + 1; j++) {				if (tranz[i][j] != null)					logTx.append(tranz[i][j] + " ");			}			logTx.append("\n");		}		// acuma incarcam tranzitiile in matrice, una din partile hardcore		int k = tranzitiiTx.getLineCount(); 		int indice = 0;		while (indice < k)  //cat timp nu am citit toate liniile		{			String []linie = tranzitiiLinii[indice].split(" ");    //bug aici - rezolvat						String stare = linie[0];			String element = linie[1];			String destinatie = null;			StringBuilder sb = new StringBuilder("");			for (int i = 2; i < linie.length; i++) {				sb.append(linie[i]);			}			destinatie = sb.toString();			System.out.println(destinatie);			//cauta celula de intersectie a lui stare cu element si acolo pune destinatie			int x = -1, y = -1;			for (int i = 0; i < nrStari + 1; i++)				if (tranz[i][0] != null)					if (tranz[i][0].equals(stare)) {						x = i;						break;					}			for (int i = 0; i < nrAlfabet + 1; i++)				if (tranz[0][i] != null)					if (tranz[0][i].equals(element)) {						y = i;						break;					}			if (destinatie != null)				tranz[x][y] = destinatie;     //sa avem grija aici ce se intampla			indice++;		}		logTx.append("\n-> [matrice incarcata]\n ");		for (int i = 0; i < nrStari + 1; i++) {			for (int j = 0; j < nrAlfabet + 1; j++) {				if (tranz[i][j] != null)					logTx.append(tranz[i][j] + " ");				else 					logTx.append("x");			}			logTx.append("\n");		}		//aici pastram elementele pentru care calculam landa tranzitia		String []deLandat = stariStartTx.getText().split("\n");		logTx.append("-> [stari de start] ");		for (int i = 0; i < deLandat.length; i++)			logTx.append(deLandat[i] + " ");		// Aici este Creierul		int maiAvemInput = 0;		String[] temp = null;		while (maiAvemInput < inputTf.getText().length()) 		{			indice = 0;			//va retine rezultatul lui deLandat			temp = null;			//calculam landa tranzitiile pentru starile din deLandat			while (indice < deLandat.length) 			{				String[] rez = landaInchidere(tranz, deLandat);				//daca vreun caracter din rez nu se afla in temp il copiem acolo				if (temp == null) {					temp = new String[rez.length];					for (int i = 0; i < rez.length; i++)						temp[i] = rez[i];				}				else					temp = reuniuneStariLandaTranzitii(rez, temp);				indice++;			}			log(deLandat, temp);			//deLandat va fii vidat			deLandat = null;			//cautam in matrice sa vedem cine merge cu caracter din input(temp) in alta stare si-l bagat in deLandat			StringBuilder sb = new StringBuilder(inputTf.getText().charAt(maiAvemInput));			//String caracter = sb.toString();			deLandat = noulDeLandat(tranz, temp, sb.toString());			maiAvemInput++;		}		//daca temp contine una din starile finale cuvantul este recunoscut altfel nu		boolean recunoscut = recunoscut(temp, stFinale);		if (recunoscut) rezultatFinalL.setText("Recunoscut");		else			rezultatFinalL.setText("Nerecunoscut");	}	/** returneaza landa inchiderea unei multimi */	public String[] landaInchidere(String[][] mat, String[] elemente)	{		//incepem de la pozitia de start si ii facem landa inchiderea		//TODO		String [] temp = undeMerge(mat, elemente);		return temp;	}		Vector<String> sir = new Vector<String>();		public String[] undeMerge(String[][] mat, String[] elemente)	{		Vector<String> rez = new Vector<String>();		boolean getOut = false;				for (int i = 0; i < elemente.length; i++) {			//unde merge element[i], merge in rez[i], daca nu merge nicaieri return;			for (int j = 1; j < mat.length; j++) {				if (mat[j][0].equals(elemente[i])) {					if (mat[j][1] != null) {						//Smecherie..daca e mai mare de 2 caractere il split-uim la doua						if (mat[j][1].length() > 2)						for (int j2 = 0; j2 < mat[j][1].length(); j2+=2)							rez.add(mat[j][1].substring(j2,j2+2));						else {							if (mat[j][1].equals("")) {								getOut = true;								break;							}							else							rez.add(mat[j][1]);						}						//rez.add(mat[j][1]);					}				}			}			if (getOut)				break;			//daca nu e in lista il bagam in []sir			for (int k = 0; k < rez.size(); k++) {				boolean este = false;				for (int j = 0; j < sir.size(); j++) {					if (rez.get(k).equals(sir.get(j)))					{						este = true;					}				}				if (!este) {					sir.add(rez.get(k));				}			}						//undemerge(mat, rez[i]);			if (getOut)				return null;			if (rez.get(i) != null) {				String []temp = new String[rez.size()];				for (int j = 0; j < temp.length; j++)					temp[j] = rez.get(j);				// if getOut				undeMerge(mat, temp);			}			else			{				String []s = new String[sir.size()];				for (int j = 0; j < s.length; j++)					s[j] = sir.get(j);				return s;			}		}		String[] s = new String[sir.size()];		for (int i = 0; i < s.length; i++)			s[i] = sir.get(i);		return s;	}	/** Sirurile trebuie sa aiba cel putin un element */	public void log(String[] temp, String[] rezultatLandaTranzitie)	{		logTx.append("\n-> landa tranzitie ({");		for (int i = 0; i < temp.length-1; i++)			logTx.append(temp[i] + ", ");		logTx.append(temp[temp.length-1]);		logTx.append("}) = {");		for (int i = 0; i < rezultatLandaTranzitie.length-1; i++)			logTx.append(rezultatLandaTranzitie[i] + ", ");		logTx.append(rezultatLandaTranzitie[rezultatLandaTranzitie.length-1]);		logTx.append("}");	}	/** DE VERIFICAT CORECTITUDINEA LUI !!! */	public String[] noulDeLandat(String [][]tranz, String[] temp, String caracter)	{		Vector<String> tempLandat = new Vector<String>();		for (int i = 0; i < temp.length; i++) {			for (int j = 1; j < tranz.length; j++) {				if (temp[i].equals(tranz[j][0]))				{					if (tranz[j][1].equals(caracter))						tempLandat.add(tranz[j][2]);				}			}		}		temp = new String[tempLandat.size()];		for (int i = 0; i < tempLandat.size(); i++) {			temp[i] = tempLandat.get(i);		}		return temp;	}	public String[] reuniuneStariLandaTranzitii(String[] rez, String[] temp)	{		//bagam elementele lui temp in vector		Vector<String> tempVec = new Vector<String>();		for (int i = 0; i < temp.length; i++)			tempVec.add(temp[i]);		//caut fiecare element din primul in al doilea daca nu se gaseste il adaug		for (int i = 0; i < rez.length; i++) {			boolean este = false;			for (int j = 0; j < temp.length; j++) {				if (rez[i].equals(temp[j]))				{					este = true;				}			}			if (!este) {				tempVec.add(rez[i]);			}		}		//facem un nou temp pe care il returnam		temp = new String[tempVec.size()];		for (int i = 0; i < tempVec.size(); i++)			temp[i] = tempVec.get(i);		return temp;	}	/** Verifica daca ultimul rezultat al landa tranzitiei se afla printre starile finale */	public boolean recunoscut(String[] temp, String[] finale)	{		boolean recunoscut = false;		for (int i = 0; i < finale.length; i++)			for (int l = 0; l < temp.length; l++)				if (finale[i].equals(temp[l])) {					System.out.println("Cuvant recunoscut!");					recunoscut = true;					return true;				}		if (!recunoscut)			System.out.println("Cuvant nerecunoscut!");		return false;	}	public static void main(String[] args) 	{		JFrame.setDefaultLookAndFeelDecorated(true); 		JDialog.setDefaultLookAndFeelDecorated(true);		try 		{ 			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 		} 		catch (Exception ex) 		{ 			System.out.println("Failed loading L&F: "); 			System.out.println(ex); 		}		Demo d = new Demo();	}}