Viopen Java-kurssilla, vertailuoperaattoritehtävä

Anonyymi

Voisko joku fiksumpi kertoa mitä koodissani on väärin? Olen kokeillut ihan kaikkea ja googlaillut monta tuntia ja useampana päivänä, mutta en vaan saa tätä oikein!!
Kiitos tuhannesti jo etukäteen jos joku osaa auttaa :)

Tehtävänanto:
Tee ohjelma, joka kysyy ensin käyttäjän sukupuolen ja tämän jälkeen iän. Lopuksi ohjelma tulostaa jonkin lausahduksen seuraavan ohjeen mukaisesti:
- Mies 0-55 vuotta: "Olet mies parhaassa iässä!"
- Mies 56-100 vuotta: "Olet viisas mies!"
- Nainen 0-55 vuotta: "Olet neito kauneimmillaan!"
- Nainen 56-100 vuotta: "Olet nuori ikäiseksesi!"
- muuten "Ohjelmassa tapahtunut virhe!"

Ikä käsitellään kokonaislukumuuttujana ja sukupuoli merkkimuuttujana (m/n). Isoja kirjaimia ei tarvitse huomioida.


Yritykseni ratkaista:

import java.io.*;

public class Tulostus {
public static void main(String[] args) {
int ika;

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

try {
System.out.print("Oletko mies vai nainen (m/n)?");
String sukupuoli = in.readLine();
char jonon_eka_merkki = sukupuoli.charAt(0);

System.out.println("Anna ikäsi:");
ika = Integer.parseInt(in.readLine());

if (ika >= 0 && ika <= 55 && jonon_eka_merkki.equals('m'))
System.out.println("Olet mies parhaassa iässä!");
else if (ika >= 56 && ika <= 100 && jonon_eka_merkki.equals('m'))
System.out.println("Olet viisas mies!");
else if (ika >= 0 && ika <= 55 && jonon_eka_merkki.equals('n'))
System.out.println("Olet neito kauneimmillaan!");
else if (ika >= 56 && ika <= 100 && jonon_eka_merkki.equals('n'))
System.out.println("Olet nuori ikäiseksesi!");
else System.out.println("Ohjelmassa tapahtunut virhe!");

} catch(Exception e) {
System.out.print("Antamasi syöte oli virheellinen...");
}
}
}

11

