Löytyiskö jeesiä tollolle akalle javan tehtäviin?

Tollo_opiskelija

Heips,

kun ei vaan tajua, niin ei tajua. Voisko joku helppiä edes alkuun tässä? En vaan tajua, miten teen tuon kokemuksen ja soiton...

""Tehtävä

Osa 1 / 2: Muusikko

Ohjelmoi ensin luokka Muusikko. Luokan pitää toimia seuraavasti:

public static void main(String[] args) {
Muusikko matti = new Muusikko("Matti", "Tuuba");
System.out.println(matti);
System.out.println(matti.kokemus());

matti.soita();
System.out.println(matti.kokemus());
System.out.println(matti);

matti.soita();
matti.soita();
matti.soita();
matti.soita();
System.out.println(matti);
}

Tulostuu:

Matti, soitin: Tuuba. Kokemus: 0
0
1
Matti, soitin: Tuuba. Kokemus: 1
Matti, soitin: Tuuba. Kokemus: 5


Luokalle pitää siis tehdä nimen ja soittimen asettavan konstruktorin
lisäksi yllä esiintyneet metodit. Kokemus tulee esittää
kokonaislukuna. "

Tämmöstä räpistelin, mutta ihan metsäänhän se menee.


public class Muusikko {

private String nimi;
private String soitin;
private int kokemus;




public Muusikko(String nimi, String soitin) {
this.nimi = nimi;
this.soitin = soitin;
this.kokemus = 0;
}



public int soita() {
int i = 0;
i ;
return i;

}

public void Kokemus() {
this.kokemus ;
}
}


Anyone?

8

3291

    Vastaukset 8

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Kokemus karttuu soittaessa.
      Tuo sinun soita()-metodisi luo nyt lokaalin muuttujan i ja kasvattaa sen aina ykköseen. Sinun täytyy kasvattaa this.kokemus:ta siellä (eikä tarvitse palauttaa mitään).
      Metodin kokemus() pitää palauttaa kokemus, eikä kasvattaa sitä.

      Luo lisäksi toString() -metodi, joka palauttaa halutun stringin "Matti, soitin: Tuuba. Kokemus: 1", jossa tietenkin oikeat muuttujat (nimi, soitin, kokemus) on laitettu oikeille paikoilleen.

      • Tollo_opiskelija

        Kiitos tuhannesti! Onnistui! :)

        Yritän saada tehtävän toisen osan pähkäiltyä, mutta ehkä joudun huhuilemaan siihenkin lopulta apuja...


    • Tollo_opiskelija

      Ei nyt kertakaikkiaan leikkaa vaikka mitä yritän kokeilla muiden samankaltaisten tehtävien vastauksista. Jos vielä löytäis jeesiä tähän...

      Eli toinen osa tehtävää

      " Osa 2 / 2:

      Ohjelmoi luokka Orkesteri. Orkesteriolio voi sisältää mielivaltaisen
      määrän Muusikko-olioita. Seuraava esimerkki näyttää Orkesteriluokalle
      ohjelmoitavan toiminnallisuuden.

      public static void main(String[] args) {
      Muusikko matti = new Muusikko("Matti", "Tuuba");
      Muusikko teppo = new Muusikko("Teppo", "Banjo");

      Orkesteri orkesteri = new Orkesteri();
      orkesteri.lisaaMuusikko(matti);
      orkesteri.lisaaMuusikko(teppo);

      System.out.println(orkesteri);

      orkesteri.soita();

      System.out.println();
      System.out.println(orkesteri);

      matti.soita();

      System.out.println();
      System.out.println(orkesteri);

      Muusikko madonna = new Muusikko("Madonna", "Piano");
      orkesteri.lisaaMuusikko(madonna);
      orkesteri.soita();

      System.out.println();
      System.out.println(orkesteri);
      }

      Tulostuu:

      Orkesteri (soittokertoja 0, jäsenten kokemuksen keskiarvo: 0.0)
      Matti, soitin: Tuuba. Kokemus: 0
      Teppo, soitin: Banjo. Kokemus: 0

      Orkesteri (soittokertoja 1, jäsenten kokemuksen keskiarvo: 1.0)
      Matti, soitin: Tuuba. Kokemus: 1
      Teppo, soitin: Banjo. Kokemus: 1

      Orkesteri (soittokertoja 1, jäsenten kokemuksen keskiarvo: 1.5)
      Matti, soitin: Tuuba. Kokemus: 2
      Teppo, soitin: Banjo. Kokemus: 1

      Orkesteri (soittokertoja 2, jäsenten kokemuksen keskiarvo: 2.0)
      Matti, soitin: Tuuba. Kokemus: 3
      Teppo, soitin: Banjo. Kokemus: 2
      Madonna, soitin: Piano. Kokemus: 1 "

      Yritin kaikennäköistä, mutta mikään ei onnistu. Enkä oikein hiffaa, että pitääkö tuo lista sotkea tähän vai mitä. Herjaa add-kohtaa, vaikka miten sitä muuttelisin.

      Tässä koodin räpellystä:

      import java.util.ArrayList;

      public class Orkesteri {

      private ArrayList<Orkesteri> orkesteri;


      public Orkesteri() {

      this.orkesteri = new ArrayList<>();

      }

      public void lisaaMuusikko(Muusikko muusikko) {
      this.orkesteri.add(muusikko);
      }

      }

      Toinen lisäysyritys meni näin:

      public void lisaaMuusikko(String nimi, String soitin) {
      this.orkesteri.add(new Muusikko(nimi, soitin));

      • Käytä orkesteri:n templettinä (tai miksi tuota nyt kutsuttiin) <Muusikko>, koska niitähän se sisältää.

        Tarvitset orkesterille toString() -metodin (katso mitä kaikkea siihen tarvitsee, orkesterin tiedot tieto kaikista muusikoista (käy ne loopilla läpi ja lisää palautettavaan stringiin), tuota kokemuksen keskiarvoa varten kannattaa ehkä tehdä oma privaatti metodinsa, jolla sen saa).

        Orkestin soita() -metodissa jokaisen muusikon pitäisi soittaa (vinkki: for-loop). Lisäksi tarvitset oman soittokerta-muuttujan Orkesteri-luokkaan, jota sitten tässä metodissa kasvatat. (Muusikon kokemushan on yhtä suuri kuin hänen soittokertansa, mutta orkesterilla on myös oma soittokerta-laskurinsa, vaikka se voi soittaa eri kokoonpanoilla, niin se on aina se tietty yksi orkesteri-objekti.)


      • Samansuuntainenratkaisu

        Tässä ratkaisu Pascal ohjelmointikielellä :

        program alkeisorkesteri;
        {$mode objfpc}{$H }
        uses
        sysutils, classes;
        type

        { muusikko }

        muusikko = class
        private
        nimi,soitin:string;
        kokemusta:integer;
        public
        constructor Create(a_name, a_instrument:string);
        procedure soita;
        function kokemus:integer;
        function toString:string;
        destructor Destroy; override;
        end;

        { muusikko }

        constructor muusikko.Create(a_name, a_instrument: string);
        begin
        nimi := a_name;
        soitin := a_instrument;
        kokemusta := 0;
        end;

        procedure muusikko.soita;
        begin
        inc(kokemusta);
        end;

        function muusikko.kokemus: integer;
        begin
        result := kokemusta;
        end;

        function muusikko.toString: string;
        var
        s :string;
        begin
        s := IntToStr(kokemusta);
        result := nimi ', soitin: ' soitin '. Kokemus: ' s;
        end;

        destructor muusikko.Destroy;
        begin
        inherited Destroy;
        end;

        type

        { orkesteri }

        Torkesteri = class
        private
        muusikot : TList;
        soittoja:integer;
        public
        constructor Create;
        procedure lisaaMuusikko(a_muusikko:muusikko);
        procedure soita;
        function toString:string;
        destructor Destroy; override;
        end;

        { Torkesteri }

        constructor Torkesteri.Create;
        begin
        muusikot:=TList.Create;
        soittoja := 0;
        end;

        procedure Torkesteri.lisaaMuusikko(a_muusikko: muusikko);
        begin
        muusikot.Add(a_muusikko);
        end;

        procedure Torkesteri.soita;
        var
        i:integer;
        begin
        inc(soittoja);
        for i:= 0 to muusikot.Count-1 do
        begin
        muusikko(muusikot[i]).soita;
        end;
        end;

        function Torkesteri.toString: string;
        var
        s1, s2:string;
        i,kertoja:integer;
        begin
        kertoja:=0;
        s2:='';
        s1 :='Orkesteri(soittokertoja ' IntToStr(soittoja) ', jäsenten kokemusten keskiarvo: ';
        for i:= 0 to muusikot.Count-1 do
        begin
        s2 :=s2 muusikko(muusikot[i]).toString LineEnding;
        kertoja := kertoja muusikko(muusikot[i]).kokemus;
        end;
        s1 := s1 floatToStr(kertoja / muusikot.Count) ')';
        result := S1 LineEnding S2;
        end;

        destructor Torkesteri.Destroy;
        begin
        muusikot.Free;
        inherited Destroy;
        end;

        var
        matti,teppo,madonna : muusikko;
        orkesteri:Torkesteri;

        begin // pääohjelma alkaa
        matti := muusikko.Create('Matti','Tuuba');
        teppo := muusikko.Create('Teppo','Banjo');
        orkesteri:=Torkesteri.Create;
        orkesteri.lisaaMuusikko(matti);
        orkesteri.lisaaMuusikko(teppo);
        writeln( orkesteri.toString );
        orkesteri.soita;
        writeln( orkesteri.toString );
        matti.soita;
        writeln( orkesteri.toString );
        madonna := muusikko.Create('Madonna', 'Piano');
        orkesteri.lisaaMuusikko(madonna);
        orkesteri.soita;
        writeln( orkesteri.toString );
        writeln('paina jotain näppäintä' );
        orkesteri.free;
        madonna.free;
        teppo.free;
        matti.free;
        readln;
        end.


    • Anonyymi

      Olet väärällä alalla, ainakin jos koodaamista ajattelit. Nämä perusjutut tulee osata jo amkin / yliopiston alussa, jos meinaa työllistyä. Et koskaan tule pärjäämään tuolla osaamistasolla, koska muilla saattaa olla kymmenien vuosien etumatka harrastustaustan takia.

      • Anonyymi

        Olen nähnyt MIT:n purkkakoodia ja täytyy todeta että joskus asioita ymmärtämättömien aloittelijoiden lähestymistapa ongelmiin on vaan parempi. Esimerkkinä Torvalds vs Tanenbaum.

        Myös yliopistoissa varsinkin tietojenkäsittelytieteessä opetetaan usein hutiloiden ja "väärin".
        Esimerkiksi tämän aloituksen tapaus on malliesimerkki siitä miten ohjelmointia ei tule opettaa.

        Javassa luokka eli class on aina ohjelma. Jar paketissa voi olla vaikka tuhat luokkaa mutta JRE alkaa suorittaa ohjelmaa siitä luokasta jossa on public static void main. Nämä nettikurssilaiset eivät ensinnäkään tiedä mikä on JRE ja miksi se on olemassa. Luokka eli class on melko vaikea asia hahmottaa ja siten ymmärtää ellei osaa ohjelmoida C kielellä ja ymmärrä täysin mitä tarkoittaa struct. Luokat ja olio-ohjelmointi lähti leviämään maailmalle C kielen myötä, joka on C kielen laajennos ja nimenomaan structin laajennos. Javan syntaksi on lähes sama kuin C kielen ja luokat perustuvat C luokkiin, jotka siis perustuvat C kielen structiin. Minä en usko että Javan tai C käsitettä "luokka" voi kunnolla ymmärtää ellei ensin ymmärrä C kielen käsitettä "struct".

        Ohjelmointi pitää aloittaa C kielestä koska vain sen avulla on mahdollista ymmärtää datatyypit, I/O, muisti, järjestelmäkutsut ja kirjastot. Kun C kielellä kirjoitetaan se ensimmäinen Hello world niin siinä linkitetään mukaan stdio.h jossa printf on määritelty. Jos käy lukaisemassa stdio.h niin se määritys on jotakuin
        int printf(const char *, ...);
        ja tuolla voi korvata stdio.h linkittämisen vaikkapa opetusmielessä.
        Silloin moni miettii ja kysyy että missä tuo printf funktio on kirjoitettuna että voi katsoa miten se toimii. Silloin paljastetaan että se löytyy libc järjestelmäkirjastosta konekielisenä, josta käyttöjärjestelmä sitä kutsuu kun siinä Hello world ohjelmassa tulee sen aika.
        Linux-ympäristössä glibc kirjasto toteuttaa Linux-ytimen järjestelmäkutsut.
        Kun me käännämme sen hello.c lähdekoodin binääriksi ja suoritamme sen, sieltä löytyy konekielinen järjestelmä kutsu. Assemblyssä se näkyy koodina "call puts" ja tämä on viesti käyttöjärjestelmälle että nyt tarvitaan libc avuksi että saadaan tekstiä tulostettua. Se meidän hello.c koodi ei tee muuta kuin pitää sisällään merkkijonon ja lähettää käyttöjärjestelmälle kutsun että nyt pitäisi tämä tulostaa standard outputiin.

        Kaikkeen tähän liittyy olennaisesti datatyypit char, int, short, long, double jne. Jos ei niitä ymmärrä niin ei ymmärrä struct tyyppiäkään, joka on yleensä kokoelma vähän kaikkea. C kielessä yksinkertainen esimerkki on piste koodrinaatistolla.
        struct piste {
        int x;
        int y;
        };
        joihin voi sitten tallentaa dataa
        piste.x = 5;
        piste.y = 7;
        ja niin edelleen. Muuttuja "piste" pitää nyt sisällään kaksi int arvoa mutta ei ole näiden kahden summa eikä tulo. Ei ole mikään yksinkertainen asia varsinkaan jos ei ymmärrä datatyypeistä mitään.

        Näillä yliopistojen nettikursseilla opetetaan ihan vaan perus I/O ja sitten mennäänkin jo structin kaltaisiin datatyyppeihin ja luokkiin, joita pitää sitten osata muutaman esimerkin avulla käsitellä kokonaisvaltaisesti. Se on vähän kuten opettaisi vaihtamaan moottoriin sytytystulpat ja öljyt, sitten mennääkin jo laakerien, männänrenkaiden ja venttiilien vaihtoon. No okei sopiihan se myös aloittelijalle jos kädestä kiinni pidetään, tiettyyn pisteeseen asti.

        Mutta jos haluaa oppia ohjelmoimaan niin on opeteltava ensin proseduaalinen ohjelmointikieli kuten C, datatyypit, Ihan/Oikea I/O, muisti, tietueet ja kaikki se lysti ennen kun voi itsevarmasti siirtyä luokkiin. Javasta toisaalta puuttuu metodien ja operaattorien overloading ja pointerit eli kaipa se suositeltava järjestys olisi C sitten Java sitten vasta C . Muuten tulee nopeasti seinät vastaan. C kielen opetteluunkin saattaa muutama kuukausi vierähtää, eli kyllä jos ihan nollasta aloittaa niin Javan ymmärtäminen on parin vuoden prosessi, ainakin jos otetaan käyttöliittymät kuten JavaFX ja Swing mukaan. Nämä pitäisi sitten vielä osata integroida websivustolle.


    • Anonyymi

      Jos aikoo työllistyä alalle, niin suosittelen opettelemaan Cobolin. Suurin osa sen taitajista on jo eläkeukkoja. Merkittävä osa järjestelmistä pyörii edelleen Cobolilla kirjoitettujen softien varassa.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. 124
      1425
    2. Costa Rica on tympeän makuinen kahvi

      Ostin kahvin hinnan romahduksen kunniaksi Costa Rican "Premium Blendiä". Piti olla sataprosenttista arabialaista. No ain
      Maailman menoa
      101
      1364
    3. Hei, voitko kuunnella

      Voisitko auttaa minua selvittämään asioita? En halua ajaa sinua hulluuteen kanssani, en sitoa sinua, en esittää vaatimu
      Ikävä
      149
      1325
    4. Joku porukka lähtenyt täältä

      Ihmeen hiljainen on palsta nyt. Yleensä tänne tulvii aloituksia yms, mutta nyt on kyllä erikoisen hiljaista.
      Ikävä
      246
      1208
    5. Se kun olit pitkästä aikaa silmieni edessä

      Oli kyllä sykähdyttävää. Tiedätkö, mikä laittaa minut ikävöimään sinua? Kun palautan mieleeni valtavan ihanan olemuksen,
      Ikävä
      57
      1066
    6. 71
      1034
    7. Vieläkään ei voi opiskella kursseja korkeakoulussa?

      Vaikka lakiin tehty muutos hän ei saanut opiskella työttömyystuella. https://yle.fi/a/74-20244925
      Työttömyys
      18
      1024
    8. Tuletko tänään

      Jos soitan? Niin... tuletko?🖤
      Ikävä
      83
      901
    9. Onkin niin, että olet hulluna minuun

      mutta et uskalla sitä tuoda ilmi. Salaa haaveilet kiihkeästä suhteesta, vaan siihen se jää, ja syyksi esteet ja muut. S
      Ikävä
      42
      740
    10. Mitä on mietteissäsi

      Tänään?
      Ikävä
      66
      724
    11. Mikä on hulluinta?

      Mitä ikäväsi kohde on tehnyt?
      Ikävä
      37
      656
    12. Nyt ei enää ole

      Mitään mikä pitäisi mut hiljaa, kaikesta. Tämä on muutamalle henkilölle täällä.
      Ikävä
      42
      640
    13. En olis uskonu

      et kuulut tollaseen porukkaan
      Ikävä
      101
      607
    14. Hämmentävä hetki: TTK:sta pudonnut Johanna Puhakka lataa pettyneenä: "Sitä ei voi kieltää"

      Johanna Puhakka ja Jurijs Jurza Trosenko tippuivat Tanssii Tähtien Kanssa -kisasta. Suositussa viihdeohjelmassa nähtiin
      Tanssii tähtien kanssa
      15
      598
    15. Taidan luopua

      Sinusta.
      Ikävä
      34
      585
    16. Suolahden ostokeskus

      Kiinteistöyhtiö konkurssissa. Taisi jäädä vastikkeet maksamatta eräällä yrittäjällä.
      Äänekoski
      45
      580
    17. Jälleen näin nainen unta sinusta

      Aika usein tulet uniini, enkä tiedä, mitä se tahtoo minulle sanoa. Tällä kertaa en ollut kotonasi, vaan ulkona jossain t
      Ikävä
      28
      559
    18. En haluaisi sanoa tätä

      Mutta olet sokea sille, mitä sinulla jo on! Jos minä olisin sinä, pyrkisin tekemään kaikkeni kohentaakseni nykyistä pari
      Ikävä
      40
      548
    19. Et taida olla ihan varma

      Päätöksestäsi?
      Ikävä
      65
      528
    20. Meiltä löytyy kyllä älliä

      Vai mitä oot mieltä...
      Ikävä
      92
      515
    Aihe