Kyseessä on ohjelma, joka ottaa vastaan syötettyjä pistemääriä kunnes lopuksi syötetään nolla. Ohjelma tulostaa pisteiden keskiarvon ja pienimmän syötetyn pistemäärän. Alla on tekemäni versio, mutta ajattelin vain kysäistä saako tuota mahdollisesti tehtyä jotenkin yksinkertaisemmin:
import java.util.Scanner; public class Pistemäärät { static Scanner lukija = new Scanner(System.in); public static void main(String args[]) { int pistemäärä; int pieninPistemäärä = 0; double keskiarvo; int laskuri = 0; double toistokerrat = -1; System.out.println("Lasken antamiesi pistemäärien summan ja niiden keskiarvon. 0 lopettaa ohjelman."); do { System.out.print("Anna pistemäärä: "); pistemäärä = lukija.nextInt(); while (pistemäärä < 0) { System.out.print("Pistemäärä ei voi olla pienempi kuin 0. Anna pistemäärä uudestaan: "); pistemäärä = lukija.nextInt(); } if (pieninPistemäärä == 0) { pieninPistemäärä = pistemäärä; } if (pistemäärä < pieninPistemäärä & pistemäärä != 0) { pieninPistemäärä = pistemäärä; } laskuri += pistemäärä; toistokerrat++; }while(pistemäärä != 0); keskiarvo = laskuri / toistokerrat; System.out.printf("\nPistemäärien summa on " + laskuri + " ja keskiarvo on %.2f.\n", keskiarvo); System.out.println("Pienin annettu pistemäärä oli " + pieninPistemäärä); } }
Lisäys:
Vastaan itselleni: sain koodia yksinkertaisemmaksi kun pistin pistemäärälle ylärajan, jolloin tuli seuraavat muutokset:
int pieninPistemäärä = 100;
while (pistemäärä < 0 || pistemäärä > 100) { System.out.print("Pisteiden tulee olla väliltä 1-100. Anna pistemäärä uudestaan: "); pistemäärä = lukija.nextInt(); } if ((pistemäärä <= pieninPistemäärä) && pistemäärä != 0) { pieninPistemäärä = pistemäärä; }
En näe mitään tarvetta pistää keinotekoista ylärajaa, kun int tietotyypillä on muutenkin yläraja. Itse tekisin näin
import java.util.Scanner; public class Pistemäärät { static Scanner lukija = new Scanner(System.in); public static void main(String args[]) { int pienin = Integer.MAX_VALUE; int summa = 0; int määrä = 0; System.out.println("Lasken antamiesi pistemäärien summan ja niiden keskiarvon. 0 lopettaa ohjelman."); while (true) { System.out.print("Anna pistemäärä: "); int pistemäärä = lukija.nextInt(); if (pistemäärä == 0) { break; } if (pistemäärä < 0) { System.out.print("Pistemäärä ei voi olla pienempi kuin 0. "); } else { if (pistemäärä < pienin) { pienin = pistemäärä; } summa += pistemäärä; määrä++; } } if (määrä == 0) { system.out.println("Ei lukuja"); } else { System.out.printf("\nPistemäärien summa on " + summa + " ja keskiarvo on %.2f.\n", summa/määrä); System.out.println("Pienin annettu pistemäärä oli " + pienin); } } }
Eipähän tuo nyt merkittävästi yksinkertaisempi ole. Yhden turhan toiston poistin. Toisaalta lisäsin sinne tarkistuksen ettei tule jako nollalla poikkeusta, jos ei syötetä yhtään lukua.
Kiitoksia vastauksesta! Tuo int:n yläraja olikin hyvä tietää, mietin että onko sillä sellaista ja miten sitä käytetään mutta se kävikin näköjään aika helposti...
Aihe on jo aika vanha, joten et voi enää vastata siihen.