Ohjelmointi 2 / 2011
jono="kissa" k="aik" -> on, k="aiks" -> ei ole
"C:\mytemp\ohj2\vesal\Koe.java" ->
indeksi "osoittamaan" viimeiseen '\'-merkkiin,
eli jonon \Koe.java:n alkuun.
jono="kissa" k="ibm" -> on , k="pc" -> ei ole
(vastaus: on. Huomaa jokerimerkki, välilyönnit, sekä isot ja pienet kirjaimet)
merkkejä "a-j" tai "r-w" ("a-j" == "abcdefghij")
(vastaus: 2*a + 2*i +5*s + 1*t + 4*u = 14)
String s="Kissa istuu";
s = tuhoa_lopusta(s,3); // => s = "Kissa is"
StringBuilder sb = new StringBuilder("Kissa istuu");
tuhoa_lopusta(sb,3); // => sb= "Kissa is"
/* tonitiet.c */
/* Malli tietueesta tietueessa
#include <stdio.h>
typedef struct {
double pituus; /* hyppyjen pituudet metreinä */
double tuomarit[5]; /* tuomaripisteet */
double pisteet; /* Yhteistulos */
} Kierros_tyyppi;
typedef struct {
Kierros_tyyppi kierros[2];
double lopputulos;
} Tulos_tyyppi;
typedef struct {
char nimi[8];
int nro;
Tulos_tyyppi tulos;
} Kilpailija_tyyppi;
int main(void)
{
Kilpailija_tyyppi toni,matti;
/* Halutaan tehdä sijoitukset:
toni: nimi <- "Toni N"
nro <- 3
1. kierroksen pituus <- 107
2. kierroksen tuomareiden pisteet <-
19,18,19.5,18,20
matti: nimi <- "Matti H"
nro <- 7
2. kierroksen pituus <- 109
1. kierroksen pisteet <- 125
Lopputulos <- 251
Esimerkki:
toni.tulos.kierros[0].pituus = 107;
*/
...
return 0;
}
Etenemisjärjestys:
0. Luokkiin Astia, GraafinenAstia ei tarvitse tehdä muutoksia.
1. Vaihda AstiaPelin sisäisen astiat[] -taulukon tilalle
ArrayList<Astia> astiat;
2. Kokeile ja aja ilman muita muutoksia.
3. Luo uusi Swing Frame nimelle GraafinenAstiaPeli
4. Yritä tehdä käyttöliittymästä mallin kaltainen, ilman astioita.
5. Lisää yksi paneli nimelle panelAstiat ja laita siihen
vaakasuuntainen BoxLayout
6. Laita GraafinenAstiaPeli-luokan main-metodiin
frame.setVisible(true);
edelle koodi:
AstiaPeli peli = new AstiaPeli();
peli.lisaaAstia("8", 8);
peli.lisaaAstia("5", 5);
frame.alustaAstiat(peli);
7. Lisää vielä alla olevat metodit luokkaan.
private void alustaAstiat(AstiaPeli peli) {
this.peli = peli;
maxSize = peli.astioidenSumma();
for (int i = 0; i < peli.getLkm(); i++) {
Astia astia = peli.anna(i);
lisaaAstia(astia);
}
}
// alustavasti:
private void lisaaAstia(Astia astia) {
GraafinenAstia gastia = new GraafinenAstia();
gastia.setMaxSize(maxSize);
gastia.setAstia(astia);
panelAstiat.add(gastia);
gastia.addAstiaClickedListener(new AstiaClickedListener() {
@Override
public void clicked(GraafinenAstia gastia) {
astiaKlikattu(gastia);
}
});
}
8. Itsellesi tehtäväksi jää siis oikeastaan vain metodi
astiaKlikattu ja lisätä astioidenSumma() AstiaPeli-luokkaan.
Tämä laskee kaikkien muidne astioiden yhteiskoon paitsi ämpärin.
Tämän tiedon perusteella osataan astiat piirtää suhteessa oikean
kokoisiksi. Malliesimerkissä summa on siis 13.
addMaaraMuuttuuListener
public static void main(String[] args) {
Esiintymat esiintymat = new Esiintymat(1,13);
// laskee lukujen 1-13 esiintymiä
esiintymat.lisaa(0); // ei vaikuta, koska 0 ei ole välillä [1,13]
esiintymat.lisaa(1); //
esiintymat.lisaa(8); // lisää yhden esiintymän luvun 8 kohdalle.
esiintymat.lisaa(5); // lisää yhden esiintymän luvun 5 kohdalle.
esiintymat.lisaa(13); //
System.out.println(esiintymat.loydetyt()); // 1 5 8 13
System.out.println(esiintymat.ei_loydetyt());// 2 3 4 6 7 9 10 11 12
int loydettyja = esiintymat.getLoydettyja();
System.out.println("Loydettyja on " + loydettyja);// Löydettyjä on 4
}
3 (0+0+3) 5 (0+5+0) 8 (0+5+3) 9 (9+0+0) 12 (9+0+3) 14 (9+5+0) 17 (9+5+3)