Nyckelord: While-loopen, Scanner
Uppgift 11 - Summera tal
Skriv ett program som upprepande gånger ber användaren att ange ett heltal och som vid avslut skriver ut summan av alla jämna och alla udda heltal. Programmet ska avslutas när användaren skriver Q och varna om användaren skriver in ett ogiltigt värde.
Exempel på output:
Skriv in en siffra. Avsluta med "Q".
10
Ange nytt tal eller avsluta med "Q"
13
Ange nytt tal eller avsluta med "Q"
5
Ange nytt tal eller avsluta med "Q"
4
Ange nytt tal eller avsluta med "Q"
CodeBean
Du skrev inte in något giltigt värde. Försök igen eller avsluta med "Q".
Ange nytt tal eller avsluta med "Q"
Q
Avslutar...
Summan av alla udda tal är: 18 och summan av alla jämna tal är: 14
Ledtråd
Scanner har en inbyggd metod hasNext() som man kan anropa för att invänta ett nytt värde från användaren. Anropa metoden i en while-loop.
Scanner input = new Scanner(System.in);
while (input.hasNext()) {
}
När användaren har skrivit in ett värde, avgör om värdet är en int eller String för att avgöra vilken output programmet ska göra härnäst.
Svar
Förklaring
import java.util.Scanner;
public class Uppgift11 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
long odd = 0;
long even = 0;
System.out.println("Skriv in en siffra. Avsluta med \"Q\".");
while (input.hasNext()) {
if (input.hasNextInt()) {
int number = input.nextInt();
if (number % 2 == 0) {
even += number;
} else {
odd += number;
}
} else {
String str = input.next();
if (str.equalsIgnoreCase("Q")){
System.out.println("Avslutar...");
break;
} else {
System.out.println("Du skrev inte in något giltligt värde. Försök igen eller avsluta med \"Q\".");
}
}
System.out.println("Ange nytt tal eller avsluta med \"Q\" ");
}
System.out.println("Summan av alla udda tal är: " + odd + " och summan av alla jämna tal är: " + even);
}
}
Anropet
while (input.hasNext()) {
}
inväntar en ny input från användaren. Vi kan sedan avgöra om värdet som användaren skrev in var ett heltal med hasNextInt() som returnerar true om värdet är ett heltal. Om det inte är ett heltal, tolkar vi inputen som en textsträng och kontrollerar om inputen var "Q" eller inte. Eftersom vi anropar input.hasNext() från en while-loop, kommer programmet fortsätta fråga användaren efter input tills dess att break anropas som avbryter loopen.