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? :)
Apua kaivataan harjoitustehtävään
29
4233
Vastaukset
- 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.
- zlxkjv
http://keskustelu.suomi24.fi/t/12291228/javassa-olio-ohjelmointia-(viope)
Voisi tietysti kertoa mitä on yrittänyt ja mistä kiikastaaOlen 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
Tuolta voi löytyä vastaus joko vanhoista tai avaa uusi kysymys
http://www.ohjelmointiputka.net/keskustelu/28667-viopen-java-tehtävissä-ongelmia/sivu-1 - 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.htmEka 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
Kyllä tiedän että ajattelet
Niin ajattelen minäkin. Sinulla tuskin on yhtään sen helpompi olla kuin minullakaan tällä hetkellä.. Toisaalta ehkä tä196858- 51074
Martina, yksityishenkilön ex vihaa häntä
Seiska ja IL kirjoittaa, että yksityishenkilön ex on veemäinen ja vihaa Martinaa. Onneksi ex on 13000 km päässä.192957- 36878
- 283873
Parempaa uutta
vuotta dear. Kun vuosi vaihtuu, olet ensimmäisenä mielessäni. Uusi vuosi ei pyyhi pois vanhan vuoden tunteita.47861Ensi vuonna
Toivon että meistä tulee vähintään ystäviä. Olemme samankaltaisia ja ymmärrämme toisiamme. Haluaisin oppia tuntemaan sin20801Yksi elämän pahimmista virheistä
Olla tekemättä mitään, jos on jostakin oikeasti kiinnostunut ja jää vain miettimään, sekä kaipaamaan. Sekin parempi, jo29797- 63772
Ikävän väkivaltaiseksi mennyt Kannuksessa,.
Meno Monossa, , kesken rauhallisen illan , entinen portsari tulee vetään tuntematonta asiakasta turpaan. Räyhää ja haa36766