亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? transformview.java

?? 輸入一個正則表達式
?? JAVA
字號:
package reg402;

import java.awt.*;
import javax.swing.*;
import java.util.LinkedList;
import java.util.Iterator;
import java.awt.geom.Ellipse2D;
import java.util.ArrayList;

public class TransformView extends JPanel implements Constants {
  TransformModel transModel;
  Graph graph;

  //保存每個結點經過任意個ε轉換到達的其他結點ID號
 private ArrayList[] ETable;
 //保存在每個轉換字母上的兩個關聯結點的ID號
 private ArrayList[] transTable;
 //保存轉換表的數據
 String[][] DfaTable;

  public TransformView(TransformModel transModel) {
    this.transModel = transModel;
    this.setPreferredSize(new Dimension(400, 300));
    this.setBackground(Color.orange);
  }

  public void paintComponent(Graphics g) {
    Graphics2D g2d = (Graphics2D)g;
    super.paintComponent(g2d);
    BasicStroke bs = new BasicStroke(1);
    Rectangle graphBounds = transModel.getBounds();
    Dimension size = this.getPreferredSize();
    Point location = new Point((size.width - graphBounds.width)/2,
        (size.height - graphBounds.height)/2);
    Element arrowLink;
    int x = 50 - graphBounds.x;
    int y = 50 - graphBounds.y;
    graph = transModel.getGraph();
    graph.setCurrent(0);

    //初始化數據結構
    ETable= new ArrayList[transModel.node.length];
    transTable=new ArrayList[transModel.regExp.length-1];
    for(int i=0; i< transModel.node.length; i++)
    {
        ETable[i] = new ArrayList();
    }
    int i,j,k,t=0;
    for(i=0,j=0; i<transTable.length;  i++)
    {
        if (transModel.regExp[i].compareTo("|")!=0
            && transModel.regExp[i].compareTo("*")!=0
            && transModel.regExp[i].compareTo("(")!=0
           && transModel.regExp[i].compareTo(")")!=0)
        {
            //transTable每個元素第一個值保存一個轉換字母
            transTable[j]=new ArrayList();
            for(k=0; k<j; k++)
                if(((String)transTable[k].get(0)).compareTo(transModel.regExp[i])==0)
                    break;
            if(k==j)
            {
                transTable[j].add(transModel.regExp[i]);
                j++;
            }
        }
    }

    //為轉換表申請空間
    DfaTable=new String[transModel.node.length+1][];
    for(i=0; i<DfaTable.length; i++)
        DfaTable[i]=new String[j+1];
    //初始化轉換表的列
    DfaTable[0][0]="狀態\\轉換字符";
    for(i=1; i<DfaTable[0].length; i++)
        DfaTable[0][i]=(String)transTable[i-1].get(0);

    //畫結點
    for( i = 0; i < transModel.node.length; i++) {


      Point curPoint = transModel.node[i].getPosition();
      Element node = new Element.Circle(new Point(curPoint.x + x, curPoint.y + y),
                                        RADIUS, bs, Color.black);
      Ellipse2D ellipse = new Ellipse2D.Double(curPoint.x + x - RADIUS,
                                               curPoint.y + y - RADIUS,
                                               2*RADIUS, 2*RADIUS);


      g2d.setPaint(Color.white);
      g2d.fill(ellipse);
      node.draw(g2d);

      //畫狀態號
      g2d.drawString((new Integer(i)).toString(),curPoint.x+x-3,curPoint.y+y+3);

    }
    //遍歷圖
    while(graph.hasNext()) {
      EdgeLink next = graph.getNext();
      if (next != null) {
          //邊的兩個點的位置
        Point pa = next.n1.getPosition();
        Point pb = next.n2.getPosition();
        String label = next.getLabel();
        //轉換字母是ε,則添加入ETable
       if(label=="ε")
       {
           ETable[next.n1.getID()].add(next.n2.getID());
       }
       //否則添加入transTable
       else
       {
           i=0;
           while( (( (String) transTable[i].get(0) ).compareTo(label))!=0) i++;
           transTable[i].add(new Point(next.n1.getID(),next.n2.getID()));
       }
        Rectangle interPoint = intersectPoint(pa, pb);
        Point p1 = new Point(interPoint.x, interPoint.y);
        Point p2 = new Point(interPoint.width, interPoint.height);
        if((Math.abs(p2.x - p1.x) <= 4*RADIUS && p1.x < p2.x) || p1.y != p2.y) {
          //普通的線, 由兩點X距離和Y距離決定
          arrowLink = new Element.ArrowLine(new Point(p1.x + x, p1.y + y),
                                            new Point(p2.x + x, p2.y + y),
                                            new BasicStroke(1), Color.black,
                                            label);
          arrowLink.draw(g2d);
        }
      }
    }
//實現將每個結點經過任意個ε能到達的結點ID號添加入每個數組元素
    for(i=0; i<ETable.length; i++){
        for(j=0; j<ETable[i].size(); j++){
            LookBack(i,((Integer)ETable[i].get(j)).intValue());
        }
    }
    Point pointa = graph.getStart().getPosition();
    Point pointb = new Point(pointa.x - 4*RADIUS, pointa.y);
    Rectangle interPoint = intersectPoint(pointa, pointb);
    Point point2 = new Point(interPoint.x, interPoint.y);
    Point point1 = new Point(interPoint.width, interPoint.height);
    arrowLink = new Element.ArrowLine(new Point(point1.x + x, point1.y + y),
                                            new Point(point2.x + x, point2.y + y),
                                            new BasicStroke(1), Color.black,
                                            "ε");
    arrowLink.draw(g2d);
    LinkedList list = transModel.getSpecialEdge();
    Iterator iter = list.iterator();
    while(iter.hasNext()) {
      SpecialEdge special = (SpecialEdge)iter.next();
      EdgeLink edge = special.getEdge();
      Point pb = edge.n1.getPosition();
      Point pa = edge.n2.getPosition();

      String label = edge.getLabel();
      Rectangle bounds = special.getBounds();
      if(pa.x < pb.x )  {     //*運算中的向前循環
        Point p2 = new Point(pa.x, pa.y - RADIUS);
        Point p1 = new Point(pb.x, pb.y - RADIUS);
        arrowLink = new Element.ArrowLine(new Point(p1.x + x, p1.y + y),
                                          new Point(p1.x + x,
            p1.y + y + bounds.y + RADIUS),
                                          new Point(p2.x + x,
            p2.y + y + bounds.y + RADIUS),
                                          new Point(p2.x + x, p2.y + y),
                                          new BasicStroke(1), Color.black,
                                          label);
      }
      else {         //隔著幾個結點的線
        Point p2 = new Point(pa.x, pa.y + RADIUS);
        Point p1 = new Point(pb.x, pb.y + RADIUS);
        arrowLink = new Element.ArrowLine(new Point(p1.x + x, p1.y + y),
                                          new Point(p1.x + x,
            p1.y + y + bounds.height + bounds.y - RADIUS),
                                          new Point(p2.x + x,
            p2.y + y + bounds.height + bounds.y - RADIUS),
                                          new Point(p2.x + x, p2.y + y),
                                          new BasicStroke(1), Color.black,
                                          label);
      }

      arrowLink.draw(g2d);
    }

    //取得圖的起始ID號
    int startID=graph.getStart().getID();
    String startString=Integer.toString(startID)+",";
    //查ETable表,取得起始結點的ε-閉包,保存于startString
    for(i=0; i<ETable[startID].size(); i++)
        startString+=Integer.toString((Integer)ETable[startID].get(i))+",";
//為轉換表賦值
    DfaTable[1][0]=startString;
    int DfaPos=1,DfaEnd=1;
    int commar=0,curID=0,temp=0;
    String curString="",blankString="";
    //while循環功能:生成轉換表
    while(DfaPos<=DfaEnd)
    {
        for(i=1; i<DfaTable[0].length ; i++){
            curString = DfaTable[DfaPos][0];
            blankString="";
            while (curString.compareTo("") != 0) {
                commar = curString.indexOf(",");
                curID = Integer.valueOf(curString.substring(0, commar));
                curString = curString.substring(commar + 1);

                for(j=1; j<transTable[i-1].size(); j++)
                    if(curID==((Point)transTable[i-1].get(j)).x){
                        blankString +=
                                Integer.toString(((Point) transTable[i -
                                                  1].get(j)).y) + ",";
                    }
            }
            String tempString=blankString;
            while(tempString.compareTo("")!=0){
                try{
                   commar = tempString.indexOf(",");
                   temp = Integer.valueOf(tempString.substring(0, commar));
                   tempString = tempString.substring(commar + 1);
                }
                catch(Exception e){
                    JOptionPane.showMessageDialog(null,"這樣的表達式是沒有意義的!請重新輸入","402告訴你:",0);
                   System.exit(0);
                }
                String blanktemp;
                boolean flag=true;

            for(k=0; k<ETable[temp].size(); k++)
            {
                blanktemp=blankString;
                flag=true;
                while(blanktemp.compareTo("")!=0)
                {
                    commar = blanktemp.indexOf(",");
                    String ss = blanktemp.substring(0, commar);
                    blanktemp = blanktemp.substring(commar + 1);

                    if ((((Integer) ETable[temp].get(k)).toString().
                         compareTo(ss)) == 0)
                        flag=false;
                }
                        if(flag)
                        blankString += ((Integer) ETable[temp].get(k)).
                                toString() + ",";
            }
            //將找到的第一個狀態集合添加入轉換表相應位置
            DfaTable[DfaPos][i]=blankString;
            for( t=1; t<=DfaEnd; t++)
                if(blankString.compareTo(DfaTable[t][0])==0) break;
            }
            //將此集合添加入下一行,以方便下一次生成其他狀態集合
            if(t>DfaEnd)
                DfaTable[++DfaEnd][0]=blankString;
        }
        DfaPos++;
    }

    g2d.dispose();


  }

  public Rectangle intersectPoint(Point center1, Point center2) {
    double l = Math.sqrt((center2.x - center1.x)*(center2.x - center1.x) +
                         (center2.y - center1.y)*(center2.y - center1.y));

    int x1 = (int)(RADIUS/l*(center2.x - center1.x)) + center1.x;
    int y1 = (int)(RADIUS/l*(center2.y - center1.y)) + center1.y;
    int x2 = (int)((l - RADIUS)/l*(center2.x - center1.x)) + center1.x;
    int y2 = (int)((l - RADIUS)/l*(center2.y - center1.y)) + center1.y;

    return new Rectangle(x1, y1, x2, y2);
  }
//函數功能:見上面所述
  private void LookBack(int CurPos, int newID)
  {
      for(int i=0; i<ETable.length; i++)
      {
          for(int j=0; j<ETable[i].size(); j++)
          {
              if (((Integer)(ETable[i].get(j))).intValue()==CurPos && EExit(i,newID))
              {
                  ETable[i].add(newID);
                  LookBack(i,newID);
              }
          }

      }
  }
  //函數功能:判斷ETable當前行有無重復的ID號,有則不添加新的ID號
  private boolean EExit(int i,int newID){
      for(int j=0; j<ETable[i].size(); j++)
          if(((Integer)ETable[i].get(j)).intValue()==newID)
              return false;
      return true;

      }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人亚洲综合a∨婷婷图片| 色综合久久中文综合久久牛| jlzzjlzz欧美大全| 88在线观看91蜜桃国自产| 精品日韩99亚洲| 亚洲精品自拍动漫在线| 黄色日韩网站视频| 欧美色区777第一页| 国产欧美日韩综合| 日本不卡视频一二三区| 成人午夜激情视频| 欧美va亚洲va香蕉在线| 亚洲国产裸拍裸体视频在线观看乱了 | 色噜噜狠狠色综合中国| 精品处破学生在线二十三| 日韩av在线发布| 成人中文字幕电影| 555夜色666亚洲国产免| 亚洲免费在线电影| 丰满少妇在线播放bd日韩电影| 欧美日韩黄色影视| 亚洲另类在线视频| 99精品视频中文字幕| 国产夜色精品一区二区av| 免费不卡在线观看| 欧美酷刑日本凌虐凌虐| 一区二区三区中文字幕| av资源站一区| 国产精品五月天| 国产精品一区二区果冻传媒| 日韩三级免费观看| 青青草97国产精品免费观看无弹窗版 | 亚洲五月六月丁香激情| 色欲综合视频天天天| 国产日韩一级二级三级| 国产一区二区三区免费看| 日韩欧美中文一区二区| 日本成人在线不卡视频| 欧美一区二区三区日韩| 日韩av不卡一区二区| 日韩午夜中文字幕| 强制捆绑调教一区二区| 4438成人网| 蜜桃一区二区三区在线观看| 91精品国产乱| 国内精品写真在线观看| 久久综合九色综合97婷婷女人 | 日韩精品中午字幕| 韩国精品一区二区| 日韩午夜电影av| 久草这里只有精品视频| 欧美精品一区二区三区四区 | 欧美一区二区精品在线| 美国毛片一区二区三区| 精品成人一区二区三区| 高清不卡在线观看av| 亚洲天堂2016| 欧美三级视频在线| 蜜桃av一区二区三区| 久久综合色之久久综合| 成人久久久精品乱码一区二区三区 | 欧美疯狂做受xxxx富婆| 久久99精品国产.久久久久久| 2欧美一区二区三区在线观看视频| 狠狠色狠狠色综合系列| 最新国产精品久久精品| 欧美三级视频在线观看| 国模娜娜一区二区三区| 亚洲日本va午夜在线电影| 欧美午夜寂寞影院| 激情综合一区二区三区| 国产精品久久久久影院老司 | 福利一区二区在线观看| 亚洲精品视频一区| 欧美r级电影在线观看| 成人免费视频app| 日韩精品免费视频人成| 中文字幕精品—区二区四季| 欧美久久久久久久久中文字幕| 久久精品99国产国产精| 亚洲天堂av一区| 欧美成人艳星乳罩| 色婷婷av一区二区三区大白胸 | 国产精品综合久久| 亚洲综合一二三区| 欧美经典一区二区三区| 欧美日韩国产高清一区二区| 高清不卡一二三区| 免费一区二区视频| 亚洲愉拍自拍另类高清精品| 久久久久青草大香线综合精品| 91成人免费网站| 国产成a人亚洲精品| 婷婷亚洲久悠悠色悠在线播放| 中文文精品字幕一区二区| 在线综合视频播放| 99re66热这里只有精品3直播 | 国产激情一区二区三区桃花岛亚洲| 一区二区三区不卡视频| 久久精品一区二区三区不卡| 在线播放国产精品二区一二区四区 | 粉嫩一区二区三区性色av| 蜜臀va亚洲va欧美va天堂| 亚欧色一区w666天堂| 亚洲丝袜制服诱惑| 国产精品女上位| 国产日韩欧美一区二区三区乱码| 日韩欧美国产三级| 91精品国产高清一区二区三区| 91伊人久久大香线蕉| 成人精品视频一区| 高清av一区二区| 成人va在线观看| 成人污污视频在线观看| 高清av一区二区| 成人av影视在线观看| 高清beeg欧美| 91在线播放网址| 91免费国产在线| jlzzjlzz国产精品久久| 国产成人高清在线| 美女一区二区视频| 免费日韩伦理电影| 天天综合天天做天天综合| 亚洲精品美腿丝袜| 最新欧美精品一区二区三区| 国产人伦精品一区二区| 欧美精品v日韩精品v韩国精品v| jlzzjlzz亚洲日本少妇| 成人免费视频caoporn| a4yy欧美一区二区三区| 成人午夜电影小说| 懂色av一区二区在线播放| 极品少妇xxxx偷拍精品少妇| 天天av天天翘天天综合网| 蜜臀精品久久久久久蜜臀| 无码av中文一区二区三区桃花岛| 一区二区三区视频在线看| 国产精品狼人久久影院观看方式| 久久这里只精品最新地址| 日韩午夜激情电影| 欧美mv和日韩mv国产网站| 日韩一区二区三区四区五区六区| 欧美另类一区二区三区| 91精品视频网| 日韩三级中文字幕| 欧美成人一区二区三区片免费| 日韩亚洲欧美中文三级| 精品久久久久久久久久久久久久久| 欧美一区二区三区视频在线观看| 久久婷婷色综合| 国产精品美女www爽爽爽| 最新久久zyz资源站| 亚洲综合色丁香婷婷六月图片| 日韩av在线免费观看不卡| 极品少妇xxxx精品少妇偷拍| 精品一区二区三区av| 国产精品一区二区在线看| 国产传媒久久文化传媒| 91在线观看一区二区| 日本丶国产丶欧美色综合| 欧美在线free| 日韩欧美一二三区| 国产精品日韩成人| 人人狠狠综合久久亚洲| 国产精品一二三四五| 色婷婷激情综合| 欧美一区二区视频观看视频| 国产精品国产成人国产三级| 亚洲国产精品尤物yw在线观看| 免费高清在线视频一区·| 国产成人高清在线| 99re这里只有精品6| 国产亚洲欧美在线| 一区二区欧美精品| 国产一区二区三区日韩| 91网站视频在线观看| 久久精品视频在线免费观看| 一区二区三区四区视频精品免费| 青青青爽久久午夜综合久久午夜| 麻豆中文一区二区| www.亚洲人| 久久精子c满五个校花| 亚洲一区欧美一区| 国产成人精品影院| 91福利视频在线| 中文字幕一区二| 另类人妖一区二区av| 91成人国产精品| 国产视频一区在线观看| 国产一区啦啦啦在线观看| 91行情网站电视在线观看高清版| 26uuu另类欧美亚洲曰本| 午夜精品一区在线观看| 丁香亚洲综合激情啪啪综合| 91精品国产91综合久久蜜臀| 亚洲精品视频一区| 成人sese在线| 国产精品久久久一本精品| 韩国三级在线一区|