java, Exceptions ja NullPointer

/** Ajaa järjestämisohjelman. Ohjelman käyttöliittymä kyselee käyttäjältä järjestettävien kirjojen tiedot. Lopetus kun
syöttää tyhjän merkkijonon tekijanNimen kohdalle.
Tulostaa kirjat järjestyksessä. */



public void aja() {
try {
do {

tekijanNimi = lukija.lueMerkkijono ("Anna kirjailijan nimi: ");
kirjanNimi = lukija.lueMerkkijono ("Anna kirjan nimi: ");
ilmestymisvuosi=lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
sivujenMaara=lukija.lueKokonaisluku ("Anna sivujen määrä: ");

} while (tekijanNimi.length() > 1);


}catch(KelvottomatTeoksenTiedot(virhe)) {
System.out.println("Teoksen
tiedot kelvottomat.");
}

}


______________________________________________

Osaisiko kukaan neuvoa, miksi seuraava virheilmoitus? Lisäksi while-silmukan jatkamis-
ehdossa NullPointerException? Olen kokeillut vaikka mitä.

kosh exercise_2 62 % javac Jarjestamisohjelma.java
Jarjestamisohjelma.java:52: expected
} catch (KelvottomatTeoksenTiedot(virhe)) {
^

Kiitos mahdollisista vastauksista :)
-julia
22831
Äänestä

Muut lukivat myös

Vastaukset 22

Vanhimmat

