Java pähkinään apua.

Liittynyt
13.01.2017
Viestejä
68
Hei,

osaakos joku taitaja jeesiä, että missä mättää kun koodi ei ns.pelitä:


Tavoite:
Tehdä ohjelma, joka kysyy arvosanoja (4-10 väliltä) ja laskee syötettyjen arvosanojen keskiarvon. Ohjelma kysyy arvosanoja, kunnes annetaan jokin negatiivinen luku. Jos käyttäjän antama arvosana ei ole välillä 4-10, tulostuu ilmoitus "Antamasi arvosana ei kelpaa!" ja arvosanan kysyminen toistuu. Lopuksi ohjelma tulostaa syötettyjen arvosanojen lukumäärän ja niiden keskiarvon näytölle. Jos arvosanoja ei annettu yhtään kappaletta, tulostuu ainoastaan ilmoitus "Et antanut yhtään arvosanaa.".

---ALKAAA---



double arvosana = 0;
double summa = 0;
int määrä = 0;


System.out.println("Ohjelma laskee syötettyjen arvosanojen keskiarvon. ");
System.out.println("Lopetus negatiivisella kokonaisluvulla.\n");

do {
System.out.print("Anna arvosana (4-10): ");
arvosana = lukija.nextDouble();

if (arvosana < 4 || arvosana > 10) {
System.out.println("Et antanut yhtään arvosanaa.");
}


} while(!(arvosana < 0.0)); {

if (määrä == 0) {
System.out.println("Antamasi arvosana ei kelpaa!");

} if (arvosana < 4 || arvosana > 10) {
System.out.println("Arvosanoja: " + määrä);
System.out.println("Keskiarvo: " + summa/määrä);
}
}
}
}
 
Liittynyt
22.10.2016
Viestejä
41
Ilmeisesti olet mooc-tehtäviä tekemässä? Kirjoittamasi koodi ei laske missään kohtaa määriä eikä summaa antamiasi lukuja ja lopussa if-lause vertaa vain annettua arvosanaa. Ehkä helpompi käyttää määrää myös tuohon. Alla olevilla muutoksilla pitäisi olla jo aika lähellä.

Koodi:
        do {
            System.out.print("Anna arvosana (4-10): ");
            arvosana = lukija.nextDouble();

            if (arvosana < 4 || arvosana > 10) {
                System.out.println("Antamasi arvosana ei kelpaa!");
            } else {
                määrä += 1; 
                summa = summa + arvosana;
            }
        } while(!(arvosana < 0.0));{

            if (määrä == 0) {
                System.out.println("Et antanut yhtään arvosanaa.");
            } else {     
                System.out.println("Arvosanoja: " + määrä);
                System.out.println("Keskiarvo: " + summa/määrä);
            }
        }
 
Liittynyt
13.01.2017
Viestejä
68
Tuhannet kiitokset jeesistä!!

Sain tolla pelittää juuri niin kuin oli tarpeen. vaihdoin elsen vielä if:iin.

do {
System.out.print("Anna arvosana (4-10): ");
arvosana = lukija.nextDouble();

if (arvosana < 4 && arvosana > 0 || arvosana > 10) {
System.out.println("Antamasi arvosana ei kelpaa!");

} if (arvosana >=4 && arvosana <=10) {
määrä += 1;
summa = summa + arvosana;
}

} while(!(arvosana < 0.0)); {

if (määrä == 0) {
System.out.println("Et antanut yhtään arvosanaa.");
} else {
System.out.println("\n Syötetty " + määrä + " arvosanaa.");
System.out.println("Arvosanojen keskiarvo: " + summa/määrä);
}
}


}
}
 
Liittynyt
16.11.2020
Viestejä
2 588
Noiden toistolausekkeiden kanssa kannattaa huomioida pidemmässä juoksussa se, että nuo käyttäytyvät hiukka toisistaan poiketen sen suhteen, mitä niissä tulee suoritetuksi. Tuo Do-While -rakenne esim. tekee sen, että tuolla Do-lohkossa oleva tavara tulee suoritetuksi aina vähintään kerran, vaikka perässä tulevassa While-lohkossa oleva ehto ei toteudu. Rakenteesta vaan tullaan ulos heti ekan kerran jälkeen. Pelkkään While-lohkoon ei mennä ollenkaan, jos ehto ei toteudu. Eli noita pitäs koittaa miettiä sitä kautta, mikä sopii mihinkin tilanteeseen parhaiten.

Do-Whilea ei ihan hirveästi näe käytettävän, enemmän käytetään pelkkiä For-luuppeja (suosien läpijuoksevia eikä indeksiperusteisia), While-rakenteita tai Lambdoja, mutta ei tuossakaan rakenteessa mitään vikaa sinällään kai ole, jos sitä käyttää vaan oikeassa paikassa.

Tuollaisia "tuplaehtoja", kuten '!(arvosana < 0.0) ' kannattais välttää. Lähinnä koodista tulee heikommin luettavaa. Tuohan on sanallisesti "ei pienempi kuin nolla", joka on taas sama asia kuin suurempi tai yhtä suuri kuin nolla. Eli mieluummin yhdellä selkeällä ehdolla nuo rakenteet turhien negaatioiden sijaan.
 
Toggle Sidebar

Statistiikka

Viestiketjut
239 674
Viestejä
4 188 434
Jäsenet
70 778
Uusin jäsen
Heiniks

Hinta.fi

Ylös Bottom