Java tehtävään apua

Käytän Eclipseä, mutta itse en ymmärrä miksi ohjelma ei suostu toimimaan. Tarkoituksena olisi tulostaa seuraavanlainen pätkä:

Ohjelma laskee yhteen haluamasi ajanjakson aikana
tehdyt työtunnit sekä keskimääräisen työpäivän pituuden.

Kuinka monta päivää:5
Anna 1. päivän työtunnit:7.4
Anna 2. päivän työtunnit:4.8
Anna 3. päivän työtunnit:7.5
Anna 4. päivän työtunnit:8.6
Anna 5. päivän työtunnit:6.7

Tehdyt työtunnit yhteensä: 35.0
Keskimääräinen työpäivän pituus: 7.0
Syötetyt tunnit: 7.4 4.8 7.5 8.6 6.7

Koodini on tällä hetkellä:

import java.io.*;

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

{
double paivat;
double paivat2 = 1;
double tunnit;
double i;
double tunnit1 = 0;
double kaikki = 0;
double taulukko[] = new double[31];
double keskimaara;

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

try
{

System.out.print("Ohjelma laskee yhteen haluamasi ajanjakson aikana tehdyt\n");
System.out.print("työtunnit sekä keskimääräisen työpäivän pituuden.\n");
System.out.print("Kuinka monta päivää:");
paivat = Double.parseDouble(in.readLine());

for (i = 1; i < paivat; i )
{
System.out.print("Anna " i ". päivän työtunnit:");
tunnit1 = Double.parseDouble(in.readLine());
kaikki = tunnit1;
taulukko[i] = tunnit1;

}

System.out.print("Tehdyt työtunnit yhteensä:" kaikki);

keskimaara = ((int)((kaikki / paivat) * 10)) / 10.0;

System.out.print("Keskimääräinen työpäivän pituus:\n" keskimaara);

System.out.print("Syötetyt tunnit:");

for (i = 1; i < paivat; i )
{
System.out.print("" taulukko[i]);
}
}
catch(Exception e)
{
System.out.print("virhe!!! ");
}
}
}

Kiitos avusta jo etukäteen
Ilmianna
Jaa

16 Vastausta



En testannu, mutta ainakin yksi virhe löytyy. Taulukon eka alkio on taulukko[0] eikä taulukko[1]
Ilmianna
Jaa
Juu sain tuon ylläolevan tehtävän hoidettua nyt puolestaan jumitan tälläisessä tehtävässä:

Alla oleva Java-ohjelman pitäisi tulostaa seuraavanlaisen matriisin:

Matriisi:

32 32 2 23 33
32 23 33 332 32
42 43 44 32 31
83 86 56 545 44
33 37 38 39 30

Matriisin alkioiden summa: 1757

Tehtäväni olisi tehdä tähän koodiin metodit matriisi() ja laske_summa() :

public static int vastaanottaa_kaksi_ulot_taulukon(int[][] taulukolle_nimi);

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);
}
}
// Metodit tulosta_matriisi() ja laske_summa()
// kirjoitetaan tähän ...
}

Tässä on mitä olen saanut aikaseksi:

public static void tulosta_matriisi(int[][] natriisi ){
int x,y;
for(x = 0; x < 5; x ){
for(y = 0; y < 5; y ){
System.out.print(natriisi[x][y] " ");
System.out.println();

}
}
}
static void laske_summa(int[][] natriisi);

int x, y;
int summa=0;
for(x = 0; x < 5; x )
{
for(y = 0; y < 5; y )
{
summa = summa natriisi[x][y];
}

System.out.println("Summa on: " summa);
}

En itse ainakaan saa selvitettyä tätä.
Kommentoi
Ilmianna
Jaa
1 VASTAUS:
for-luuppien loppusulkuja puuttuu, laita luupit sisäkkäin, ei peräkkäin, pitää käydä koko matriisin rivi läpi ja sitten siirtyä seuraavalle riville ja käydä se kokonaan läpi, laske_summa ei ole static....
Kovasti on sinulla vielä tekemistä.
Kommentoi
Ilmianna
Jaa
+Lisää kommentti
Nyt olen kyllä ihan pihalla:, tässä on mitä sain aikaiseksi :D

void tulosta_matriisi(int[][] natriisi){
int x;
int y;

for(x = 0; x < 5; x ){
System.out.print(natriisi[x][y] " ");
for(y = 0; y < 5; y ){
System.out.println();}
}
}

void laske_summa(int[][] natriisi){

int x, y;
int summa;

for(x = 0; x < 5; x ){
for(y = 0; y < 5; y ){
summa = summa natriisi[x][y];}
}

System.out.println("Summa on: " summa);
}
}
Kommentoi
Ilmianna
Jaa
2 VASTAUSTA:
Katso netistä joku esimerkki sisäkkäisten luuppien käytöstä.
Ja ole tarkkana aaltosulklujen kanssa. Jos on alkusulku, pitää löytyä myös loppusulku.
Esim:
for(i=0;i
Kommentoi
Ilmianna
Jaa
muista_sulut kirjoitti:
Katso netistä joku esimerkki sisäkkäisten luuppien käytöstä.
Ja ole tarkkana aaltosulklujen kanssa. Jos on alkusulku, pitää löytyä myös loppusulku.
Esim:
for(i=0;i
No nyt selvis sekavuus ainakin osaksi. Palstalta jää aaltosulut pois, jos ne on omalla rivillä. Tosi kätevää java-palstalla!
Otetaan uusiksi. Aaltosulkujen tilalla sanat alku ja loppu.

for(i=0;i
Kommentoi
Ilmianna
Jaa
+Lisää kommentti
Kiitos vastauksista, nyt pitäisi olla aaltosulut kohdillaan Eclipsen mukaan, mutta en kyllä saa vieläkään koodia toimimaan :DD

public static int tulosta_matriisi(int[][] natriisi ){
int x,y;
for(x = 0; x < 5; x ){
for(y = 0; y < 5; y ){
System.out.print(natriisi[x][y] " ");
System.out.println();

}
}
}
public static int laske_summa(int[][] natriisi){

int x, y;
int summa=0;
for(x = 0; x < 5; x )
{
for(y = 0; y < 5; y )
{
summa = summa natriisi[x][y];
}
}

System.out.println("Summa on: " summa);
}
}
Kommentoi
Ilmianna
Jaa
1 VASTAUS:
Onhan sulla jossakin main-metodi? Eikä noita laskemis- tai tulostus-metodeja tarvi static-metodeiksi laittaa.
Main-metodi tarvitaan, jos aiot ajaa ohjelman komentoriviltä.
Kommentoi
Ilmianna
Jaa
+Lisää kommentti
Auttakaa ummikkoa!! Miten tälläisen saisi ohjelmoitua javalla??

Kukkiensidontayhdistyksen hallitus on pitkään kinastellut uuden siimaleikkurin hankinnasta (”Pelastakaa piharatamot”- yhdistyksen suureksi kauhuksi). Asiasta joudutaan järjestämään äänestys. Hallituksessa on 9 jäsentä. Tee algoritmi joka laskee (ja ilmoittaa) ”JAA”- äänten ja ”EI”- äänten lukumäärän. Myös tyhjät äänet sallitaan

hjälp!!
Ilmianna
Jaa
Javabeginner, jos jostain ihmeen syystä satut seuraamaan tätä keskustelua edelleen niin how the hell sait ton työaikalaskimen toimimaan? :D Olen taistellut tehtävän parissa nyt päiviä ja ei mene käkättimeen mitenkään että mitä ihmettä tolle tehtävälle enää olisi edes tehtävissä.

Mulla tyssää siis siihen että ohjelmaan syötetään double arvo ja sen jälkeen antaa suoraan virheilmoituksen. Sehän johtuu siis siitä että ohjelma siinä vaiheessa ottaa vastaan vaan int -tyyppisiä muuttujia vaikka pitäisi ottaa double -tyyppisiä.. MUTTA kun se ei vaan auta että vaihtaa kaikki mahdolliset double -tyyppisiksi ja kaiken järjen mukaan sen pitäisi sen jälkeen toimia mutta ohjelman tarkistus antaa virheilmoituksen: Tarkista, ettet yritä sijoittaa esim. double-tyyppistä arvoa int-tyyppiseen muuttujaan. (??) Ei siis tossa tilanteessa ota vastaan mitään syötteitä kun osaa tosta herjata. Näistä virkkeistä herja tulee

syotetyt_tunnit = Double.parseDouble(in.readLine());
taulukko[i] = syotetyt_tunnit;

Jos joku osaa sanoa että mikä tässä on mätänä niin kerro IHMEESSÄ, kiitos. :D
Ilmianna
Jaa
Kannattaa aina käydä täällä suomi24:n keskustelupalstoilla manaamassa jos ei java tehtävistä viopen ohjelman tarkistuksen kanssa tule mitään, nimittäin aina näiden purkausten jäljiltä olen saanut ohjelmani toimimaan viopen vaatimalla tavalla... ;D Yrittelen ensin aina viopen avulla tehdä tehtäviä ja sitten netbeansillä ja sitten viimeisenä tänne keskustelupalstoille kyteksimään jos syttyisi hehkulamppu, ja manaus siis lopuksi niin johan tulee tehtäviä. Tietysti kanssakoodaajia ajatellen laitan valmiin koodin tänne jotta kukaan ei tuhlaisi yhtä paljon aikaa näihin tehtävien tekemiseen kuin minä:

import java.io.*;

public class Tunnit {
public static void main (String[]args){
double taulukko[] = new double [31];
double paivat = 0, kaikki = 0, keskipituus = 0, syotetyt_tunnit = 0;
int i = 1;

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

try {
System.out.println("Ohjelma laskee yhteen haluamasi ajanjakson aikana");
System.out.println("tehdyt työtunnit sekä keskimääräisen työpäivän pituuden. \n");

System.out.print("Kuinka monta päivää:");
paivat = Double.parseDouble(in.readLine());

for (i = 1; i
Kommentoi
Ilmianna
Jaa
1 VASTAUS:
Kiitän tästä, mulla oli float doublen tilalla ja toimi ensimmäisen testin hyvin, mutta seuravaan tuli pitkä sarja desimaaleja johon kaatui.
Kommentoi
Ilmianna
Jaa
+Lisää kommentti
2. kysy (System.out.println...) aluksi haluaako käyttäjä muuttaa kaloreita jouleiksi, vai jouleja kaloreiksi. "Anna 1 jos haluat antaa kaloreita, anna 2 jos haluat antaa jouleja". Tämä annettu luku luetaan talteen muuttujaan muunnos, eli koodissa muunnos = lukija.nextInt();
miten tein ne?
Ilmianna
Jaa
Debuggeri on kova laite. Kannattaa opetella käyttämään. Toinen on tietenkin, että kannattaa opetella javan syntaksi. Osasin 14 vuotiaana jo tehdä paremman koodin kahden viikon ohjelmointikokemuksella kuin tuo, kun tajusin käyttää debugeria siinä välissä ja katsoa watchilla, mitä oli missäkin paikoillaan ... tai no tunnustan - siihen aikaan debuggeri oli hieman huonompi ja jos sattui tekemään koodia symbooliassemblerilla, niin piti itse päätellä virheen syyn. Oli hieman nopeampaa kuin debuggaaminen, mutta miten ihmeessä niin yksinkertaisella kielellä kuin java voi olla tuon oppiminen mitenkään vaikeaa.
Ja sitten nämä ihmiset päätyvät koodaamaan ja on pakko miettiä heidän työtään katsoessaan mitä helvettiä. Ja kaiken huipuksi samat tyypit päätyvät vetämään koodaamista, eikä heille vieläkään ole avautunut, mikä virhe hommassa on.

Pieni avautuminen kahdenkymmen viiden vuoden koodaamisen jälkeen. :)

Eli jos oikeasti haluat oppia tuon koodaamisen, niin mieti omaa koodiasi sen jälkeen kun olet käynyt lenkillä ulkona ja rentoutunut. Vastaus voi olla selvempi.
Ilmianna
Jaa
Moro, mä teen tota samaa tehtävää. Mulla tää ohjemla toimii kokonaisluvuilla mutta ei suostu toimimaan desimaalilukuja käyttäessä.... Osaako joku sanoa missä vika?

import java.io.*;
public class Tunnit {
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
double summa = 0;
int paivat = 0;
double ka = 0;
int index;
double vector[] = new double[31];

try {

System.out.println("Ohjelma laskee yhteen haluamasi ajanjakson aikana");
System.out.println("tehdyt työtunnit sekä keskimääräisen työpäivän pituuden.");

System.out.print("Kuinka monta päivää:");
paivat = Integer.parseInt(in.readLine());

for(index = 1; index <= paivat; index ) {
System.out.print("Anna " index ". päivän työtunnit:");
vector[index] = Integer.parseInt(in.readLine());
summa = summa vector[index];
}
System.out.println("Tehdyt työtunnit yhteensä: " summa);
ka = summa / paivat;
System.out.println("Keskimääräinen työpäivän pituus: " ka);

System.out.println("Syötetyt tunnit: ");
for(index = paivat; index > 0; index--) {
System.out.println(vector[index]);
}
} catch(Exception e){
System.out.println("Error...");
}
}
}
Ilmianna
Jaa
Ei sittenkää mitää, sain toimimaa :D
Ilmianna
Jaa

Vastaa alkuperäiseen viestiin

Java tehtävään apua

Käytän Eclipseä, mutta itse en ymmärrä miksi ohjelma ei suostu toimimaan. Tarkoituksena olisi tulostaa seuraavanlainen pätkä:

Ohjelma laskee yhteen haluamasi ajanjakson aikana
tehdyt työtunnit sekä keskimääräisen työpäivän pituuden.

Kuinka monta päivää:5
Anna 1. päivän työtunnit:7.4
Anna 2. päivän työtunnit:4.8
Anna 3. päivän työtunnit:7.5
Anna 4. päivän työtunnit:8.6
Anna 5. päivän työtunnit:6.7

Tehdyt työtunnit yhteensä: 35.0
Keskimääräinen työpäivän pituus: 7.0
Syötetyt tunnit: 7.4 4.8 7.5 8.6 6.7

Koodini on tällä hetkellä:

import java.io.*;

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

{
double paivat;
double paivat2 = 1;
double tunnit;
double i;
double tunnit1 = 0;
double kaikki = 0;
double taulukko[] = new double[31];
double keskimaara;

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

try
{

System.out.print("Ohjelma laskee yhteen haluamasi ajanjakson aikana tehdyt\n");
System.out.print("työtunnit sekä keskimääräisen työpäivän pituuden.\n");
System.out.print("Kuinka monta päivää:");
paivat = Double.parseDouble(in.readLine());

for (i = 1; i < paivat; i )
{
System.out.print("Anna " i ". päivän työtunnit:");
tunnit1 = Double.parseDouble(in.readLine());
kaikki = tunnit1;
taulukko[i] = tunnit1;

}

System.out.print("Tehdyt työtunnit yhteensä:" kaikki);

keskimaara = ((int)((kaikki / paivat) * 10)) / 10.0;

System.out.print("Keskimääräinen työpäivän pituus:\n" keskimaara);

System.out.print("Syötetyt tunnit:");

for (i = 1; i < paivat; i )
{
System.out.print("" taulukko[i]);
}
}
catch(Exception e)
{
System.out.print("virhe!!! ");
}
}
}

Kiitos avusta jo etukäteen

5000 merkkiä jäljellä

Peruuta