#java #for-loop
Вопрос:
Я попытался создать программу, которая сообщит вам таблицу любого числа по вашему выбору. Но цикл, который я создал, не останавливается и работает бесконечно
public static void main(String[] args) {
System.out.println("Enter the number you want to take table of print");
Scanner sc = new Scanner(System.in);
// sc multi starts from 1 and is increase everytime the loop will start so that we can multiply it with number increased//
int scintmulti = 1;
// scnintll is the number which is scint * 10 because we have to take the table until it we reach the scint x 10
int scintll = sc.nextInt()*10;
for (int scint = sc.nextInt(); scint <= scintll; scintmulti ) {
System.out.println(scint "*" scintmulti "=" scint * scintmulti);
sc.close();
}
}}
Комментарии:
1. Почему это должно закончиться? Условие в цикле for есть
scint <= scintll
(что означает, что цикл for закончится, когдаscint > scintll
), но ни одно значение не меняется во время выполнения цикла.
Ответ №1:
Похоже, что значение scint
всегда одно и то же. В этом причина бесконечного цикла.
В цикле for инициализация происходит только один раз, что означает scint = sc.nextInt();
, что вызывается только в начале. Возможно, вам захочется увеличить значение scint
вместо scintmulti
того, чтобы цикл заканчивался.
РЕДАКТИРОВАТЬ: Я предполагаю, что это то, чего вы хотели добиться из приведенного выше фрагмента кода. Теперь цикл завершается, как только scintll
он достигнут.
public static void main(String[] args) {
System.out.println("Enter the number you want to take table of print");
Scanner sc = new Scanner(System.in);
// sc multi starts from 1 and is increase everytime the loop will start so that we can multiply it with number increased//
int scintmulti = 1;
// scnintll is the number which is scint * 10 because we have to take the table until it we reach the scint x 10
int scintll = sc.nextInt()*10;
for (int scint = sc.nextInt(); scint <= scintll; scint , scintmulti ) {
System.out.println(scint "*" scintmulti "=" scint * scintmulti);
sc.close();
}
}
Комментарии:
1. Но, например, если кому-то нужна таблица из 2, то как мы можем изменить 2? Спасибо, что ответили кстати
2. @ShivanshArora Добавил фрагмент кода в соответствии с моим пониманием. Поправьте меня, если мое понимание неверно.
Ответ №2:
Распечатать таблицу чисел довольно просто. Бесконечный цикл происходит потому scint <= scintll
, что всегда остается верным. Я уменьшил некоторую сложность вашего кода и использовал более значимые имена переменных:
public static void main(String[] args) {
System.out.println("Enter the number you want to take table of print");
Scanner sc = new Scanner(System.in);
int tableOf = sc.nextInt();
int start = 1, end = 10;
for(int i = start; i <= end; i ) {
System.out.println(i " * " tableOf " = " i * tableOf);
}
sc.close();
Если вы используете Java 8 или выше, вы также можете использовать потоковый API:
public static void main(String[] args) {
System.out.println("Enter the number you want to take table of print");
Scanner sc = new Scanner(System.in);
int tableOf = sc.nextInt();
int start = 1, end = 10;
IntStream
.rangeClosed(start, end)
.forEach(elem -> System.out.println(
elem " * " tableOf " = " elem * tableOf
)
);
sc.close();
}
IntStream.rangeClosed()
возвращает поток целых чисел от 1 до 10. И forEach()
принимает функцию в качестве параметра для применения к каждому целому числу. Каждое целое число передается функции как elem
, а затем System.out.println()
выполняется для каждого числа.
elem -> System.out.println(elem " * " tableOf " = " elem * tableOf)
называется лямбда-функцией. elem
является параметром, а часть после ->
-телом функции.
Обязательно включите java.util.stream.*
.