Java pähkinään apua.

  • Keskustelun aloittaja Keskustelun aloittaja arct
  • Aloitettu Aloitettu
Liittynyt
13.01.2017
Viestejä
71
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ä);
}
}
}
}
 
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ä);
            }
        }
 
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ä);
}
}


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

Uusimmat viestit

Statistiikka

Viestiketjuista
261 820
Viestejä
4 548 289
Jäsenet
74 850
Uusin jäsen
Max-fix

Hinta.fi

Back
Ylös Bottom