Apua kaivataan harjoitustehtävään

samppis77

Tarvitsisin apua hieman. Olen melkeen tehnyt kurssin harjoitustehtävät, mutta pari niistä vielä aiheuttaa suuria ongelmia. Seuraavanlainen tehtävä:

Alla on hieman karsittu versio luokasta "eka", mutta idea on taas sama. Luokassa "eka" luodaan olio nimeltään "olio". Tällä oliolla on siis luokan KysyJaTulosta ominaisuudet käytössä.

Sinun tehtäväsi on laatia luokka "KysyJaTulosta" ja laatia luokkaan metodi teeHommasi(), joka ottaa vastaan muuttujan "merkkijono" sisältämän merkkijonon, tulostaa saadun merkkijonon, lukee käyttäjän antaman syötteen ja tulostaa tämän näytölle. Valmiin ohjelman toiminnan näet esimerkkitulosteesta.


import java.io.*;

public class eka
{
public static void main(String args[])
{
String merkkijono = "Anna merkkijono, jonka tulostan: ";
KysyJaTulosta olio = new KysyJaTulosta();
olio.teeHommasi(merkkijono);
}
}

// Sinun koodisi tulee tähän...



Osaisko joku auttaa? :)

29

4731

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • hg4e5

      Oletko tosissasi? Kannattaa jättää kurssi kesken ja vaihtaa linjaa täysin jos ei homma kiinnosta, kyseessä kuitenkin on ihan täysin alkeet jotka pitäisi olla hanskassa jos vähääkään on aihetta opiskellut.

      • 20 tehtävää olen tehnyt, mut tää ei vaa onnistu. Ei oo pakko auttaa :D


    • zlxkjv
      • Olen yrittänyt tuolla samalla tavalla, mutta ei se toimi sillä.


        Eli

        import java.util.Scanner;

        public class KysyJaTulosta {
        Scanner input = new Scanner(System.in);

        public void teeHommasi(String merkkijono) {
        System.out.println("Anna merkkijono, jonka tulostan: ");
        merkkijono = input.nextLine();
        System.out.println(merkkijono);

        }
        }


    • testattu

      Kokeile ottaa public pois (muuten omaan tiedostoon KysyJaTulosta.java? )
      public class KysyJaTulosta --> class KysyJaTulosta

      import lause package lauseen jälkeiselle riville tai koko koodin alkuu:

      "import statement is kept after the package statement.
      Example :
      package mypack;
      import java.util.*;

      But if you are not creating any package then import statement will be the first statement of your java source file.
      " http://www.studytonight.com/java/package-in-java

      En osaa ohjelmoida mutt noilla käänty netbeamissä

      • En tajunnut tosta nyt mitään :D

        Eli mulla tulee vaan virheilmoitus tosta ekasta rivistä.

        Tarkista oletko unohtanut luokan määrittelystä varatun sanan class?


    • vastauslaatikko

      Kokeile jättää eka rivi pois eli "import java.util.Scanner;"
      ehkä se on jo määritelty jossain. Tai ainakaan hyväksytty vastaus ei sitä sisällä.

      Jos se on sellainen vastauslaatikko (eikä oikea ohjelmointiympäristö kuten java NetBeans IDE), siinä odotetaan vain tiettyä vastausta.
      Kuulostaa siltä että vastauksen pitää alkaa luokan määrityksellä eli class sanalla tai public class sanaparilla.

      • ei_ajankohtaista

        java -tiedosto kommentti tarkoitti tätä:
        http://stackoverflow.com/questions/2336692/java-multiple-class-declarations-in-one-file

        Yksi on public ja muut eivät ole.

        public class Fun {
        Fun() {
        System.out.println("Fun constructor");
        }
        void fun() {
        System.out.println("Fun mathod");
        }
        public static void main(String[] args) {
        Fun fu = new Fun();
        fu.fun();
        Fen fe = new Fen();
        fe.fen();
        Fin fi = new Fin();
        fi.fin();
        Fon fo = new Fon();
        fo.fon();
        Fan fa = new Fan();
        fa.fan();
        fa.run();
        }
        }

        class Fen {
        Fen() {
        System.out.println("fen construuctor");

        }
        void fen() {
        System.out.println("Fen method");
        }
        }

        class Fin {
        void fin() {
        System.out.println("Fin method");
        }
        }

        class Fon {
        void fon() {
        System.out.println("Fon method");
        }
        }

        class Fan {
        void fan() {
        System.out.println("Fan method");
        }
        public void run() {
        System.out.println("run");
        }
        }


      • java-io-paketti

        ahaa pitää käyttää lauseella import java.io.*; tuotuja luokkia (olioita) .
        (jonka olet pudottanut viestistäsi pois?)
        Niihin ei kuulu Scanner luokka Se voitaisiin tuoda lauseella import java.util.Scanner; (tai tuomalla kaikki java.util paketin luokat java.util.*;
        Tehtävässä ei voi itse tuoda paketteja, vaan pitää tyytyä tuohon java.io.* paketin sisältämiin. Ilmeisesti aikaisemmissa tehtävissä jo käytetty tapa kysyä käyttäjältä syötettä.


        http://stackoverflow.com/questions/5287538/how-can-i-get-the-user-input-in-java
        Esim. tuolta voi valita jonkin toisen luokan ("aliohjelman") kysymään käyttäjältä syötettä.
        Sivulta kopioitu:
        BufferedReader and InputStreamReader classes

        import java.io.BufferedReader;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        int i = Integer.parseInt(br.readLine());
        DataInputStream class

        import java.io.DataInputStream;
        DataInputStream dis = new DataInputStream(System.in);
        int i = dis.readInt();
        The readLine method from the DataInputStream class has been deprecated. To get String value, you should use the previous solution with BufferedReader

        Console class

        import java.io.Console;
        Console console = System.console();
        String s = console.readLine();
        int i = Integer.parseInt(console.readLine());


      • en-osaa-sanoa
        java-io-paketti kirjoitti:

        ahaa pitää käyttää lauseella import java.io.*; tuotuja luokkia (olioita) .
        (jonka olet pudottanut viestistäsi pois?)
        Niihin ei kuulu Scanner luokka Se voitaisiin tuoda lauseella import java.util.Scanner; (tai tuomalla kaikki java.util paketin luokat java.util.*;
        Tehtävässä ei voi itse tuoda paketteja, vaan pitää tyytyä tuohon java.io.* paketin sisältämiin. Ilmeisesti aikaisemmissa tehtävissä jo käytetty tapa kysyä käyttäjältä syötettä.


        http://stackoverflow.com/questions/5287538/how-can-i-get-the-user-input-in-java
        Esim. tuolta voi valita jonkin toisen luokan ("aliohjelman") kysymään käyttäjältä syötettä.
        Sivulta kopioitu:
        BufferedReader and InputStreamReader classes

        import java.io.BufferedReader;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        int i = Integer.parseInt(br.readLine());
        DataInputStream class

        import java.io.DataInputStream;
        DataInputStream dis = new DataInputStream(System.in);
        int i = dis.readInt();
        The readLine method from the DataInputStream class has been deprecated. To get String value, you should use the previous solution with BufferedReader

        Console class

        import java.io.Console;
        Console console = System.console();
        String s = console.readLine();
        int i = Integer.parseInt(console.readLine());

        Näyttää kuitenkin että kaikkialla käytetään tuota scanner luokkaa esimerkeissä ja alkeiskursseilla.

        Luulisi että vastauksessa luodaan uusi public class ja siinä voi importilla tuoda tarvittavaat luokat.

        En tunne tätä "vastausautomaattia" jotta osaisin pähkäillä tätä.
        (javankin osaaminen alkeita joskus selannut)


    • putkaan
    • heitto

      import java.util.Scanner;
      public class KysyJaTulosta {
      Scanner input = new Scanner(System.in);

      public void teeHommasi(String merkkijono) {
      System.out.println(merkkijono);
      String syote = input.nextLine();
      System.out.println(syote);

      }}

      ******************vaihtoehto 2 käyttää java.io pakettia
      import java.io.*; // <-tämä rivi tulee tai sitten ei normaalisit pitäisi olla

      public class KysyJaTulosta {


      public void teeHommasi(String merkkijono) throws IOException {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      System.out.println(merkkijono);
      String syote = in.readLine();
      System.out.println(syote);

      }}

      kehote "Anna merkkijono, jonka tulostan: " tulee kutsuvasta ohjelmasta/luokasta. jälkimmäinen vaatii poikkeuksien(virheiden) käsittelyn määritystä
      http://www.tutorialspoint.com/java/io/bufferedreader_readline.htm

      • Eka vaihtoehto antaa virheilmoituksen:

        eka.java:13: class, interface, or enum expected
        import java.util.Scanner;
        ^
        1 error

        Ja saman virheen antaa myös toka vaihtoehto..

        Mikä tässä nyt oikeen mättää?


      • kolmekokeilua

        Kokeilu 1 ja2:
        Mitä antaa 1 ja 2 vaihtoehto ilman import riviä?


        ..."eka.java:13:" siis onko vika eka.java tiedostossa rivillä 13. Silloinhan tämä luokka ei olisi eri tiedostossa eli tiedostossa KysyJaTulosta.java...
        Siksi tulisi mieleen kokeilla ilman import riviä vaihtoehtoa 2 jättäen vielä myös sanan public pois, joten 3. kokeilu:
        ///////////////////////////////////////
        class KysyJaTulosta {
        public void teeHommasi(String merkkijono) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println(merkkijono);
        String syote = in.readLine();
        System.out.println(syote);
        }}
        ///////////////////////////////////////
        Tehtävä tuntuisi oudolta mutta voisi kokeilla mitä antaa ulos
        Vastauskentässä ei varmasti ole mitään muuta tekstiä, jos on niin tyjennä ensin.
        Esim. jos siinä lukee tuo "// Sinun koodisi tulee tähän..." ota sekin pois (vaikka siinä onkin // kommentoinnin merkiksi)


      • 3. vaihtoehto antaa virheilmoituksen:

        eka.java:9: unreported exception java.io.IOException; must be caught or declared to be thrown
        olio.teeHommasi(merkkijono);


      • vielätuo

        Siihen voisi luota try catch lohkot



        public void teeHommasi(String merkkijono) {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println(merkkijono);
        try
        {String syote = in.readLine();
        System.out.println(syote);
        }
        catch (Exception e) { System.out.println("virhe");}


      • Wau!! Nyt toimii :)

        Eli tällä sain toimimaan:

        class KysyJaTulosta {


        public void teeHommasi(String merkkijono) {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println(merkkijono);
        try
        {String syote = in.readLine();
        System.out.println(syote);
        }
        catch (Exception e) { System.out.println("virhe");

        }}}

        Kiitos kaikille!! :) Viel ois pari tehtävää vähän kesken. Siirrytäänkö seuraavaan ongelmaan :D


    • poissaollessa_ei_opi

      Oletko pinnannut oppitunneilta?

    • Seuraavanlainen matriisiongelma. Koodi toimii oikein, mutta tulostuksessa on pieni virhe. Tulostaa rivien jälkeen ylimääräisen välilyönnin. Miten sen saisi pois?

      import java.io.*;
      import java.util.*;

      public class Matriisi
      {
      public static void main(String[] args)
      {
      int matriisi[][] = new int[5][5];
      int summa;
      String temp;

      try{
      BufferedReader syote = new BufferedReader(new FileReader("matriisi.txt"));
      for(int x = 0; x < 5; x ){
      temp = syote.readLine();
      StringTokenizer eroitin = new StringTokenizer(temp, "\t");

      for(int y = 0; y < 5; y ){
      matriisi[x][y] = Integer.parseInt(eroitin.nextToken());
      }
      }
      syote.close();

      System.out.print("Matriisi:\n\n");
      tulosta_matriisi(matriisi);
      summa = laske_summa(matriisi);
      System.out.print("\nMatriisin alkioiden summa: " summa);

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


      public static int laske_summa(int matriisi[][]) {
      int laske_summa = 0;
      int summa=0;

      for (int x = 0; x < 5; x ){
      for (int y = 0; y < 5; y ){

      summa = summa matriisi[x][y];
      }
      }
      return summa;
      }

      public static void tulosta_matriisi(int matriisi[][]) {

      int x, y;



      for (x = 0; x < 5; x ){

      for (y = 0; y < 5; y ) {

      System.out.print(matriisi[x][y] "\t");
      }
      System.out.println();
      }

      }

      • rivinlopputab

        JOS tarkoitat jokaisen rivin loppuun tulevaa ylimääräistä \t tabulaattoria

        for (x = 0; x < 5; x ){

        for (y = 0; y < 4; y ) {

        System.out.print(matriisi[x][y] "\t");
        }
        System.out.print(matriisi[x][y]);
        System.out.println();
        }

        Rivisilmukan viimeinen käsitellään erikseen.
        Ei vaikuta tyylikkäältä. Joku koodari voisi antaa paremman vaihtoehdon.
        rivin viimeisen alkion tulostuskomentoon voisi lisätä myös rivinvaihdon, jolloin ei tarvitsisi erillistä rivinvaihtokäskyä.
        System.out.println(matriisi[x][y]);

        eli


        for (x = 0; x < 5; x ){

        for (y = 0; y < 4; y ) {

        System.out.print(matriisi[x][y] "\t");
        }
        System.out.println(matriisi[x][y]);
        }


      • huomaatuo

        y suurentaa arvo ennen vertailua y<4, jolloin y on silmukasta pois lähtiessä arvossa 4. Näin ainakin ajattelin.


      • rivinlopputab kirjoitti:

        JOS tarkoitat jokaisen rivin loppuun tulevaa ylimääräistä \t tabulaattoria

        for (x = 0; x < 5; x ){

        for (y = 0; y < 4; y ) {

        System.out.print(matriisi[x][y] "\t");
        }
        System.out.print(matriisi[x][y]);
        System.out.println();
        }

        Rivisilmukan viimeinen käsitellään erikseen.
        Ei vaikuta tyylikkäältä. Joku koodari voisi antaa paremman vaihtoehdon.
        rivin viimeisen alkion tulostuskomentoon voisi lisätä myös rivinvaihdon, jolloin ei tarvitsisi erillistä rivinvaihtokäskyä.
        System.out.println(matriisi[x][y]);

        eli


        for (x = 0; x < 5; x ){

        for (y = 0; y < 4; y ) {

        System.out.print(matriisi[x][y] "\t");
        }
        System.out.println(matriisi[x][y]);
        }

        Ongelmana on, että jokaisen rivin vikan numeron jälkeen tulee ylimääräinen välilyönti ennen rivinvaihtoa.


      • tabuvälilyönti

        Testasin koodiasi netbeansissä. Se tulosti jokaisen rivin loppuun tabulaattorin (~välilyöntejä).
        Alla olevalla koodilla ei tullut rivien loppuun mitään ylimääräistä.


        public static void tulosta_matriisi(int matriisi[][]) {

        int x, y;

        for (x = 0; x < 5; x ){

        for (y = 0; y < 4; y ) {

        System.out.print(matriisi[x][y] "\t");
        }
        System.out.println(matriisi[x][y]);
        }

        }


      • tabuvälilyönti kirjoitti:

        Testasin koodiasi netbeansissä. Se tulosti jokaisen rivin loppuun tabulaattorin (~välilyöntejä).
        Alla olevalla koodilla ei tullut rivien loppuun mitään ylimääräistä.


        public static void tulosta_matriisi(int matriisi[][]) {

        int x, y;

        for (x = 0; x < 5; x ){

        for (y = 0; y < 4; y ) {

        System.out.print(matriisi[x][y] "\t");
        }
        System.out.println(matriisi[x][y]);
        }

        }

        Kiitos. Toimii! :)


    • Vielä olisi viimeinen tehtävä, joka melkeen valmis, mutta ei tulosta oikein. Keskimmäinen osuus eli class Auto extends Ajoneuvo on mun koodia, jota voi muuttaa. Tulostaa auto on käynnissä, vaikka pitäisi tulostaa ei ole käynnissä.


      import java.io.*;

      class Ajoneuvo{

      private int paino;
      private int huippunopeus;
      private int ajetut_kilometrit;

      Ajoneuvo(int paino, int huippunopeus, int ajetut_kilometrit){
      this.paino = paino;
      this.huippunopeus = huippunopeus;
      this.ajetut_kilometrit = ajetut_kilometrit;
      }

      protected void aja(int ajettava_matka){
      this.ajetut_kilometrit = ajettava_matka;
      }

      protected int anna_paino(){
      return this.paino;
      }

      protected int anna_huippunopeus(){
      return this.huippunopeus;
      }

      protected int anna_ajetut_kilometrit(){
      return this.ajetut_kilometrit;
      }
      }


      class Auto extends Ajoneuvo {
      String merkki, malli, rekisteri_nro;
      boolean kaynnissa = false;

      Auto(int paino, int huippunopeus, int ajetut_kilometrit, String merkki, String malli, String rekisteri_nro, boolean kaynnissa) {
      super(paino, huippunopeus, ajetut_kilometrit);
      this.merkki = merkki;
      this.malli = malli;
      this.rekisteri_nro = rekisteri_nro;
      this.kaynnissa = kaynnissa; }

      public void kaynnista() {
      kaynnissa = true; }

      public void sammuta() {
      kaynnissa = false; }

      public void katsasta() {
      System.out.println("Auton tiedot:\nMerkki: " merkki "\nMalli: " malli "\nAjokilometrit: " super.anna_ajetut_kilometrit() "\nPaino (kg): " super.anna_paino() "\nHuippunopeus (km/h): " super.anna_huippunopeus() "\nRekisterinumero: " rekisteri_nro);
      if(kaynnissa = true) {
      System.out.println("Auto on käynnissä"); }
      else {
      System.out.println("Auto ei ole käynnissä"); }
      } }

      public class Autoilua
      {
      public static void main(String[] args)
      {

      BufferedReader lukija = new BufferedReader(new InputStreamReader(System.in));
      int paino, nopeus, km;
      String merkki, malli, rekkari;
      try
      {
      System.out.println("Anna auton merkki:");
      merkki = lukija.readLine();
      System.out.println("Anna auton malli:");
      malli = lukija.readLine();
      System.out.println("Anna auton rekisterinumero:");
      rekkari = lukija.readLine();
      System.out.println("Anna auton paino:");
      paino = Integer.parseInt(lukija.readLine());
      System.out.println("Anna auton huippunopeus:");
      nopeus = Integer.parseInt(lukija.readLine());
      System.out.println("Anna autolla ajetut kilometrit:");
      km = Integer.parseInt(lukija.readLine());
      System.out.println("\n");

      Auto autoX = new Auto(paino, nopeus, km, merkki, malli, rekkari, false);

      autoX.katsasta();
      autoX.kaynnista();
      autoX.aja(95);
      System.out.print("\n\n");

      autoX.katsasta();
      }
      catch (Exception e)
      {
      System.out.println("Virhetilanne!");
      }
      }
      }

      • vertailu_ei_sijoitus

        if(kaynnissa == true) {
        System.out.println("Auto on käynnissä"); }
        else {
        System.out.println("Auto ei ole käynnissä"); }
        } }


      • sivuhuomautus

        Lisäksi listauksestasi on ilmeisesti pudonnut rivi:
        autoX.sammuta();

        koska muutenhan auto on käynnissä:

        "
        autoX.katsasta();
        autoX.kaynnista(); <-- käynnistys
        autoX.aja(95);
        System.out.print("\n\n");

        autoX.katsasta(); <--- tulostus tuolla
        "

        Virhe kuitenkin on tuo aikaisemmin mainittu if lauseessa käytetty sijoitus vertailun sijasta. Voi olla vaikea huomata varsinkin kun on tuijottanut silmänsä sokeiksi!


      • korjaus_edelliseen

        Onhan se ensimmäisellä katsastuksella sammuksissa:

        "
        autoX.katsasta(); <-- vielä sammuksissa kun tulostetaan ekaa kertaa
        autoX.kaynnista(); <-- käynnistys
        autoX.aja(95);
        System.out.print("\n\n");

        autoX.katsasta(); <--- tulostus tuolla, auto käynnissä
        "


      • fght

        Onhan pöljä kieli jos se sallii ehtolauseen if(kaynnissa = true)


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

    Luetuimmat keskustelut

    1. Porvarimediat paniikissa demareiden huiman kannatuksen vuoksi

      Piti sitten keksiä "nimettömiin lähteisiin" perustuen taas joku satu. Ovat kyllä noloja, ja unohtivat sen, että vaalit
      Maailman menoa
      98
      6278
    2. KATASTROFI - Tytti Tuppurainen itse yksi pahimmista kiusaajista!!!

      STT:n lähteiden mukaan SDP:n eduskuntaryhmän puheenjohtaja Tytti Tuppurainen on käyttäytynyt toistuvasti epäasiallisesti
      Maailman menoa
      350
      5764
    3. Mikä siinä on ettei persuille leikkaukset käy?

      On esitetty leikkauksia mm. haitallisiin maataloustukiin, kuin myös muihin yritystukiin. Säästöjä saataisiin lisäksi lei
      Maailman menoa
      60
      2763
    4. Lääppijä Lindtman jäi kiinni itse teosta

      Lindtman kyselemättä ja epäasiallisesti koskettelee viestintäpäällikköä. https://www.is.fi/politiikka/art-2000011780852
      Maailman menoa
      107
      2198
    5. Juuri nyt! Tytti Tuppurainen on käyttäytynyt toistuvasti epäasiallisesti

      Ai että mä nautin, Tytti erot vireille! "Käytös on kohdistunut avustajia ja toisia kansanedustajia kohtaan, uutisoi STT
      Maailman menoa
      107
      1888
    6. Onko kaivattusi

      liian vetovoimainen seksuaalisesti?
      Ikävä
      125
      1744
    7. Puolen vuoden koeaika

      Voisi toimia meillä. Ensin pitäis selvittää "vaatimukset" puolin ja toisin, ennen kuin mitään aloittaa. Ja matalalla pro
      Ikävä
      19
      1633
    8. Tytti Tuppurainen nöyryyttää avustajiaan

      Tytti Tuppurainen nöyryyttää SDP:n eduskuntaryhmän kokouksissa sekä avustajia että kansanedustajia. Hän nolaa ihmisiä ju
      Kotimaiset julkkisjuorut
      181
      1290
    9. On todella hassua

      Ajatella että pitäisit erityisen kuumana tai seksikkäänä?
      Ikävä
      73
      1197
    10. Huomaatteko Demari Tytti ei esitä pahoitteluitaan

      Samanlainen ilmeisesti kuin Marin eli Uhriutuu no he ovat Demareita ja muiden yläpuolella siis omasta mielestään
      Maailman menoa
      33
      1088
    Aihe