Rivi:

}catch(KelvottomatTeoksenTiedot(virhe)) {

näyttää hieman omituiselta.. Yleensähän catch-rakenteen syntaksi menee näin:

} catch (Exception ex) {


Catch:n sisältä voi taas sitten heitellä omia exceptineita tyyliin:

throw new SomeOwnException("höpöhöpö");


Toinen juttu, mikä saattaa yskiä: Laita virheilmoteksti "Teoksen tiedot kelvottomat" samalle riville.

Toivottavasti tästä oli teekkarille apua..

Äänestä
  • kiitos avusta :)
    Edellinen virheilmoitus hävisi, mutta tuli uusi
    tilalle.

    kosh exercise_2 112 % javac Jarjestamisohjelma.java

    Jarjestamisohjelma.java:52: unreported exception KelvottomatTeoksenTiedot; must be caught or declared to be thrown
    throw new KelvottomatTeoksenTiedot("höpöhöpö");
    ^
    1 error
    kosh exercise_2 113 %

    Vaikka justhan mä sen virheen catchaan :(
    Auttaisiko vielä joku kiltti.
    _________________________________________________

    try {
    do {

    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    } while (tekijanNimi.length() > 1);

    } catch (Exception ex) {
    throw new KelvottomatTeoksenTiedot("höpöhöpö");
    }

    Äänestä

  • Julia kirjoitti:

    kiitos avusta :)
    Edellinen virheilmoitus hävisi, mutta tuli uusi
    tilalle.

    kosh exercise_2 112 % javac Jarjestamisohjelma.java

    Jarjestamisohjelma.java:52: unreported exception KelvottomatTeoksenTiedot; must be caught or declared to be thrown
    throw new KelvottomatTeoksenTiedot("höpöhöpö");
    ^
    1 error
    kosh exercise_2 113 %

    Vaikka justhan mä sen virheen catchaan :(
    Auttaisiko vielä joku kiltti.
    _________________________________________________

    try {
    do {

    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    } while (tekijanNimi.length() > 1);

    } catch (Exception ex) {
    throw new KelvottomatTeoksenTiedot("höpöhöpö");
    }

    Pääset helpoimmin eteenpäin kun korvaat rivin:

    throw new KelvottomatTeoksenTiedot("höpöhöpö");

    jollain "kevyemmällä" virheenkäsittelyrivillä, esim tällä:

    System.out.println("virhe XX kohdassa XX");

    Tuolla pitäisi päästä eteenpäin.

    Tuo "throw new" -rakenne olisi vaatinut toimiakseen erillisen määrittelyn samalle riville jolla aloitetaan metodi. Esim näin:

    public String jokuMetodi() throws KelvottomatTeoksenTiedot {

    Homman juju on siinä, että mikäli yksittäiset metodit voivat "heittää" virheitä eteenpäin, niin silloin ne voidaan käsitellä keskitetysti yhdessä paikassa. Kun ohjelmiston koko kasvaa, niin tästä toimintatavasta tulee välttämättömyys.

    Äänestä

  • Julia kirjoitti:

    kiitos avusta :)
    Edellinen virheilmoitus hävisi, mutta tuli uusi
    tilalle.

    kosh exercise_2 112 % javac Jarjestamisohjelma.java

    Jarjestamisohjelma.java:52: unreported exception KelvottomatTeoksenTiedot; must be caught or declared to be thrown
    throw new KelvottomatTeoksenTiedot("höpöhöpö");
    ^
    1 error
    kosh exercise_2 113 %

    Vaikka justhan mä sen virheen catchaan :(
    Auttaisiko vielä joku kiltti.
    _________________________________________________

    try {
    do {

    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    } while (tekijanNimi.length() > 1);

    } catch (Exception ex) {
    throw new KelvottomatTeoksenTiedot("höpöhöpö");
    }

    Aikaisempi ongelma hävisi (jotenkin kummasti lopulta), mutta olisi vielä yksi probleema.
    Mitäköhän ohjelman käynnistysmetodiin
    main pitäisi kirjoittaa jotta ohjelma käynnistyisi. Olen ihan pulassa kun huomisiltana
    deadline. Olisin tosi kiitollinen vinkeistä.
    -Julia

    ______________________________________________

    public class Jarjestamisohjelma {

    public Jarjestamisohjelma() {
    this.lukija = lukija;
    this.tekijanNimi = tekijanNimi;
    this.kirjanNimi = kirjanNimi;
    this.ilmestymisvuosi = ilmestymisvuosi;
    this.sivujenMaara = sivujenMaara;
    this.kaikkiTiedot = kaikkiTiedot;
    }


    public void aja() {
    try {
    do {
    Kirja kirjanTiedot = new Kirja(tekijanNimi, kirjanNimi, ilmestymisvuosi, sivujenMaara); $

    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    } while (tekijanNimi.length() > 1);

    } catch (KelvottomatTeoksenTiedot teksti) {
    }

    }



    /** Käynnistysmetodi luo uuden järjestämisohjelmaolion ja laittaa sen käyntiin. Parameters: komentoriviparametrit - (ei käytössä) */


    public static void main(String[] komentoriviparametrit) {


    //Jarjestamisohjelma jarkkariolio = new Jarjestamisohjelma(); ???
    //jarkkariolio.jarjesta(lista); ??
    //jarkkariolio.aja(); ??
    }

    } // Jarjestamisohjelma loppuu

    ____________________________________

    Lisäksi toisessa luokassa Tyokalupakki.java
    minulla on järjestämismetodi jarjesta(List lista).

    Äänestä

  • Time is on My Side kirjoitti:

    Pääset helpoimmin eteenpäin kun korvaat rivin:

    throw new KelvottomatTeoksenTiedot("höpöhöpö");

    jollain "kevyemmällä" virheenkäsittelyrivillä, esim tällä:

    System.out.println("virhe XX kohdassa XX");

    Tuolla pitäisi päästä eteenpäin.

    Tuo "throw new" -rakenne olisi vaatinut toimiakseen erillisen määrittelyn samalle riville jolla aloitetaan metodi. Esim näin:

    public String jokuMetodi() throws KelvottomatTeoksenTiedot {

    Homman juju on siinä, että mikäli yksittäiset metodit voivat "heittää" virheitä eteenpäin, niin silloin ne voidaan käsitellä keskitetysti yhdessä paikassa. Kun ohjelmiston koko kasvaa, niin tästä toimintatavasta tulee välttämättömyys.

    ai olitkin ehtinyt tässä välissä vastata kun
    räpeltelin koodin kanssa kaikenlaista. :)

    Se näytti sitten lopulta menevän läpi tälleenkin
    try {

    } catch (KelvottomatTeoksenTiedot seliseli) {
    }

    ettei reagoi catchiin muuten kuin sieppaamalla sen. Siihen samaan lohkoon voi varmaan laittaa sen System.out.print("jotain").

    Kiitos! :) :)

    Äänestä

  • Julia kirjoitti:

    Aikaisempi ongelma hävisi (jotenkin kummasti lopulta), mutta olisi vielä yksi probleema.
    Mitäköhän ohjelman käynnistysmetodiin
    main pitäisi kirjoittaa jotta ohjelma käynnistyisi. Olen ihan pulassa kun huomisiltana
    deadline. Olisin tosi kiitollinen vinkeistä.
    -Julia

    ______________________________________________

    public class Jarjestamisohjelma {

    public Jarjestamisohjelma() {
    this.lukija = lukija;
    this.tekijanNimi = tekijanNimi;
    this.kirjanNimi = kirjanNimi;
    this.ilmestymisvuosi = ilmestymisvuosi;
    this.sivujenMaara = sivujenMaara;
    this.kaikkiTiedot = kaikkiTiedot;
    }


    public void aja() {
    try {
    do {
    Kirja kirjanTiedot = new Kirja(tekijanNimi, kirjanNimi, ilmestymisvuosi, sivujenMaara); $

    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    } while (tekijanNimi.length() > 1);

    } catch (KelvottomatTeoksenTiedot teksti) {
    }

    }



    /** Käynnistysmetodi luo uuden järjestämisohjelmaolion ja laittaa sen käyntiin. Parameters: komentoriviparametrit - (ei käytössä) */


    public static void main(String[] komentoriviparametrit) {


    //Jarjestamisohjelma jarkkariolio = new Jarjestamisohjelma(); ???
    //jarkkariolio.jarjesta(lista); ??
    //jarkkariolio.aja(); ??
    }

    } // Jarjestamisohjelma loppuu

    ____________________________________

    Lisäksi toisessa luokassa Tyokalupakki.java
    minulla on järjestämismetodi jarjesta(List lista).

    /**
    Luokka Jarjestamisohjelma tarjoaa yksinkertaisen merkkipohjaisen
    käyttöliittymän, jonka avulla voi kokeilla Tyokalupakki-luokan
    järjestämismetodin toimintaa. Ohjelmalla järjestetään Kirja-olioita.*/


    public class Jarjestamisohjelma extends Object {

    private Nappiksenlukija lukija;
    private Kirja kaikkiTiedot;
    private String kirjarivi;
    private String kaikkitiedot;
    private String tekijanNimi;
    private int ilmestymisvuosi;
    private int sivujenMaara;
    private String kirjanNimi;

    public Jarjestamisohjelma() {
    this.lukija = lukija;
    this.tekijanNimi = tekijanNimi;
    this.kirjanNimi = kirjanNimi;
    this.ilmestymisvuosi = ilmestymisvuosi;
    this.sivujenMaara = sivujenMaara;
    this.kaikkiTiedot = kaikkiTiedot;
    }


    /** Ajaa järjestämisohjelman. Ohjelman käyttöliittymä kyselee
    käyttäjältä järjestettävien kirjojen tiedot. Lopetus kun
    syöttää tyhjän merkkijonon tekijanNimen kohdalle.
    Tulostaa kirjat järjestyksessä. */


    public void aja() {

    try {
    do {

    Kirja kirjanTiedot = new Kirja(tekijanNimi, kirjanNimi,
    ilmestymisvuosi, sivujenMaara);

    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    } while (tekijanNimi.length() > 1);

    } catch (KelvottomatTeoksenTiedot seliseli) {

    }

    }



    /** Käynnistysmetodi luo uuden järjestämisohjelmaolion ja laittaa
    sen käyntiin. Parameters: komentoriviparametrit - (ei käytössä) */

    public static void main(String[] komentoriviparametrit) {

    // mitäköhän tässä pitäisi suunnilleen lukea?

    //Jarjestamisohjelma jarkkariolio = new Jarjestamisohjelma(); ???
    //jarkkariolio.jarjesta(lista); ??
    //jarkkariolio.aja(); ??
    }


    }

    Äänestä

  • Julia kirjoitti:

    Aikaisempi ongelma hävisi (jotenkin kummasti lopulta), mutta olisi vielä yksi probleema.
    Mitäköhän ohjelman käynnistysmetodiin
    main pitäisi kirjoittaa jotta ohjelma käynnistyisi. Olen ihan pulassa kun huomisiltana
    deadline. Olisin tosi kiitollinen vinkeistä.
    -Julia

    ______________________________________________

    public class Jarjestamisohjelma {

    public Jarjestamisohjelma() {
    this.lukija = lukija;
    this.tekijanNimi = tekijanNimi;
    this.kirjanNimi = kirjanNimi;
    this.ilmestymisvuosi = ilmestymisvuosi;
    this.sivujenMaara = sivujenMaara;
    this.kaikkiTiedot = kaikkiTiedot;
    }


    public void aja() {
    try {
    do {
    Kirja kirjanTiedot = new Kirja(tekijanNimi, kirjanNimi, ilmestymisvuosi, sivujenMaara); $

    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    } while (tekijanNimi.length() > 1);

    } catch (KelvottomatTeoksenTiedot teksti) {
    }

    }



    /** Käynnistysmetodi luo uuden järjestämisohjelmaolion ja laittaa sen käyntiin. Parameters: komentoriviparametrit - (ei käytössä) */


    public static void main(String[] komentoriviparametrit) {


    //Jarjestamisohjelma jarkkariolio = new Jarjestamisohjelma(); ???
    //jarkkariolio.jarjesta(lista); ??
    //jarkkariolio.aja(); ??
    }

    } // Jarjestamisohjelma loppuu

    ____________________________________

    Lisäksi toisessa luokassa Tyokalupakki.java
    minulla on järjestämismetodi jarjesta(List lista).

    Hiukka hankalaa tämä ohjelmointi ilman tarkempia tietoja.. :) Mutta tässä vielä lisäosviittaa ohjelmarunkoon puettuna.. En missän tapauksessa väitä, että tuo ohjelma toimii tuollaisenaan, mutta ehkä rakenteen kertaalleen läpikatselemalla saat uusia ajatuksia..


    // tarvitset pari viittausta
    import java.util.Vector;
    import java.util.Enumeration;

    /**
    Luokka Jarjestamisohjelma tarjoaa yksinkertaisen merkkipohjaisen
    käyttöliittymän, jonka avulla voi kokeilla Tyokalupakki-luokan
    järjestämismetodin toimintaa. Ohjelmalla järjestetään Kirja-olioita.*/
    public class Jarjestamisohjelma extends Object {

    private Nappiksenlukija lukija;
    private Kirja kaikkiTiedot;
    private String kirjarivi;
    private String kaikkitiedot;
    private String tekijanNimi;
    private int ilmestymisvuosi;
    private int sivujenMaara;
    private String kirjanNimi;

    // instantioidaan uusi Vector
    private Vector kaikkiKirjat = new Vector();

    public Jarjestamisohjelma() {

    // näitä ei kyllä mielestäni tarvita lainkaan..
    this.lukija = lukija;
    this.tekijanNimi = tekijanNimi;
    this.kirjanNimi = kirjanNimi;
    this.ilmestymisvuosi = ilmestymisvuosi;
    this.sivujenMaara = sivujenMaara;
    this.kaikkiTiedot = kaikkiTiedot;
    }


    /** Ajaa järjestämisohjelman. Ohjelman käyttöliittymä kyselee
    käyttäjältä järjestettävien kirjojen tiedot. Lopetus kun
    syöttää tyhjän merkkijonon tekijanNimen kohdalle.
    Tulostaa kirjat järjestyksessä. */
    public void aja() {

    try {

    do {

    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    // uusi Kirja voidaan tehdä vasta täällä, koska muuten emme tiedä käyttäjän
    // syötteitä..
    Kirja kirjanTiedot = new Kirja(tekijanNimi, kirjanNimi, ilmestymisvuosi, sivujenMaara);

    // talleta juuri syntynyt Kirja säiliöön
    kaikkiKirjat.add(kirjanTiedot);

    } while (tekijanNimi.length() > 1);

    // kun luuppi on valmis, olet saanut Vector:iin kaikki Kirja:t.
    // Nyt ne pitäisi järjestää jollain tavalla. Seuraava tuskin toimii,
    // mutta periaate selvinnee..

    // instantio uusi tkp
    Tyokalupakki tkp = new Tyokalupakki();

    // anna jarjesta-metodille syötteeksi kaikkiKirjat.
    // HUOMHUOM: on epäselvää, huoliikoo tuo jarjesta-metodi Vectorin.
    tkp.jarjesta(kaikkiKirjat);

    // Kun järjestäminen on tehty, kirjat pitäisi ilmeisesti tulostaa.
    // Tarvitset viittauksen kirjaan, jonka jälkeen kutsut
    // Kirja-luokassa (toivottavasti) esiintyvää tulostuskomentoa

    // voit käydä Vector-luokan läpi käyttämällä Enumeration:ia
    for (Enumeration e = kaikkiKirjat.elements() ; e.hasMoreElements() ;) {
    Kirja k = e.nextElement();

    // tulostuskomento (onko tällaista ??)
    k.tulosta();
    }

    } catch (Exception ex) {
    }
    }



    /** Käynnistysmetodi luo uuden järjestämisohjelmaolion ja laittaa
    sen käyntiin. Parameters: komentoriviparametrit - (ei käytössä) */
    public static void main(String[] komentoriviparametrit) {

    // luo uusi jarkkariolio
    Jarjestamisohjelma jarkkariolio = new Jarjestamisohjelma();

    // käynnistä aja-metodi
    jarkkariolio.aja();
    }
    }

    Äänestä

  • Time is on My Side kirjoitti:

    Hiukka hankalaa tämä ohjelmointi ilman tarkempia tietoja.. :) Mutta tässä vielä lisäosviittaa ohjelmarunkoon puettuna.. En missän tapauksessa väitä, että tuo ohjelma toimii tuollaisenaan, mutta ehkä rakenteen kertaalleen läpikatselemalla saat uusia ajatuksia..


    // tarvitset pari viittausta
    import java.util.Vector;
    import java.util.Enumeration;

    /**
    Luokka Jarjestamisohjelma tarjoaa yksinkertaisen merkkipohjaisen
    käyttöliittymän, jonka avulla voi kokeilla Tyokalupakki-luokan
    järjestämismetodin toimintaa. Ohjelmalla järjestetään Kirja-olioita.*/
    public class Jarjestamisohjelma extends Object {

    private Nappiksenlukija lukija;
    private Kirja kaikkiTiedot;
    private String kirjarivi;
    private String kaikkitiedot;
    private String tekijanNimi;
    private int ilmestymisvuosi;
    private int sivujenMaara;
    private String kirjanNimi;

    // instantioidaan uusi Vector
    private Vector kaikkiKirjat = new Vector();

    public Jarjestamisohjelma() {

    // näitä ei kyllä mielestäni tarvita lainkaan..
    this.lukija = lukija;
    this.tekijanNimi = tekijanNimi;
    this.kirjanNimi = kirjanNimi;
    this.ilmestymisvuosi = ilmestymisvuosi;
    this.sivujenMaara = sivujenMaara;
    this.kaikkiTiedot = kaikkiTiedot;
    }


    /** Ajaa järjestämisohjelman. Ohjelman käyttöliittymä kyselee
    käyttäjältä järjestettävien kirjojen tiedot. Lopetus kun
    syöttää tyhjän merkkijonon tekijanNimen kohdalle.
    Tulostaa kirjat järjestyksessä. */
    public void aja() {

    try {

    do {

    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    // uusi Kirja voidaan tehdä vasta täällä, koska muuten emme tiedä käyttäjän
    // syötteitä..
    Kirja kirjanTiedot = new Kirja(tekijanNimi, kirjanNimi, ilmestymisvuosi, sivujenMaara);

    // talleta juuri syntynyt Kirja säiliöön
    kaikkiKirjat.add(kirjanTiedot);

    } while (tekijanNimi.length() > 1);

    // kun luuppi on valmis, olet saanut Vector:iin kaikki Kirja:t.
    // Nyt ne pitäisi järjestää jollain tavalla. Seuraava tuskin toimii,
    // mutta periaate selvinnee..

    // instantio uusi tkp
    Tyokalupakki tkp = new Tyokalupakki();

    // anna jarjesta-metodille syötteeksi kaikkiKirjat.
    // HUOMHUOM: on epäselvää, huoliikoo tuo jarjesta-metodi Vectorin.
    tkp.jarjesta(kaikkiKirjat);

    // Kun järjestäminen on tehty, kirjat pitäisi ilmeisesti tulostaa.
    // Tarvitset viittauksen kirjaan, jonka jälkeen kutsut
    // Kirja-luokassa (toivottavasti) esiintyvää tulostuskomentoa

    // voit käydä Vector-luokan läpi käyttämällä Enumeration:ia
    for (Enumeration e = kaikkiKirjat.elements() ; e.hasMoreElements() ;) {
    Kirja k = e.nextElement();

    // tulostuskomento (onko tällaista ??)
    k.tulosta();
    }

    } catch (Exception ex) {
    }
    }



    /** Käynnistysmetodi luo uuden järjestämisohjelmaolion ja laittaa
    sen käyntiin. Parameters: komentoriviparametrit - (ei käytössä) */
    public static void main(String[] komentoriviparametrit) {

    // luo uusi jarkkariolio
    Jarjestamisohjelma jarkkariolio = new Jarjestamisohjelma();

    // käynnistä aja-metodi
    jarkkariolio.aja();
    }
    }

    Jos vielä oot koneella :)

    Tässä esimerkkiajo tehtävänannosta

    Syötä kirjojen tietoja. Anna tyhjä kirjailijan nimi lopettaaksesi.

    Anna kirjailijan nimi: Gao Xingjian
    Anna kirjan nimi: Soul Mountain
    Anna ilmestymisvuosi: 1997
    Anna sivujen määrä: 528

    Anna kirjailijan nimi: José Saramago
    Anna kirjan nimi: Blindness
    Anna ilmestymisvuosi: 1996
    Anna sivujen määrä: 328

    Anna kirjailijan nimi: Günter Grass
    Anna kirjan nimi: The Tin Drum
    Anna ilmestymisvuosi: 1959
    Anna sivujen määrä: 804

    Anna kirjailijan nimi: V. S. Naipaul
    Anna kirjan nimi: Half a Life
    Anna ilmestymisvuosi: 2001
    Anna sivujen määrä: 211

    Anna kirjailijan nimi:

    Kirjat ilmestymisjärjestyksessä:
    1. Günter Grass: "The Tin Drum", 1959. 804 sivua.
    2. José Saramago: "Blindness", 1996. 328 sivua.
    3. Gao Xingjian: "Soul Mountain", 1997. 528 sivua.
    4. V. S. Naipaul: "Half a Life", 2001. 211 sivua.

    -----------------------------------------
    TÄHÄN LISÄTTY VAAN toString()- METODI

    do {
    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    Kirja kirjanTiedot = new Kirja(tekijanNimi, kirjanNimi, ilmestymisvuosi, sivujenMaara);

    kirjanTiedot.toString(); //Lisäsin, jotta teksti pötköksi
    kaikkiKirjat.add(kirjanTiedot);
    } while (tekijanNimi.length() > 1);

    --------------------------------------------
    en ole kylläkään varma käyttääkö toi
    kirjanTiedot.toString() nimenomaan juuri sitä
    kirja-luokassa olevaa toString-metodia (vai yleistä).

    ----------------------------------------------

    Tyokalupakki tkp = new Tyokalupakki();

    // anna jarjesta-metodilleSyötteeksiKaikkiKirjat.
    // HUOMHUOM: on epäselvää, huoliiko tuo jarjesta-// metodi Vectorin.

    järjestämetodi on tällainen Tyokaulupakki.javassa:
    public static void jarjesta(List lista)

    Huoliiko se lista vektoria, yritän selvittää
    jostain.

    tkp.jarjesta(kaikkiKirjat);

    // Kun järjestäminen on tehty, kirjat pitäisi ilmeisesti tulostaa.
    // Tarvitset viittauksen kirjaan, jonka jälkeen kutsut
    // Kirja-luokassa (toivottavasti) esiintyvää tulostuskomentoa

    // tulostuskomento (onko tällaista ??)
    Siellä Kirjaluokassa on konstruktori ja toString-metodi, muttei tulosta-metodia.

    Äänestä

  • Julia kirjoitti:

    Jos vielä oot koneella :)

    Tässä esimerkkiajo tehtävänannosta

    Syötä kirjojen tietoja. Anna tyhjä kirjailijan nimi lopettaaksesi.

    Anna kirjailijan nimi: Gao Xingjian
    Anna kirjan nimi: Soul Mountain
    Anna ilmestymisvuosi: 1997
    Anna sivujen määrä: 528

    Anna kirjailijan nimi: José Saramago
    Anna kirjan nimi: Blindness
    Anna ilmestymisvuosi: 1996
    Anna sivujen määrä: 328

    Anna kirjailijan nimi: Günter Grass
    Anna kirjan nimi: The Tin Drum
    Anna ilmestymisvuosi: 1959
    Anna sivujen määrä: 804

    Anna kirjailijan nimi: V. S. Naipaul
    Anna kirjan nimi: Half a Life
    Anna ilmestymisvuosi: 2001
    Anna sivujen määrä: 211

    Anna kirjailijan nimi:

    Kirjat ilmestymisjärjestyksessä:
    1. Günter Grass: "The Tin Drum", 1959. 804 sivua.
    2. José Saramago: "Blindness", 1996. 328 sivua.
    3. Gao Xingjian: "Soul Mountain", 1997. 528 sivua.
    4. V. S. Naipaul: "Half a Life", 2001. 211 sivua.

    -----------------------------------------
    TÄHÄN LISÄTTY VAAN toString()- METODI

    do {
    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    Kirja kirjanTiedot = new Kirja(tekijanNimi, kirjanNimi, ilmestymisvuosi, sivujenMaara);

    kirjanTiedot.toString(); //Lisäsin, jotta teksti pötköksi
    kaikkiKirjat.add(kirjanTiedot);
    } while (tekijanNimi.length() > 1);

    --------------------------------------------
    en ole kylläkään varma käyttääkö toi
    kirjanTiedot.toString() nimenomaan juuri sitä
    kirja-luokassa olevaa toString-metodia (vai yleistä).

    ----------------------------------------------

    Tyokalupakki tkp = new Tyokalupakki();

    // anna jarjesta-metodilleSyötteeksiKaikkiKirjat.
    // HUOMHUOM: on epäselvää, huoliiko tuo jarjesta-// metodi Vectorin.

    järjestämetodi on tällainen Tyokaulupakki.javassa:
    public static void jarjesta(List lista)

    Huoliiko se lista vektoria, yritän selvittää
    jostain.

    tkp.jarjesta(kaikkiKirjat);

    // Kun järjestäminen on tehty, kirjat pitäisi ilmeisesti tulostaa.
    // Tarvitset viittauksen kirjaan, jonka jälkeen kutsut
    // Kirja-luokassa (toivottavasti) esiintyvää tulostuskomentoa

    // tulostuskomento (onko tällaista ??)
    Siellä Kirjaluokassa on konstruktori ja toString-metodi, muttei tulosta-metodia.

    Jos Kirja-luokkaan on lisätty toString()-metodi, niin se tod.näk. tulosta tehtävänannossa pyydetyn rimpsun: "1. Günter Grass: "The Tin Drum", 1959. 804 sivua."

    Tämän saa helposti selville näin:

    System.out.println(kirjantiedot.toString());

    Mutta jos tehtävänannossa kuvattua rimpsua ei tuolla synny, niin kyllä sen saa helposti muutenkin tuotettua. Se tosin edellyttää sitä, että Kirja-luokkaan (joka ei siis ilmeisesti ole sinun kirjoittamasi) on lisätty aksessorit tyyliin: getKirjanNimi, get Sivumaara jne.. Toinen vaihtoehto on, että Kirja-luokan muuttujat ovat julkisia, jolloin niihin voi viitata suoraan. Tämä on kuitenkin epätodennäköistä, silläpä luokkamuuttujien tulisi aina olla privaatteja.

    List-luokasta vielä: JavaAPI:ssa ( http://java.sun.com/j2se/1.3/docs/api/java/util/List.html ) -sivun mukaan Vector-luokka implementoi List-luokkaa. Eli periaatteessa homman pitäisi toimia ihan ok..

    Äänestä

  • Julia kirjoitti:

    Jos vielä oot koneella :)

    Tässä esimerkkiajo tehtävänannosta

    Syötä kirjojen tietoja. Anna tyhjä kirjailijan nimi lopettaaksesi.

    Anna kirjailijan nimi: Gao Xingjian
    Anna kirjan nimi: Soul Mountain
    Anna ilmestymisvuosi: 1997
    Anna sivujen määrä: 528

    Anna kirjailijan nimi: José Saramago
    Anna kirjan nimi: Blindness
    Anna ilmestymisvuosi: 1996
    Anna sivujen määrä: 328

    Anna kirjailijan nimi: Günter Grass
    Anna kirjan nimi: The Tin Drum
    Anna ilmestymisvuosi: 1959
    Anna sivujen määrä: 804

    Anna kirjailijan nimi: V. S. Naipaul
    Anna kirjan nimi: Half a Life
    Anna ilmestymisvuosi: 2001
    Anna sivujen määrä: 211

    Anna kirjailijan nimi:

    Kirjat ilmestymisjärjestyksessä:
    1. Günter Grass: "The Tin Drum", 1959. 804 sivua.
    2. José Saramago: "Blindness", 1996. 328 sivua.
    3. Gao Xingjian: "Soul Mountain", 1997. 528 sivua.
    4. V. S. Naipaul: "Half a Life", 2001. 211 sivua.

    -----------------------------------------
    TÄHÄN LISÄTTY VAAN toString()- METODI

    do {
    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    Kirja kirjanTiedot = new Kirja(tekijanNimi, kirjanNimi, ilmestymisvuosi, sivujenMaara);

    kirjanTiedot.toString(); //Lisäsin, jotta teksti pötköksi
    kaikkiKirjat.add(kirjanTiedot);
    } while (tekijanNimi.length() > 1);

    --------------------------------------------
    en ole kylläkään varma käyttääkö toi
    kirjanTiedot.toString() nimenomaan juuri sitä
    kirja-luokassa olevaa toString-metodia (vai yleistä).

    ----------------------------------------------

    Tyokalupakki tkp = new Tyokalupakki();

    // anna jarjesta-metodilleSyötteeksiKaikkiKirjat.
    // HUOMHUOM: on epäselvää, huoliiko tuo jarjesta-// metodi Vectorin.

    järjestämetodi on tällainen Tyokaulupakki.javassa:
    public static void jarjesta(List lista)

    Huoliiko se lista vektoria, yritän selvittää
    jostain.

    tkp.jarjesta(kaikkiKirjat);

    // Kun järjestäminen on tehty, kirjat pitäisi ilmeisesti tulostaa.
    // Tarvitset viittauksen kirjaan, jonka jälkeen kutsut
    // Kirja-luokassa (toivottavasti) esiintyvää tulostuskomentoa

    // tulostuskomento (onko tällaista ??)
    Siellä Kirjaluokassa on konstruktori ja toString-metodi, muttei tulosta-metodia.

    // voit käydä Vector-luokan läpi käyttämällä Enumeration:ia
    for (Enumeration e = kaikkiKirjat.elements() ; e.hasMoreElements(); ) {
    Kirja k = e.nextElement();
    System.out.print(k);
    }
    --------------------------------------------
    Pitäisiköhän mun tulostaa k, vai kaikkiKirjat.
    Lisäksi incompatible types probleema.
    -------------------------------------------
    kosh exercise_2 206 % javac Jarjestamisohjelma.java
    Jarjestamisohjelma.java:60: incompatible types
    found : java.lang.Object
    required: Kirja
    Kirja k = e.nextElement();
    ^


    ----------------------------------------------


    Tästä eteenpäin koko ohjelma:



    import java.util.*;

    /**
    Luokka Jarjestamisohjelma tarjoaa yksinkertaisen merkkipohjaisen
    käyttöliittymän, jonka avulla voi kokeilla Tyokalupakki-luokan
    järjestämismetodin toimintaa. Ohjelmalla järjestetään Kirja-olioita.*/


    public class Jarjestamisohjelma extends Object {

    private Nappiksenlukija lukija;
    private String tiedotPotkoon;
    private String kirjarivi;
    private String tekijanNimi;
    private int ilmestymisvuosi;
    private int sivujenMaara;
    private String kirjanNimi;
    private Vector kaikkiKirjat = new Vector();


    public Jarjestamisohjelma() {
    this.lukija = lukija;
    this.tekijanNimi = tekijanNimi;
    this.kirjanNimi = kirjanNimi;
    this.ilmestymisvuosi = ilmestymisvuosi;
    this.sivujenMaara = sivujenMaara;
    }


    /** Ajaa järjestämisohjelman. Ohjelman käyttöliittymä kyselee
    käyttäjältä järjestettävien kirjojen tiedot. Lopetus kun
    syöttää tyhjän merkkijonon tekijanNimen kohdalle.
    Tulostaa kirjat järjestyksessä. */

    public void aja() {

    try {
    do {

    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    Kirja kirjanTiedot = new Kirja(tekijanNimi, kirjanNimi,
    ilmestymisvuosi, sivujenMaara);

    kirjanTiedot.toString();
    kaikkiKirjat.add(kirjanTiedot);
    } while (tekijanNimi.length() > 1);

    } catch (KelvottomatTeoksenTiedot pielessa) {
    }
    Tyokalupakki tkp = new Tyokalupakki();
    tkp.jarjesta(kaikkiKirjat);

    // voit käydä Vector-luokan läpi käyttämällä Enumeration:ia
    for (Enumeration e = kaikkiKirjat.elements() ; e.hasMoreElements(); ) {
    Kirja k = e.nextElement();
    System.out.print(k);
    }

    }

    /** Käynnistysmetodi luo uuden järjestämisohjelmaolion ja laittaa
    sen käyntiin. Parameters: komentoriviparametrit - (ei käytössä) */

    public static void main(String[] komentoriviparametrit) {

    // luo uusi jarkkariolio
    Jarjestamisohjelma jarkkariolio = new Jarjestamisohjelma();

    // käynnistä aja-metodi
    jarkkariolio.aja();
    }


    }

    Äänestä

  • Julia kirjoitti:

    // voit käydä Vector-luokan läpi käyttämällä Enumeration:ia
    for (Enumeration e = kaikkiKirjat.elements() ; e.hasMoreElements(); ) {
    Kirja k = e.nextElement();
    System.out.print(k);
    }
    --------------------------------------------
    Pitäisiköhän mun tulostaa k, vai kaikkiKirjat.
    Lisäksi incompatible types probleema.
    -------------------------------------------
    kosh exercise_2 206 % javac Jarjestamisohjelma.java
    Jarjestamisohjelma.java:60: incompatible types
    found : java.lang.Object
    required: Kirja
    Kirja k = e.nextElement();
    ^


    ----------------------------------------------


    Tästä eteenpäin koko ohjelma:



    import java.util.*;

    /**
    Luokka Jarjestamisohjelma tarjoaa yksinkertaisen merkkipohjaisen
    käyttöliittymän, jonka avulla voi kokeilla Tyokalupakki-luokan
    järjestämismetodin toimintaa. Ohjelmalla järjestetään Kirja-olioita.*/


    public class Jarjestamisohjelma extends Object {

    private Nappiksenlukija lukija;
    private String tiedotPotkoon;
    private String kirjarivi;
    private String tekijanNimi;
    private int ilmestymisvuosi;
    private int sivujenMaara;
    private String kirjanNimi;
    private Vector kaikkiKirjat = new Vector();


    public Jarjestamisohjelma() {
    this.lukija = lukija;
    this.tekijanNimi = tekijanNimi;
    this.kirjanNimi = kirjanNimi;
    this.ilmestymisvuosi = ilmestymisvuosi;
    this.sivujenMaara = sivujenMaara;
    }


    /** Ajaa järjestämisohjelman. Ohjelman käyttöliittymä kyselee
    käyttäjältä järjestettävien kirjojen tiedot. Lopetus kun
    syöttää tyhjän merkkijonon tekijanNimen kohdalle.
    Tulostaa kirjat järjestyksessä. */

    public void aja() {

    try {
    do {

    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    Kirja kirjanTiedot = new Kirja(tekijanNimi, kirjanNimi,
    ilmestymisvuosi, sivujenMaara);

    kirjanTiedot.toString();
    kaikkiKirjat.add(kirjanTiedot);
    } while (tekijanNimi.length() > 1);

    } catch (KelvottomatTeoksenTiedot pielessa) {
    }
    Tyokalupakki tkp = new Tyokalupakki();
    tkp.jarjesta(kaikkiKirjat);

    // voit käydä Vector-luokan läpi käyttämällä Enumeration:ia
    for (Enumeration e = kaikkiKirjat.elements() ; e.hasMoreElements(); ) {
    Kirja k = e.nextElement();
    System.out.print(k);
    }

    }

    /** Käynnistysmetodi luo uuden järjestämisohjelmaolion ja laittaa
    sen käyntiin. Parameters: komentoriviparametrit - (ei käytössä) */

    public static void main(String[] komentoriviparametrit) {

    // luo uusi jarkkariolio
    Jarjestamisohjelma jarkkariolio = new Jarjestamisohjelma();

    // käynnistä aja-metodi
    jarkkariolio.aja();
    }


    }

    My mistake :) Incompatible type johtuu siitä, että Vector:ssa oleva elementti pitää typecastata erikseen.

    Eli korvaa rivi:
    Kirja k = e.nextElement();

    tällä:
    Kirja k = (Kirja) e.nextElement();

    Typecast pitää tehdä aina, kun vektorista otetaan luokka "ulos".

    Tulostamisesta:
    Homman juju piilee siinä, että komennetaan Kirja-oliota "tulostamaan itsensä". Silloin siis

    k.toString()

    Toki kaikkiKirjat-vektorinkin voi tulostaa käyttämällä toString()-metodia. Mutta tällöin java ymmärtäisi komennon siten, että se käyttää Vector-luokassa olevan toString()-metodin toteutusta. Nyt emme halua sitä, vaan nimenomaan yksittäisen kirjan tulostuksen.

    Äänestä

  • Time is on My Side kirjoitti:

    My mistake :) Incompatible type johtuu siitä, että Vector:ssa oleva elementti pitää typecastata erikseen.

    Eli korvaa rivi:
    Kirja k = e.nextElement();

    tällä:
    Kirja k = (Kirja) e.nextElement();

    Typecast pitää tehdä aina, kun vektorista otetaan luokka "ulos".

    Tulostamisesta:
    Homman juju piilee siinä, että komennetaan Kirja-oliota "tulostamaan itsensä". Silloin siis

    k.toString()

    Toki kaikkiKirjat-vektorinkin voi tulostaa käyttämällä toString()-metodia. Mutta tällöin java ymmärtäisi komennon siten, että se käyttää Vector-luokassa olevan toString()-metodin toteutusta. Nyt emme halua sitä, vaan nimenomaan yksittäisen kirjan tulostuksen.

    ohjelmaa ajettaessa tulee viel
    NullPointer tekijanNimi-riville, outoa!

    do {
    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");

    Kerro vielä jos keksit.. :)

    -------------------------------------------
    import java.util.*;

    /**
    Luokka Jarjestamisohjelma tarjoaa yksinkertaisen merkkipohjaisen
    käyttöliittymän, jonka avulla voi kokeilla Tyokalupakki-luokan
    järjestämismetodin toimintaa. Ohjelmalla järjestetään Kirja-olioita.*/


    public class Jarjestamisohjelma extends Object {

    private Nappiksenlukija lukija;
    private String tiedotPotkoon;
    private String kirjarivi;
    private String tekijanNimi;
    private int ilmestymisvuosi;
    private int sivujenMaara;
    private String kirjanNimi;
    private Vector kaikkiKirjat = new Vector();


    public Jarjestamisohjelma() {
    this.lukija = lukija;
    this.tekijanNimi = tekijanNimi;
    this.kirjanNimi = kirjanNimi;
    this.ilmestymisvuosi = ilmestymisvuosi;
    this.sivujenMaara = sivujenMaara;
    }


    /** Ajaa järjestämisohjelman. Ohjelman käyttöliittymä kyselee
    käyttäjältä järjestettävien kirjojen tiedot. Lopetus kun
    syöttää tyhjän merkkijonon tekijanNimen kohdalle.
    Tulostaa kirjat järjestyksessä. */

    public void aja() {

    try {
    do {

    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    Kirja kirjanTiedot = new Kirja(tekijanNimi, kirjanNimi,
    ilmestymisvuosi, sivujenMaara);

    kirjanTiedot.toString();
    kaikkiKirjat.add(kirjanTiedot);
    } while (tekijanNimi.length() > 1);

    } catch (KelvottomatTeoksenTiedot pielessa) {
    }
    Tyokalupakki tkp = new Tyokalupakki();
    tkp.jarjesta(kaikkiKirjat);

    // voit käydä Vector-luokan läpi käyttämällä Enumeration:ia
    for (Enumeration e = kaikkiKirjat.elements() ; e.hasMoreElements(); ) {

    Kirja k = (Kirja) e.nextElement();
    System.out.print( k.toString() );
    }

    }

    /** Käynnistysmetodi luo uuden järjestämisohjelmaolion ja laittaa
    sen käyntiin. Parameters: komentoriviparametrit - (ei käytössä) */

    public static void main(String[] komentoriviparametrit) {

    // luo uusi jarkkariolio
    Jarjestamisohjelma jarkkariolio = new Jarjestamisohjelma();

    // käynnistä aja-metodi
    jarkkariolio.aja();
    }


    }

    Äänestä

  • Julia kirjoitti:

    ohjelmaa ajettaessa tulee viel
    NullPointer tekijanNimi-riville, outoa!

    do {
    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");

    Kerro vielä jos keksit.. :)

    -------------------------------------------
    import java.util.*;

    /**
    Luokka Jarjestamisohjelma tarjoaa yksinkertaisen merkkipohjaisen
    käyttöliittymän, jonka avulla voi kokeilla Tyokalupakki-luokan
    järjestämismetodin toimintaa. Ohjelmalla järjestetään Kirja-olioita.*/


    public class Jarjestamisohjelma extends Object {

    private Nappiksenlukija lukija;
    private String tiedotPotkoon;
    private String kirjarivi;
    private String tekijanNimi;
    private int ilmestymisvuosi;
    private int sivujenMaara;
    private String kirjanNimi;
    private Vector kaikkiKirjat = new Vector();


    public Jarjestamisohjelma() {
    this.lukija = lukija;
    this.tekijanNimi = tekijanNimi;
    this.kirjanNimi = kirjanNimi;
    this.ilmestymisvuosi = ilmestymisvuosi;
    this.sivujenMaara = sivujenMaara;
    }


    /** Ajaa järjestämisohjelman. Ohjelman käyttöliittymä kyselee
    käyttäjältä järjestettävien kirjojen tiedot. Lopetus kun
    syöttää tyhjän merkkijonon tekijanNimen kohdalle.
    Tulostaa kirjat järjestyksessä. */

    public void aja() {

    try {
    do {

    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    Kirja kirjanTiedot = new Kirja(tekijanNimi, kirjanNimi,
    ilmestymisvuosi, sivujenMaara);

    kirjanTiedot.toString();
    kaikkiKirjat.add(kirjanTiedot);
    } while (tekijanNimi.length() > 1);

    } catch (KelvottomatTeoksenTiedot pielessa) {
    }
    Tyokalupakki tkp = new Tyokalupakki();
    tkp.jarjesta(kaikkiKirjat);

    // voit käydä Vector-luokan läpi käyttämällä Enumeration:ia
    for (Enumeration e = kaikkiKirjat.elements() ; e.hasMoreElements(); ) {

    Kirja k = (Kirja) e.nextElement();
    System.out.print( k.toString() );
    }

    }

    /** Käynnistysmetodi luo uuden järjestämisohjelmaolion ja laittaa
    sen käyntiin. Parameters: komentoriviparametrit - (ei käytössä) */

    public static void main(String[] komentoriviparametrit) {

    // luo uusi jarkkariolio
    Jarjestamisohjelma jarkkariolio = new Jarjestamisohjelma();

    // käynnistä aja-metodi
    jarkkariolio.aja();
    }


    }

    Missä kohtaa ohjelman ajoa tuo nullpointer tulee? Alussa vai lopussa?

    Äänestä

  • Time is on My Side kirjoitti:

    Missä kohtaa ohjelman ajoa tuo nullpointer tulee? Alussa vai lopussa?

    Heti alussa

    kosh exercise_2 229 % java Jarjestamisohjelma
    java.lang.NullPointerException
    at Jarjestamisohjelma.aja (Jarjestamisohjelma.java:36) (pc 7)
    at Jarjestamisohjelma.main (Jarjestamisohjelma.java:73) (pc 9)
    kosh exercise_2 230 %

    Äänestä

  • Julia kirjoitti:

    Heti alussa

    kosh exercise_2 229 % java Jarjestamisohjelma
    java.lang.NullPointerException
    at Jarjestamisohjelma.aja (Jarjestamisohjelma.java:36) (pc 7)
    at Jarjestamisohjelma.main (Jarjestamisohjelma.java:73) (pc 9)
    kosh exercise_2 230 %

    Tällä hetkellä konstruktorissa on jostain syystä seuraavia rivejä:

    public Jarjestamisohjelma() {
    this.lukija = lukija;
    this.tekijanNimi = tekijanNimi;
    this.kirjanNimi = kirjanNimi;
    this.ilmestymisvuosi = ilmestymisvuosi;
    this.sivujenMaara = sivujenMaara;
    }

    Nuo rivit näyttävät mielestäni turhilta. Muutatko konstruktorin muotoon:

    public Jarjestamisohjelma() {
    }

    Onko tällä vaikutusta?

    Äänestä

  • Time is on My Side kirjoitti:

    Tällä hetkellä konstruktorissa on jostain syystä seuraavia rivejä:

    public Jarjestamisohjelma() {
    this.lukija = lukija;
    this.tekijanNimi = tekijanNimi;
    this.kirjanNimi = kirjanNimi;
    this.ilmestymisvuosi = ilmestymisvuosi;
    this.sivujenMaara = sivujenMaara;
    }

    Nuo rivit näyttävät mielestäni turhilta. Muutatko konstruktorin muotoon:

    public Jarjestamisohjelma() {
    }

    Onko tällä vaikutusta?

    Ei sillä näytä olevan vaikutusta.
    Otin pois ne, ohjelma kääntyi, mutta
    edelleen NullPointer.

    Mut hyvä ehdotus kiitos :)

    Äänestä

  • Julia kirjoitti:

    Ei sillä näytä olevan vaikutusta.
    Otin pois ne, ohjelma kääntyi, mutta
    edelleen NullPointer.

    Mut hyvä ehdotus kiitos :)

    Usein mulla on ollu silmukoissa häikkää.
    Ei se varmaankaan voi olla toi silmukan jatkamisehto (niinkun yleensä), kun se kääntäjä
    väittää riviä 41, jossa on se tekijänNimi =..

    Äänestä

  • Julia kirjoitti:

    ohjelmaa ajettaessa tulee viel
    NullPointer tekijanNimi-riville, outoa!

    do {
    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");

    Kerro vielä jos keksit.. :)

    -------------------------------------------
    import java.util.*;

    /**
    Luokka Jarjestamisohjelma tarjoaa yksinkertaisen merkkipohjaisen
    käyttöliittymän, jonka avulla voi kokeilla Tyokalupakki-luokan
    järjestämismetodin toimintaa. Ohjelmalla järjestetään Kirja-olioita.*/


    public class Jarjestamisohjelma extends Object {

    private Nappiksenlukija lukija;
    private String tiedotPotkoon;
    private String kirjarivi;
    private String tekijanNimi;
    private int ilmestymisvuosi;
    private int sivujenMaara;
    private String kirjanNimi;
    private Vector kaikkiKirjat = new Vector();


    public Jarjestamisohjelma() {
    this.lukija = lukija;
    this.tekijanNimi = tekijanNimi;
    this.kirjanNimi = kirjanNimi;
    this.ilmestymisvuosi = ilmestymisvuosi;
    this.sivujenMaara = sivujenMaara;
    }


    /** Ajaa järjestämisohjelman. Ohjelman käyttöliittymä kyselee
    käyttäjältä järjestettävien kirjojen tiedot. Lopetus kun
    syöttää tyhjän merkkijonon tekijanNimen kohdalle.
    Tulostaa kirjat järjestyksessä. */

    public void aja() {

    try {
    do {

    tekijanNimi = lukija.lueMerkkijono("Anna kirjailijan nimi: ");
    kirjanNimi = lukija.lueMerkkijono("Anna kirjan nimi: ");
    ilmestymisvuosi = lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
    sivujenMaara = lukija.lueKokonaisluku("Anna sivujen määrä: ");

    Kirja kirjanTiedot = new Kirja(tekijanNimi, kirjanNimi,
    ilmestymisvuosi, sivujenMaara);

    kirjanTiedot.toString();
    kaikkiKirjat.add(kirjanTiedot);
    } while (tekijanNimi.length() > 1);

    } catch (KelvottomatTeoksenTiedot pielessa) {
    }
    Tyokalupakki tkp = new Tyokalupakki();
    tkp.jarjesta(kaikkiKirjat);

    // voit käydä Vector-luokan läpi käyttämällä Enumeration:ia
    for (Enumeration e = kaikkiKirjat.elements() ; e.hasMoreElements(); ) {

    Kirja k = (Kirja) e.nextElement();
    System.out.print( k.toString() );
    }

    }

    /** Käynnistysmetodi luo uuden järjestämisohjelmaolion ja laittaa
    sen käyntiin. Parameters: komentoriviparametrit - (ei käytössä) */

    public static void main(String[] komentoriviparametrit) {

    // luo uusi jarkkariolio
    Jarjestamisohjelma jarkkariolio = new Jarjestamisohjelma();

    // käynnistä aja-metodi
    jarkkariolio.aja();
    }


    }

    No niinpä, eihän ohjelmassa ole instantioitu Lukija-luokkaa.. Eikä lukija.luoMerkkijono-metodia voi käyttää jos sitä ei ole vielä luotu.

    Muuta rivi:
    private Nappiksenlukija lukija;

    Muotoon:
    private Nappiksenlukija lukija = new Lukija();


    *odottaa jännityksellä seuraavaa viestiä*

    Äänestä

  • Time is on My Side kirjoitti:

    No niinpä, eihän ohjelmassa ole instantioitu Lukija-luokkaa.. Eikä lukija.luoMerkkijono-metodia voi käyttää jos sitä ei ole vielä luotu.

    Muuta rivi:
    private Nappiksenlukija lukija;

    Muotoon:
    private Nappiksenlukija lukija = new Lukija();


    *odottaa jännityksellä seuraavaa viestiä*

    mutta ei vielä sieltä pois. Eli mun
    } while (tekijanNimi.length() > 1);

    ei lopeta kyselyä entteriin, vaikka pitäis.
    Pitää keksiä siihen ehkä joku muu vaik
    tekijanNimi.equals("")..?

    Mä en ois ikinä keksiny sitä että lukija-oliosta
    pitää tehä new lukijaolio, kiitos :)

    Äänestä

  • Julia kirjoitti:

    mutta ei vielä sieltä pois. Eli mun
    } while (tekijanNimi.length() > 1);

    ei lopeta kyselyä entteriin, vaikka pitäis.
    Pitää keksiä siihen ehkä joku muu vaik
    tekijanNimi.equals("")..?

    Mä en ois ikinä keksiny sitä että lukija-oliosta
    pitää tehä new lukijaolio, kiitos :)

    Hyvä että homma menee eteenpäin.. Kohta meinaan pitää lähteä oluelle. Mutta jatketaan vielä.

    While-testi menee pieleen todnäk sen takia, että enter-näppäimen painallus lähettää jonkinlaisen carriage return -merkin (hävettää kun ei ole tämän parempaa tietoa aiheesta, mutta en ole tehnyt merkkipohjaisia ohjelmia ikuisuuksiin).

    Seuraava jippo saattaa toimia: Trimmaa käyttäjältä tullut syöte käyttämällä String-luokan trim-metodia. Samalla on hyvä testata se, ettei syöte saa 'null'-arvoa.

    Eli muunna while-ehto seuraavaksi:

    while (tekijanNimi != null && tekijanNimi.trim().length() > 0)

    Äänestä

  • Time is on My Side kirjoitti:

    Hyvä että homma menee eteenpäin.. Kohta meinaan pitää lähteä oluelle. Mutta jatketaan vielä.

    While-testi menee pieleen todnäk sen takia, että enter-näppäimen painallus lähettää jonkinlaisen carriage return -merkin (hävettää kun ei ole tämän parempaa tietoa aiheesta, mutta en ole tehnyt merkkipohjaisia ohjelmia ikuisuuksiin).

    Seuraava jippo saattaa toimia: Trimmaa käyttäjältä tullut syöte käyttämällä String-luokan trim-metodia. Samalla on hyvä testata se, ettei syöte saa 'null'-arvoa.

    Eli muunna while-ehto seuraavaksi:

    while (tekijanNimi != null && tekijanNimi.trim().length() > 0)

    Kiitos kovasti kaikesta avusta. :)
    Toimii!

    Jotain pienen pientä viilaamista riittää
    mulle vielä ehkä tunniksi. Sitten lopetan mäkin tältä päivältä.

    En olisi ikinä saanut koodia kasaan! Pelastit mut kurssilta tippumiselta :)
    tkk:lla on tosi vaikea saada apua ohjelmointi-probleemissa. Tälläkin javakurssilla on harjoitusryhmiä, joissa voi käydä kyselemässä assarilta apua, mutta ne on niin täynnä että saa viitata yli tunnin, jotta saa yhteen kysymykseen vastauksen (jos silloinkaan, kun ne ei saa muka kertoa liikaa).
    Olen sitten yrittänyt kysellä ircissä ja tänään keksin keskusteluryhmät. Harvoin kukaan kuitenkaan viitsii vastailla mulle.

    Miten voin korvata avun? :)

    Äänestä

  • Julia kirjoitti:

    Kiitos kovasti kaikesta avusta. :)
    Toimii!

    Jotain pienen pientä viilaamista riittää
    mulle vielä ehkä tunniksi. Sitten lopetan mäkin tältä päivältä.

    En olisi ikinä saanut koodia kasaan! Pelastit mut kurssilta tippumiselta :)
    tkk:lla on tosi vaikea saada apua ohjelmointi-probleemissa. Tälläkin javakurssilla on harjoitusryhmiä, joissa voi käydä kyselemässä assarilta apua, mutta ne on niin täynnä että saa viitata yli tunnin, jotta saa yhteen kysymykseen vastauksen (jos silloinkaan, kun ne ei saa muka kertoa liikaa).
    Olen sitten yrittänyt kysellä ircissä ja tänään keksin keskusteluryhmät. Harvoin kukaan kuitenkaan viitsii vastailla mulle.

    Miten voin korvata avun? :)

    TKK:n ohjelmointikurssit on kyllä melkoisen tukalia - siitä samasta tehtaasta minäkin olen aikanaan sinnitellyt.. :)

    Mutta ei kestä kiittää. Opettele riittävästi javaa, niin otan sinut firmaan töihin vuoden parin päästä :)

    Mutta nyt hyvinansaitulle oluelle..

    Äänestä

