#java #loops #java.util.scanner
#java #циклы #java.util.scanner
Вопрос:
Я должен написать основную программу, которая запрашивает у пользователя число от 10 до 20 и печатает четные числа от этого числа до 50. Если число не находится в диапазоне 10 и 20 включительно, программа будет продолжать запрашивать у пользователя действительное число.
Пока это то, что у меня есть
package com.company;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// write your code here
Scanner keyboard = new Scanner(System.in);
System.out.println("Please choose a number between 10 and 20! ");
int number = keyboard.nextInt();
int newnumber = number;
while (number <= 10 || number >= 20) {
System.out.print("No, between 10 and 20: ");
System.out.println("Please choose a number between 10 and 20! ");
number = keyboard.nextInt();
}
while (number >= 10 || number <= 20) {
int limit = 50;
for (int i= 10; newnumber <= 50; i ) {
if (i% 2 == 0) {
System.out.println(newnumber);
newnumber=newnumber 2;
}
}
}
}
}
Комментарии:
1. Итак, в чем именно заключается вопрос?
2. мой код не выдает четные числа, если пользователь вводит нечетное число
3. Замените все после первого
while
цикла этим:IntStream.rangeClosed(number, 50).filter(n -> n%2 == 0).forEach(System.out::println);
Ответ №1:
Не имеет отношения к вашей проблеме, но ваш первый цикл while не позволит пользователю ввести 10 или 20, потому что цикл while продолжает проверять, равен ли ввод этим двум.
Ваш второй цикл while мало что делает и имел бы больше смысла как оператор if — если вы еще не проверили, что он был в диапазоне в вашем первом цикле while .
Теперь ваша реальная проблема в том, что вы запускаете свой счетчик как i
но увеличиваете newnumber
. Даже если бы вы увеличивали i
, это все равно никогда не сработало бы для коэффициентов, потому что ваше начальное число нечетное, и вы увеличиваете на 2. Ваши два варианта заключаются в том, чтобы
- начинайте i с числа, если число не нечетное, тогда число 1
- увеличивайте счетчик циклов на 1 с каждой итерацией
Используя первый вариант
while (number < 10 || number > 20) {
System.out.print("No, between 10 and 20: ");
System.out.println("Please choose a number between 10 and 20! ");
number = keyboard.nextInt();
}
for (int i = (number % 2 == 0 ? number : number 1); i <= 50; i =2) {
System.out.println(newnumber);
}
Обратите внимание, что я перестал проверять, была ли каждая итерация четной, потому что я убедился, что начинал с четного числа и увеличивал на 2.