В Java я создал table teller, чтобы мы могли получить таблицу любого числа. Но цикл for, который я создал здесь, не останавливается и работает бесконечно

#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.* .