Kommentoi aloitusta


Julia kirjoitti:

/** Ajaa järjestämisohjelman. Ohjelman käyttöliittymä kyselee käyttäjältä järjestettävien kirjojen tiedot. Lopetus kun
syöttää tyhjän merkkijonon tekijanNimen kohdalle.
Tulostaa kirjat järjestyksessä. */



public void aja() {
try {
do {

tekijanNimi = lukija.lueMerkkijono ("Anna kirjailijan nimi: ");
kirjanNimi = lukija.lueMerkkijono ("Anna kirjan nimi: ");
ilmestymisvuosi=lukija.lueKokonaisluku("Anna ilmestymisvuosi: ");
sivujenMaara=lukija.lueKokonaisluku ("Anna sivujen määrä: ");

} while (tekijanNimi.length() > 1);


}catch(KelvottomatTeoksenTiedot(virhe)) {
System.out.println("Teoksen
tiedot kelvottomat.");
}

}


______________________________________________

Osaisiko kukaan neuvoa, miksi seuraava virheilmoitus? Lisäksi while-silmukan jatkamis-
ehdossa NullPointerException? Olen kokeillut vaikka mitä.

kosh exercise_2 62 % javac Jarjestamisohjelma.java
Jarjestamisohjelma.java:52: expected
} catch (KelvottomatTeoksenTiedot(virhe)) {
^

Kiitos mahdollisista vastauksista :)
-julia

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu