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

29 Vastausta



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.
Kommentoi
Ilmianna
Jaa
1 VASTAUS:
20 tehtävää olen tehnyt, mut tää ei vaa onnistu. Ei oo pakko auttaa :D
Kommentoi
Ilmianna
Jaa
+Lisää kommentti
http://keskustelu.suomi24.fi/t/12291228/javassa-olio-ohjelmointia-(viope)

Voisi tietysti kertoa mitä on yrittänyt ja mistä kiikastaa
Kommentoi
Ilmianna
Jaa
1 VASTAUS:
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);

}
}
Kommentoi
Ilmianna
Jaa
+Lisää kommentti
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ä
Kommentoi
Ilmianna
Jaa
1 VASTAUS:
En tajunnut tosta nyt mitään :D

Eli mulla tulee vaan virheilmoitus tosta ekasta rivistä.

Tarkista oletko unohtanut luokan määrittelystä varatun sanan class?
Kommentoi
Ilmianna
Jaa
+Lisää kommentti
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.
Kommentoi
Ilmianna
Jaa
3 VASTAUSTA:
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");
}
}
Kommentoi
Ilmianna
Jaa
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());
Kommentoi
Ilmianna
Jaa
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)
Kommentoi
Ilmianna
Jaa
+Lisää kommentti
Tuolta voi löytyä vastaus joko vanhoista tai avaa uusi kysymys

http://www.ohjelmointiputka.net/keskustelu/28667-viopen-java-tehtävissä-ongelmia/sivu-1
Ilmianna
Jaa
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
Kommentoi
Ilmianna
Jaa
5 VASTAUSTA:
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ää?
Kommentoi
Ilmianna
Jaa
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)
Kommentoi
Ilmianna
Jaa
3. vaihtoehto antaa virheilmoituksen:

eka.java:9: unreported exception java.io.IOException; must be caught or declared to be thrown
olio.teeHommasi(merkkijono);
Kommentoi
Ilmianna
Jaa
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");}
Kommentoi
Ilmianna
Jaa
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
Kommentoi
Ilmianna
Jaa
+Lisää kommentti
Oletko pinnannut oppitunneilta?
Ilmianna
Jaa
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();
}

}
Kommentoi
Ilmianna
Jaa
5 VASTAUSTA:
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]);
}
Kommentoi
Ilmianna
Jaa
y++ suurentaa arvo ennen vertailua y<4, jolloin y on silmukasta pois lähtiessä arvossa 4. Näin ainakin ajattelin.
Kommentoi
Ilmianna
Jaa
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.
Kommentoi
Ilmianna
Jaa
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]);
}

}
Kommentoi
Ilmianna
Jaa
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! :)
Kommentoi
Ilmianna
Jaa
+Lisää kommentti
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!");
}
}
}
Kommentoi
Ilmianna
Jaa
4 VASTAUSTA:
if(kaynnissa == true) {
System.out.println("Auto on käynnissä"); }
else {
System.out.println("Auto ei ole käynnissä"); }
} }
Kommentoi
Ilmianna
Jaa
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!
Kommentoi
Ilmianna
Jaa
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ä
"
Kommentoi
Ilmianna
Jaa
Onhan pöljä kieli jos se sallii ehtolauseen if(kaynnissa = true)
Kommentoi
Ilmianna
Jaa
+Lisää kommentti

Vastaa alkuperäiseen viestiin

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

5000 merkkiä jäljellä

Peruuta