Apua kaivataan harjoitustehtävään

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? :)
294809
Äänestä

Muut lukivat myös

Vastaukset 29

Vanhimmat

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.

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

    Äänestä

  • 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);

    }
    }

    Äänestä

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ä

Äänestä
  • En tajunnut tosta nyt mitään :D

    Eli mulla tulee vaan virheilmoitus tosta ekasta rivistä.

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

    Äänestä

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.

Äänestä
  • 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");
    }
    }

    Äänestä

  • 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());

    Äänestä

  • 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)

    Äänestä

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

Äänestä
  • 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ää?

    Äänestä

  • 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)

    Äänestä

  • 3. vaihtoehto antaa virheilmoituksen:

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

    Äänestä

  • 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");}

    Äänestä

  • 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

    Äänestä

Oletko pinnannut oppitunneilta?

Äänestä

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();
}

}

Äänestä
  • 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]);
    }

    Äänestä

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

    Äänestä

  • 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.

    Äänestä

  • 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]);
    }

    }

    Äänestä

  • 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! :)

    Äänestä

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!");
}
}
}

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

    Äänestä

  • 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!

    Äänestä

  • 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ä
    "

    Äänestä

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

    Äänestä

Kommentoi aloitusta


samppis77 kirjoitti:

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? :)

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