|
|
- # Virheellisen syötteen lukeminen
-
- Kirjoita luokka `Summaaja` ja siihen `main`-metodi, jossa lasket käyttäjän syöttämien kokonaislukujen summan. Lukujen pyytäminen lopetetaan, kun käyttäjä syöttää luvun 0. Lopuksi ohjelmasi tulee tulostaa annettujen lukujen summa.
-
- Tässä tehtävässä ohjelmasi täytyy käsitellä virheelliset syötteet kaatumatta. Jos käyttäjä syöttää arvon, joka ei ole kelvollinen kokonaisluku, tulee ohjelman tulostaa teksti "Virheellinen syöte!" ja jatkaa lukujen kysymistä.
-
- **Huom:** ratkaisutavastasi riippuen saatat tässä tehtävässä törmätä ikuiseen silmukkaan, jossa ohjelmasi ei kysy virheellistä arvoa uudelleen. Tämä johtuu siitä, että virheellinen syöte jää System.in-syötepuskuriin ja seuraavalla kerralla ohjelmasi yrittää lukea samaa virheellistä arvoa uudelleen. [Stack Overflow -palvelussa on tarkempi keskustelu tästä aiheesta](https://stackoverflow.com/a/3572233).
-
- ```
- Syötä seuraava luku (0 lopettaa): 5
- Syötä seuraava luku (0 lopettaa): 4
- Syötä seuraava luku (0 lopettaa): kolme
- Virheellinen syöte!
-
- Syötä seuraava luku (0 lopettaa): 3
- Syötä seuraava luku (0 lopettaa): a b c d
- Virheellinen syöte!
-
- Syötä seuraava luku (0 lopettaa): 1
- Syötä seuraava luku (0 lopettaa): 0
-
- Lukujen summa on 13.
- ```
-
- **Summaaja.java**
-
- ```
- import java.util.InputMismatchException;
- import java.util.Scanner;
- import java.util.ArrayList;
-
- public class Summaaja {
-
- public static void main(String[] args) {
-
- int i, sum = 0;
- ArrayList<Integer> lukulista = new ArrayList<Integer>();
-
- while (true) {
- System.out.print("Syötä seuraava luku (0 lopettaa): ");
-
- Scanner syote = new Scanner(System.in);
-
- try {
- int luku = syote.nextInt();
-
- if (luku == 0) {
- break;
- } else {
- lukulista.add(luku);
- }
-
- } catch (InputMismatchException e) {
- System.out.println("Virheellinen syöte!");
- }
- }
-
- for (i = 0; i < lukulista.size(); i++) {
- sum += lukulista.get(i);
- }
-
- System.out.printf("Lukujen summa on %d.\n", sum);
- }
-
- }
- ```
|