Vastaa tehtävät 1, 2, 3 ja 4 erillisille konsepteille. Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, nimi, nimikirjoitus ja opiskelijanumero. Vastaukset palautetaan tehtäväkohtaisiin pinoihin. Vaikka jättäisit johonkin tehtävään vastaamatta, tulee vastauspaperi siinäkin tapauksessa palauttaa.
Answer questions 1, 2, 3 and 4 on to separate sheets. On each sheet write the name of the course, date, your name, your signature and student number. Answers to each question are returned on separate stacks. You have to return a answer sheet for each question with your details, even if you didn't answer to all questions.
Lyhennä metodien nimiä nopeuttaaksesi kirjoittamista: System.out.println();
→ S.o.p();
You can shorten method names for faster writing: System.out.println();
→ S.o.p();
Tule HETI koetilaisuuden jälkeen luokkaan B221 tekemään viimeinen laskarikerroin.
Come right after the paper exam to the class B221 for the final machine examination.
Laivalla on attribuutteina nimi, vesillelaskuvuosi, sekä maksiminopeus. Nopeus ilmaistaan solmuina. Laivan nopeus on maksimissaan konstruktorissa annettu arvo, eikä se voi olla negatiivinen. Suunta ilmaistaan astelukuna väliltä 0 ja 359.
Ship has attributes name
, launch year
and maximum speed
. The speed is displayed as knots. Speed of the ship is at maximum the value given in the constructor, and it's speed cannot be negative. The direction of the ship is displayed as degrees between 0 and 359.
lisaaVauhtia()
vahennaVauhtia()
styyrpuuriin()
paarpuuriin()
increaseSpeed()
decreaseSpeed()
starboard()
port()
Toteuta luokka Laiva ja yllä olevat metodit. Toteuta luokalle Laiva myös metodi toString()
, joka palauttaa laivan-olion tilan merkkijonona. Laiva-luokan pitäisi toimia seuraavassa esimerkkiohjelmassa. (Älä kopioi esimerkkiohjelmaa vastauspaperiin!)
Implement class Ship and the methods above. Implement also method toString()
, which returns a String representation of the ship-object. Ship class should work in the following example. (Do not copy the example to your answersheet!)
import java.util.Scanner;
public class Varustamo {
public static Scanner lukija = new Scanner(System.in);
public static void main(String[] komentoriviParametrit) {
System.out.print("Anna laivan nimi: ");
String nimi = lukija.nextLine();
System.out.print("Anna laivan maksiminopeus: ");
int maksiminopeus = lukija.nextInt();
System.out.print("Anna laivan vesillelaskuvuosi: ");
int vesillelaskuvuosi = lukija.nextInt();
System.out.println();
Laiva gigantic = new Laiva(nimi, maksiminopeus, vesillelaskuvuosi);
gigantic.vahennaVauhtia();
System.out.println(gigantic);
for (int i = 0; i < maksiminopeus + 5; i++) {
gigantic.lisaaVauhtia();
}
gigantic.vahennaVauhtia();
for (int i = 0; i < 5; i++) {
gigantic.styyrpuuriin();
}
System.out.println(gigantic);
for (int i = 0; i < 10; i++) {
gigantic.paarpuuriin();
}
System.out.println(gigantic);
}
}
import java.util.Scanner;
public class ShipOwner {
public static Scanner reader = new Scanner(System.in);
public static void main(String[] args) {
System.out.print("Enter the name for the ship: ");
String name = reader.nextLine();
System.out.print("Enter the maximum speed for the ship: ");
int maxSpeed = reader.nextInt();
System.out.print("Enter the launch year for the ship: ");
int launchYear = reader.nextInt();
System.out.println();
Ship gigantic = new Ship(name, maxSpeed, launchYear);
gigantic.decreaseSpeed();
System.out.println(gigantic);
for (int i = 0; i < maxSpeed + 5; i++) {
gigantic.increaseSpeed();
}
gigantic.decreaseSpeed();
for (int i = 0; i < 5; i++) {
gigantic.starboard();
}
System.out.println(gigantic);
for (int i = 0; i < 10; i++) {
gigantic.port();
}
System.out.println(gigantic);
}
}
Ohjelman tulostuksen pitäisi olla esimerkkisyötteillä suunnilleen seuraava.
The output of the program with the above example should be as follows.
Anna laivan nimi: Britannic
Anna laivan maksiminopeus: 22
Anna laivan vesillelaskuvuosi: 1914
Laiva: Britannic (1914)
Nopeus: 0 solmua
Suunta: 0 astetta
Laiva: Britannic (1914)
Nopeus: 21 solmua
Suunta: 5 astetta
Laiva: Britannic (1914)
Nopeus: 21 solmua
Suunta: 355 astetta
Enter the name for the ship: Britannic
Enter the maximum speed for the ship: 22
Enter the launch year for the ship: 1914
Ship: Britannic (1914)
Speed: 0 knots
Direction: 0 degrees
Ship: Britannic (1914)
Speed: 21 knots
Direction: 5 degrees
Ship: Britannic (1914)
Speed: 21 knots
Direction: 355 degrees
Tietojenkäsittelytieteen laitoksella on käytössä magneettiavaimet, joilla laitokselle pääsee sisälle myös aukioloaikojen ulkopuolella. Toteutetaan kulunvalvontajärjestelmä. Käytössämme on valmiiksi toteutettu luokka Kulkukortti, jota ei siis tarvitse toteuttaa. Kulkukortti saa konstruktorissaan parametrina omistajan nimen.
Computer Science Department gives it's employees magnet keys, that allow entrance to the department even outside opening hours. Let's implement an access control system. We have an existing class called MagnetKey, which we do not have to implement. Class MagnetKey gets the owner as a parameter in it's constructor.
public Kulkukortti(String omistaja)
public MagnetKey(String owner)
Kulkukortti-luokalla on olemassa myös seuraavat metodit.
MagnetKey-class has the following methods.
public void asetaAika(int paiva, int kuukausi, int vuosi)
public int annaPaiva()
- Palauttaa viimeisen voimassaolopäivän
public int annaKuukausi()
public int annaVuosi()
public String toString()
public void setTime(int day, int month, int year)
public int getDay()
public int getMonth()
public int getYear()
public String toString()
Jokaisella kulunvalvontalaitteella on sijainti. Sijanti voi olla esimerkiksi "Luokka B222" tai "Huone A242". Kulunvalvontalaitteet saavat myös konstruktorissaan parametreina tämän päivän (2.3.2010). Tällä kertaa ei tarvitse toteuttaa Päivämäärä-luokkaa! Kulunvalvontalaite tarjoaa myös metodin onkoKulkulupaa
, jolle annetaan parametrina Kulkukortti-olio. Metodi onkoKulkulupaa
vertaa kulunvalvontalaitteen päivämäärää Kulkukortin viimeiseen voimassaolopäivämäärään, ja palauttaa tiedon pääsystä.
Each access control machine has a location. A location may be for example "Class B222" or "Room A242". Access control machines get also the current day (2.3.2010) as parameters in the constructor. This time you don't have to implement a Date-class! Access control machine has also a method hasAccess
, that gets a MagnetKey-object as a parameter. The method hasAccess
compares the date on the access control machine to the MagnetKey-object's expiration date, and returns information on whether the access was granted.
Toteuta luokka Kulunvalvontalaite.
Implement Access control machine (class AccessControlMachine
).
HUOM! Kulunvalvontalaitteessa ei saa olla yhtään tulostuskäskyä (System.out.println()
)
NOTE! The class AccessControlMachine must not contain any print commands (System.out.println()
)
Luo pääohjelma Kulunvalvontaa jossa
mK
ja aK
)aK
on vanhentunut, aseta sen viimeiseksi voimassaoloajaksi 26.2.2010mK
on vielä voimassa, aseta sen viimeiseksi voimassaoloajaksi 31.5.2010mK
-kulkukortilla yritetään luokkaan B222 ja tulostetaan tieto onnistuiko pääsy vai eiaK
-kulkukortilla yritetään huoneeseen A242 ja tulostetaan tieto onnistuiko pääsy vai eiCreate main-program AccessControl, where
mK
and aK
)aK
has been expired, set it's expiration date as 26.2.2010mK
is still valid, set it's expiration date as 31.5.2010mK
-magnet key is used to gain access to Class B222, and information on whether access was granted or denied is printedaK
-magnet key is used to gain access to Room A242, and information on whether access was granted or denied is printedUseiden urheilulajien pistelaskussa (mm. Uimahyppy) lasketaan pistetulokseksi pisteiden keskiarvo siten, että paras ja huonoin tulos jätetään pois. Toteutetaan yleiskäyttöinen pistelaskuri. Pistelaskuri saa konstruktorin parametrina kirjattavien pisteiden lukumäärän. Pistelaskurimme kirjaa pisteitä vain kokonaislukuina (keskiarvo voi tietysti olla liukuluku!).
Scoring for several sports (for example Diving) is counted as an average from the scores so that the best and worst score is left out. Let us implement a generic scoreboard. The scoreboard receives the number of scores it will contain as a parameter for it constructor, and it will contain an integer array for the scores (average can of course be a double!).
Pistelaskuri tarvitsee konstruktorin lisäksi seuraavat kolme metodia.
In addition to constructor, the scoreboard needs the three following methods.
void lisaaPiste(int piste)
int[] annaPisteet()
double annaTulos()
void addPoint(int point)
int[] givePoints()
double giveScore()
Toteuta luokka Pistelaskuri
Implement class Scoreboard
HUOM! Pistelaskurin pitää varautua tilanteeseen, jossa tulos halutaan ennen kuin pistetaulukko on täyttynyt. Tässä tehtävässä ei tarvitse toteuttaa pääohjelmaa.
NOTE! Scoreboard has to be able to work in a situation, where the score is required even before the score array is full (i.e. all points have been entered). You don't have to implement the main-program for this task.
Mitä ovat Javassa alkeis- ja viittaustyyppiset muuttujat? Miten ne eroavat toisistaan, kun niitä käytetään metodien parametreina ja paluuarvoina? Selitä tekstin ja/tai koodiesimerkkien avulla. Koodiesimerkeissä riittää oleellinen toteutus (ei siis koko luokkaa). Pituus maksimissaan 1 sivu.
What are primitive and reference types in Java? How do they differ from each others when they are used as method parameters and return values? Explain with text and/or code examples. In code examples it is enough to display the important parts (not the whole class). Length max one page.