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

4020

    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. Mielessäni vieläkin T

      Harmi että siinä kävi niinkuin kävi, rakastin sinua. Toivotan sulle kaikkea hyvää. Toivottavasti löydät sopivan ja hyvän
      Ikävä
      39
      1977
    2. Pupuhuhdasta löytyi lähes sadan kilon miljoonalasti huumeita

      Pupuhuhdasta löytyi lähes sadan kilon miljoonalasti huumeita – neljä Jyväskylän Outlaws MC:n jäsentä vangittu: "Määrät p
      Jyväskylä
      43
      1516
    3. Persut petti kannattajansa, totaalisesti !

      Peraujen fundamentalisteille, vaihtkaa saittia. Muille, näin sen näimme. On helppo luvata kehareille, eikä ne ymmärrä,
      Maailman menoa
      28
      1428
    4. Ei luottoa lakko maahan

      Patria menetti sovitun ksupan.
      Suomen Keskusta
      19
      1427
    5. Nellietä Emmaa ja Amandaa stressaa

      Ukkii minnuu Emmaa ja Amandaa stressaa ihan sikana joten voidaanko me koko kolmikko hypätä ukin kainaloon ja syleilyyn k
      Isovanhempien jutut
      6
      1421
    6. Nähtäiskö ylihuomenna taas siellä missä viimeksikin?

      Otetaan ruokaöljyä, banaaneita ja tuorekurkkuja sinne messiin. Tehdään taas sitä meidän salakivaa.
      Ikävä
      1
      1385
    7. Sinäkö se olit...

      Vai olitko? Jostain kumman syystä katse venyi.. Ajelin sitten miten sattuu ja sanoin ääneen siinä se nyt meni😅😅... Lis
      Ikävä
      2
      1357
    8. Housuvaippojen käyttö Suomi vs Ulkomaat

      Suomessa housuvaippoja aletaan käyttämään vauvoilla heti, kun ne alkavat ryömiä. Tuntuu, että ulkomailla housuvaippoihin
      Vaipat
      1
      1290
    9. Hyvää yötä ja kauniita unia!

      Täytyy alkaa taas nukkumaan, että jaksaa taas tämän päivän haasteet. Aikainen tipu madon löytää, vai miten se ärsyttävä
      Tunteet
      2
      1230
    10. Lepakot ja lepakkopönttö

      Ajattelin tehdä lepakkopöntön. Tietääkö joku ovatko lepakot talvella lepakkopöntössä ´vai jossain muualla nukkumassa ta
      5
      1217
    Aihe