1298

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi
      • Anonyymi

        Kiitos paljon vastauksesta! Kokeilin myös noita aaltosulkeita, mutta se ei tuntunut auttavan. Myöskään kurssin esimerkissä ei käytetty aaltosulkeita if ja if else -lauseissa, ilmeisesti siksi että ovat try - catch -lauseen sisällä. Sain koodin onnistumaan pelkkää ikää kysyttäessä, joten uskoisin että vika on tuossa sukupuolen kysymisessä.

        Tämä tehtävä on kyllä tosi hankala!


      • Anonyymi kirjoitti:

        Kiitos paljon vastauksesta! Kokeilin myös noita aaltosulkeita, mutta se ei tuntunut auttavan. Myöskään kurssin esimerkissä ei käytetty aaltosulkeita if ja if else -lauseissa, ilmeisesti siksi että ovat try - catch -lauseen sisällä. Sain koodin onnistumaan pelkkää ikää kysyttäessä, joten uskoisin että vika on tuossa sukupuolen kysymisessä.

        Tämä tehtävä on kyllä tosi hankala!

        Aaltosulkeita ei tarvitse, jos suoritettavassa lohkossa on vain yksi lause (eli jos aaltosulkeita ei laita, niin if ottaa vain seuraavan yhden lauseen "sisälleen"). Suositeltavaa niitä on kyllä käyttää aina, niin ei tule epäselvyyksiä.


      • minkkilaukku kirjoitti:

        Aaltosulkeita ei tarvitse, jos suoritettavassa lohkossa on vain yksi lause (eli jos aaltosulkeita ei laita, niin if ottaa vain seuraavan yhden lauseen "sisälleen"). Suositeltavaa niitä on kyllä käyttää aina, niin ei tule epäselvyyksiä.

        Tietenkin, jos se siinä on vain joku hyvin lyhyt yksinkertainen, joka mahtuu samalle riville, niin sitten ehkä aaltosulkeet on sallittua jättää pois.


    • Anonyymi

      Tsekkaa ensin että onko merkkijono m TAI n JA (ikä >= 0 JA ikä <= 100). Jos ei ole niin tulosta "virhe". Sen jälkeen tsekkaa Ifissä oliko merkkijono m, jonka jälkeen tsekkaat iän ja tulostat jomman kumman mies-kommentin. Else-lohkossa tsekkaat iän ja tulostat sopivan nais-kommentin.

    • Anonyymi
    • Korvaa tuo equals vertailu ==:lla.
      Eli esim
      jonon_eka_merkki == 'm'

      • Anonyymi

        Kiitos!! Tuo equalsin korvaaminen == -merkillä auttoi! Jee! Tehtävä meni läpi. Itse olin jostain syystä uskossa että == -merkkiä saa käyttää vain jos on numeroista kyse ja muissa tapauksissa tulisi käyttää equalsia.


      • Anonyymi
        Anonyymi kirjoitti:

        Kiitos!! Tuo equalsin korvaaminen == -merkillä auttoi! Jee! Tehtävä meni läpi. Itse olin jostain syystä uskossa että == -merkkiä saa käyttää vain jos on numeroista kyse ja muissa tapauksissa tulisi käyttää equalsia.

        Jaavasta en tiedä, mutta ainakin ehdassa C-kielessä char on vastaavanlainen numeerinen arvo kuin vaikkapa int. Merkkijono on sitten tyyppiä char *, eli arvo on muistiosoitin.


      • Anonyymi kirjoitti:

        Kiitos!! Tuo equalsin korvaaminen == -merkillä auttoi! Jee! Tehtävä meni läpi. Itse olin jostain syystä uskossa että == -merkkiä saa käyttää vain jos on numeroista kyse ja muissa tapauksissa tulisi käyttää equalsia.

        Joo char on primitiivi, kuten int, double yms. Tuo equals-metodi on objekteille.

        Primitiiveillekin on sitten olemassa wrapper-luokat (eli objekti, joka vain pitää sisällään kyseistä primitiivin arvoa) esim Character.

        Eikös sulla muuten kääntäjä kertonut sitä että virhe on noissa neljässä kohdassa?


      • Anonyymi
        minkkilaukku kirjoitti:

        Joo char on primitiivi, kuten int, double yms. Tuo equals-metodi on objekteille.

        Primitiiveillekin on sitten olemassa wrapper-luokat (eli objekti, joka vain pitää sisällään kyseistä primitiivin arvoa) esim Character.

        Eikös sulla muuten kääntäjä kertonut sitä että virhe on noissa neljässä kohdassa?

        Linuxin javac herjaa ainakin "error: char cannot be dereferenced".


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

    Luetuimmat keskustelut

    1. Voitaisko olla kavereita?

      Haluaisin aloittaa puhtaalta pöydältä sinun kanssasi, tabula rasa. Minä lopetan sinun perääsi haikailun, ja sitten sinäk
      Tunteet
      27
      5175
    2. Deodoranttiteollisuus

      Annan ilmaisen vinkin. Kyseinen teollisuus voisi alkaa valmistaa kuolleen ruumiin hajua. Olisi varma hittituote, ainakin
      Jämsä
      13
      3098
    3. Rukoilimme Länsimuurilla 2000 vuoden jälkeen, Jumalamme oli antanut meille kaiken takaisin

      Western Wall, In our Hands. 55th Para. https://www.youtube.com/watch?v=u4BJAppyCSo https://en.wikipedia.org/wiki/55th_
      Ateismi
      15
      1288
    4. Kerro kaivattusi

      Jokin tapa/piirre mikä sinua viehättää ja mistä hän voisi myös tunnistaa itsensä.
      Ikävä
      49
      1201
    5. Oulaisten kaupunki tuomittiin maksamaan korvauksia

      Mikäs juttu tämä on? Kaupunki syyllistänyt useamman vuoden koneyrittäjiä ja nyt tuomittu.
      Oulainen
      23
      1114
    6. PURRA TULEE !

      Valtiovarainministeri Riika Purra, joka on lisäksi varapääministeri ja perussuomalaisten puheenjohtaja, tulee puoluesiht
      Haapavesi
      141
      982
    7. Onko MOT tulossa Ähtärin valtuuston kokoukseen?

      Esityslistan mukaan Ähtärin kaupunginvaltuuston valtapuolueet aikovat maanantaina estää tilintarkastajan laatiman raport
      Ähtäri
      43
      919
    8. Vain 30-40v mies on kuuma

      Muut on papparaisia. Näin se vaan menee. Miehelläkin on se paras ikä.
      Ikävä
      116
      885
    9. Minkä vuoksi

      Kaivattusi tuntuu niin rakkaalta ❤️
      Ikävä
      37
      834
    10. Mikään ei ole ikuista

      Hyvää huomenta. ☕ Susi ulvoo yksin ja tyhjyys kutsuu luokseen.⚜️❄️❤️🥱
      Ikävä
      142
      763
    Aihe