예제
예제
package FSA; import java.util.ArrayList; import java.util.List; public class CKY { ⁄** * @param args *⁄ void createGrammar(){ List<Grammar> grammar = new ArrayList<Grammar>(); grammar.add(new Grammar("S","VP","VP")); System.out.println(grammar.get(0).parent +"->"+grammar.get(0).child1+" "+grammar.get(0).child2); } public static void main(String[] args) { ⁄⁄ TODO Auto-generated method stub System.out.println("Usage: java Cyk grammar_file some_string"); Grammar a = new Grammar(); a.parent ="S"; a.child1="NP"; a.child2="VP"; Grammar b = new Grammar(); b.parent ="S"; b.child2="NP"; System.out.println(a.parent +"->"+a.child1 + " " + a.child2); System.out.println(b.parent +"->"+b.child1 + " " + b.child2); a.child1="vv"; System.out.println(a.parent +"->"+a.child1 + " " + a.child2); Grammar c= new Grammar("NP","N"); System.out.println(c.parent +"->"+c.child1 + " " + c.child2); System.out.println(); CKY cky = new CKY(); cky.createGrammar(); } } class Grammar{ String parent; String child1; String child2; Grammar(){} Grammar(String a,String b,String c){ parent =a; child1 =b; child2 =c; } Grammar(String a,String b){ parent =a; child1 =b; } }
결과
설명
일단 ArrayList 와 List 를 각각 import 시켜야한다.
예제에서는 Grammar 에 parent,child1,child2 같은 String 을 각각 선언하였다.
그냥 Grammar a = new Grammar(); 와 같은 형식으로 선언해도 상관없지만
만약 Grammar c 와 같은 경우처럼 간편하게 "NP","N" 을 한번에 넣을 수 있다.
그럴 경우 Grammar 클래스 안에 미리 선언을 해주고 넘어가면 된다.
Grammar(){} Grammar(String a,String b,String c){ parent =a; child1 =b; child2 =c; } Grammar(String a,String b){ parent =a; child1 =b; }
가 바로 그 경우인데, 아무것도선언을 안해줄 경우에는 Grammar(){} 를 선언안해줘도 무관하지만 위와 같이 두개를 선언을 해주었을 경우에는 무조건 선언을 해줘야한다는 점을 명심하기 바란다.
그 후, 예제에서 처럼 각 parent, child1, child2 에 값을 대입하고 간단히 프린트를 해보았다.
그림과 같이 vv 를 갱신하고 다시 프린트하면 값이 바뀌는 걸 볼수 있다.
그리고 cky 와 같이 아예 자신의 클래스인 CKY()를 받아와서 createGrammar() 처럼 한번에 grammar라는 리스트를 만들 수 있어서 매번 다시 입력해야하는 번거로움을 줄일수 있다.(객체화의 장점)
예제
package FSA; import java.util.ArrayList; import java.util.List; public class CKY { public static void main(String[] args) { ⁄⁄ TODO Auto-generated method stub CKY cky = new CKY(); List<Grammar> grammar = new ArrayList<Grammar>(); ⁄*grammar=cky.createGrammar();*⁄ ⁄*System.out.println(grammar.get(0).parent);;*⁄ List<Scores>[][] score = new List[4][4]; score[0][1] = new ArrayList<Scores>(); score[0][1].add(new Scores("N","o","N")); score[0][1].add(new Scores("D","o","D")); score[0][1].add(new Scores("S","o","S")); System.out.println("This is Scores"); System.out.println(score[0][1].get(0).parent+score[0][1].get(0).child1+score[0][1].get(0).child2); System.out.println(score[0][1].get(1).parent+score[0][1].get(1).child1+score[0][1].get(1).child2); System.out.println(score[0][1].get(2).parent+score[0][1].get(2).child1+score[0][1].get(2).child2); } } class Scores{ String parent; String child1; String child2; Scores(){} Scores(String a,String b,String c){ parent =a; child1 =b; child2 =c; } Scores(String a,String b){ parent =a; child1 =b; } }
결과
설명
이 예제는 개인적으로 Scores라는 클래스를 새로운 리스트의 형태로 받아서 마치 하나의 유동적인 Map 과 같은 형태를 만들고 싶어서 찾아보다가 만들게 되었다.
일단 위와 같이, score를 선언을 선언한다 하지만 4x4형태의 리스트(실제로는 Map)에 그 안에 ArrayList 형태로 구성하였기 때문에
예를 들면, [0][1]안에 여러개의 Scores 클래스를 순차적으로 삽입할수 있다. 그러므로 유동적인 형태의 Map을 만들수 있다.
'Java' 카테고리의 다른 글
[Java 강좌] 2장. 변수(2) (4) | 2013.08.14 |
---|---|
[Java 강좌] 2장. 변수(1) (0) | 2013.06.20 |
[Java 강좌] 1장. About Java (1) | 2013.06.17 |