Java fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

2.2 KiB

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.

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);
}
}