| Relaatio.java |
1 package kalenteri;
2
3 import java.io.PrintStream;
4
5 /**
6 * Relaatio-luokka, joka yhdistää yhden harjoituksen moneen sisältöön.
7 * @author Timo Koski
8 *
9 */
10 public class Relaatio {
11
12 private int id; // relaation oma id
13 private static int nextId;
14 private int lkm;
15
16 private int harjId; // harjoituksen id
17 private int[] relaatioTaulu;
18
19 /* MUODOSTAJAT JA REKISTERÖINTI */
20 /**
21 * Muodostaja.
22 * Kutsuu muodostajaa, joka tekee 5-kokoisen taulukon.
23 * harjId yksilöi relaation harjoitukseen.
24 * @param harjId
25 */
26 public Relaatio(int harjId) {
27 this(5, harjId);
28 }
29 /**
30 * Muodostaja, joka tekee int-kokoisen taulukon.
31 * harjId yksilöi relaation harjoitukseen.
32 * @param koko
33 * @param harjId
34 */
35 public Relaatio(int koko, int harjId) {
36 relaatioTaulu = new int[koko];
37 this.harjId = harjId;
38 rekisteroi();
39 }
40 /**
41 * Rekisteröidään relaatiolle id-numero.
42 * Vrt. luentoesimerkit
43 * @return id
44 */
45 private int rekisteroi() {
46 this.id = nextId;
47 nextId++;
48 return id;
49 }
50
51 /* GETTERIT */
52 /**
53 * @return harjoituksen ID
54 */
55 public int getHarjId() {
56 return harjId;
57 }
58 /**
59 * @param id
60 */
61 public void setHarjId(int id) {
62 this.harjId = id;
63 }
64 /**
65 * Luodaan uusi relaatioTaulu ilman nollia lopussa.
66 * @return uusiRelaatioTaulu
67 */
68 public int[] getHarjSisallot() {
69 int[] uusiRelaatioTaulu = new int[lkm];
70 for (int i=0;i<lkm;i++) {
71 uusiRelaatioTaulu[i] = relaatioTaulu[i];
72 }
73 return uusiRelaatioTaulu;
74 }
75
76 /* LISÄÄMINEN, SUURENTAMINEN JA POISTAMINEN */
77 /**
78 * Lisätään taulukkoon sisällön id.
79 * @param id sisällön yksilöivä tunnus
80 */
81 public void lisaa(int id) {
82 if (relaatioTaulu.length <= lkm)
83 suurenna();
84 relaatioTaulu[lkm++] = id;
85 }
86 /**
87 * Kasvattaa taulukkoa viidellä.
88 */
89 public void suurenna() {
90 int[] temp = relaatioTaulu;
91 relaatioTaulu = new int[lkm + 5];
92 this.lkm = 0;
93 for(int i: temp)
94 lisaa(i);
95 }
96 /**
97 * Poistetaan parametrina tuotava sisältö.
98 * @param poistettava
99 */
100 public void poista(Sisalto poistettava) {
101 for (int i=0;i<lkm;i++) {
102 if (poistettava.equals(relaatioTaulu[i]))
103 poista(i--);
104 }
105 }
106 /**
107 * Poistetaan int-parametrina tuotavasta kohdasta alkio.
108 * @param poistettava
109 */
110 public void poista(int poistettava) {
111 for(int j=poistettava;j<lkm-1;j++) {
112 relaatioTaulu[j] = relaatioTaulu[j+1];
113 }
114 relaatioTaulu[lkm-1] = 0;
115 lkm--;
116 }
117 /**
118 * @param sisallonId
119 */
120 public void poistaSisalto(int sisallonId) {
121 for (int i=0;i<lkm;i++) {
122 if(relaatioTaulu[i]==sisallonId) {
123 poista(i);
124 break;
125 }
126 }
127 }
128
129 /* TULOSTAMINEN JA TOSTRING */
130 /**
131 * Tulostamismetodi.
132 * Tulostaa parametrina tuotuun PrintStreamiin.
133 * @param os
134 */
135 public void tulosta(PrintStream os) {
136 String erotin = "";
137 for(int i=0;i<lkm;i++) {
138 os.print(erotin + relaatioTaulu[i]);
139 erotin = ", ";
140 }
141 System.out.println("\n");
142 }
143 /**
144 * toString-metodi lisää taulukon sisällön temp-stringgiin.
145 * @return temp
146 */
147 @Override
148 public String toString() {
149 String temp = "";
150 String erotin = "";
151 for(int i=0;i<lkm;i++) {
152 temp += (erotin + relaatioTaulu[i]);
153 erotin = ",";
154 }
155 return temp;
156 }
157
158 /* PÄÄOHJELMA */
159 /**
160 * Pääohjelma luokan testaamiseen.
161 * @param args
162 * @example
163 * <pre name="test">
164 * Relaatio r = new Relaatio(1);
165 * String tulos = "1, 1, 1, 1";
166 * String tulos2 = "1, 1, 1, 1, 1, 2, 3";
167 * String tulos3 = "1, 1, 1, 1, 1, 3";
168 * r.lisaa(1);
169 * r.lisaa(1);
170 * r.lisaa(1);
171 * r.lisaa(1);
172 * r.toString() === tulos;
173 * r.lisaa(1);
174 * r.lisaa(2);
175 * r.lisaa(3);
176 * r.toString() === tulos2;
177 * r.poista(5);
178 * r.toString() === tulos3;
179 * </pre>
180 */
181 public static void main(String[] args) {
182 Relaatio r = new Relaatio(1);
183 r.lisaa(1);
184 r.lisaa(4);
185 r.lisaa(41);
186 r.tulosta(System.out);
187 r.lisaa(61);
188 r.lisaa(1);
189 r.lisaa(3);
190 r.tulosta(System.out);
191 }
192 }
193