1   package demo8;
2   
3   /**
4    * Luokkien alut mäkihyppyä varten.  Huom!  jotakin voi vielä puuttua :-)
5    * Poista rivit @SuppressWarnings("unused")
6    * @author Vesa Lappalainen
7    * @version 1.0, 21.02.2003
8    * 
9    * 
10   * Demo 8 teht 1 ja 2
11   * @author Antti Myöhänen
12   * @version 0.1
13   * 
14   */
15  public class Makihyppy {
16  
17      /**
18       * Luokka yhtä mäkihypyn kierrosta varten
19       */
20      public static class Kierros {
21          private final static int TUOMAREITA = 5;
22          private double pituus; // hyppyjen pituudet metreinä
23          private final double tuomarit[] = new double[TUOMAREITA];// tuomaripisteet
24  
25          
26          /**
27           * Kierroksen alustaminen, kaikkia arvot nolliksi.
28           */
29          public Kierros() {
30              this.pituus = 0;
31              for (int i = 0; i < tuomarit.length; i++) {
32                  this.tuomarit[i] = 0;
33              }
34          }
35          
36          /**
37           * Pituuden asettaminen
38           * 
39           * @param pituus
40           */
41          public void setPituus(double pituus) {
42              this.pituus = pituus;
43          }
44          
45          
46          /**
47           * Tuomarin pisteiden asettaminen
48           * 
49           * @param tuomariNro
50           * @param pisteet
51           */
52          public void setTuomari(int tuomariNro, double pisteet) {
53              this.tuomarit[tuomariNro] = pisteet;
54          }
55          
56          /**
57           * Antaa kierroksen tiedot
58           * 
59           * @return  pituuden ja pisteet Stringinä
60           */
61          public String getTiedot() {
62              StringBuilder s = new StringBuilder();
63              s.append("pituus = " + this.pituus + "\n" + "pisteet:" + "\n");
64              
65              for (int i = 0; i < tuomarit.length; i++) {
66                  s = s.append("  Tuomari" + (i+1) + " " + tuomarit[i]);
67              }
68              return s.toString();
69          }
70          
71      }
72  
73      /**
74       * Luokka mäkihypyn yhden kilpailijan tulosta varten.
75       * Sisältää monta kierosta.
76       */
77      public static class Tulos {
78          private final static int KIERROKSIA = 2;
79          private final Kierros kierros[] = new Kierros[KIERROKSIA];
80  
81          
82          /**
83           * Tuloksen alustaminen
84           * 
85           * @param kierrosNro
86           * @param pituus 
87           */
88          public Tulos(int kierrosNro, double pituus) {
89              this.kierros[kierrosNro] = new Kierros();
90          }
91          
92          /**
93           * Kierroksien alustus.
94           * 
95           */
96          public Tulos() {
97              for (int i = 0; i < kierros.length; i++) {
98                  this.kierros[i] = new Kierros();
99              }
100         }
101 
102 
103         /**
104          * Tuomarin pisteiden asettaminen
105          * 
106          * @param kierrosNro
107          * @param tuomariNro
108          * @param pisteet
109          */
110         public void setTuomari(int kierrosNro, int tuomariNro, double pisteet) {
111             this.kierros[kierrosNro].setTuomari(tuomariNro, pisteet);
112         }
113 
114         /**
115          * Pituuden asettaminen
116          * 
117          * @param kierrosNro
118          * @param pituus
119          */
120         public void setPituus(int kierrosNro, double pituus) {
121             this.kierros[kierrosNro].setPituus(pituus);
122             
123         }
124         
125 
126         /**
127          * Palauttaa kierroksien tiedot merkkijonona
128          * 
129          * @return merkkijono jossa tiedot
130          */
131         public String getTiedot() {
132             StringBuilder s = new StringBuilder();
133             
134             for (int i = 0; i < kierros.length; i++) {
135                 s.append("Kierros " + (i+1) + "\n");
136                 s.append(kierros[i].getTiedot());
137                 s.append("\n\n");
138             }
139             
140             return s.toString();
141         }
142         
143     }
144 
145     
146     /**
147      * Luokka yhtä mäkihypyn kilpailijaa varten.
148      * Sisältää mm. tuloksen.
149      */
150     public static class Kilpailija {
151         private String nimi;
152         private int nro;
153         private final Tulos tulos = new Tulos();
154 
155      
156         /**
157          * Kilpailijan alustaminen
158          * 
159          * @param nimi  kilpailijan nimi
160          * @param nro   kilpailijan numero
161          */
162         public Kilpailija(String nimi, int nro) {
163             this.nimi = nimi;
164             this.nro = nro;
165         }
166         
167         /**
168          * Tulostaa kilpailijan tiedot ja tulokset
169          */
170         public void tulosta() {
171             System.out.println(nimi + ", " + nro);
172             System.out.println(this.tulos.getTiedot());
173             
174         }
175         
176         /**
177          * Pituuden asettaminen
178          * 
179          * @param kierrosNro
180          * @param pituus
181          */
182         public void setPituus(int kierrosNro, double pituus) {
183             tulos.setPituus(kierrosNro-1, pituus);
184         }
185         
186         /**
187          * @param kierrosNro
188          * @param tuomariNro
189          * @param pisteet
190          */
191         public void setTuomari(int kierrosNro, int tuomariNro, double pisteet) {
192             this.tulos.setTuomari(kierrosNro-1, tuomariNro-1, pisteet);
193         }
194         
195         
196     }
197 
198     /**
199      * Tyhjä aliohjelma kilpailua varten
200      */
201     public void kisa() {
202         Kilpailija toni = new Kilpailija("Toni",3); 
203         Kilpailija matti = new Kilpailija("Matti",7); 
204         toni.tulosta(); 
205         matti.tulosta(); 
206         
207         toni.setPituus(1,107); 
208         toni.setPituus(2,100); 
209         toni.setTuomari(2,1,19.0); 
210         toni.setTuomari(2,2,18.0); 
211         toni.setTuomari(2,3,19.5); 
212         toni.setTuomari(2,4,18.0); 
213         toni.setTuomari(2,5,20.0); 
214 
215         matti.setPituus(1,125); 
216         matti.setTuomari(1,1,20.0); 
217         matti.setTuomari(1,2,20.0); 
218         matti.setTuomari(1,3,20.0); 
219         matti.setTuomari(1,4,20.0); 
220         matti.setPituus(2,109); 
221         matti.setTuomari(2,1,20.0); 
222         matti.setTuomari(2,2,20.0); 
223         matti.setTuomari(2,3,20.0); 
224         matti.setTuomari(2,4,20.0); 
225         
226         toni.tulosta(); 
227         matti.tulosta(); 
228     }
229 
230     /**
231      * Testataan luokan kääntymistä
232      * @param args ei käytössä
233      */
234     public static void main(String[] args) {
235         Makihyppy kisa = new Makihyppy(); 
236         kisa.kisa();
237     }
238 
239     
240 }
241