Программа, которая вычисляет таблицу умножения для всех чисел, меньших или равных N в JAVA - PullRequest
0 голосов
/ 13 марта 2020

Как мне написать программу, которая вычисляет таблицу умножения для всех чисел, меньших или равных N. Обратите внимание, что N - это целое число, прочитанное пользователем.

Программа будет повторять это до тех пор, пока пользователь не введет -1 in JAVA.

Я не знаю, должен ли я использовать для этого вложенные циклы или метод, но я написал следующий незавершенный код, который дает мне бесконечное количество l oop

public static void main(String[] args) {
    int N ;
    System.out.println("Enter N: " );
    N = in.nextInt();

    while ( N != -1) {
        for(int i = 1; i <= N; ++i)
        {
            for (int c = 1; c <= 10; ++c)  
                System.out.println(N + "*" + c + " = " + (N*c));
        }
    }
}

Я хочу вывод, подобный этому:

Enter an integer to print it's multiplication table, -1 to
    exit
    2
    Multiplication table of 1
    1*1 = 1, 1*2 = 2, 1*3 = 3, 1*4 = 4, 1*5 = 5, 1*6 = 6, 1*7 =
    7, 1*8 = 8, 1*9 = 9, 1*10 = 10,
    Multiplication table of 2
    2*1 = 2, 2*2 = 4, 2*3 = 6, 2*4 = 8, 2*5 = 10, 2*6 = 12, 2*7
    = 14, 2*8 = 16, 2*9 = 18, 2*10 = 20, 
    Enter an integer to print it's multiplication table, -1 to
    exit  
    -1

Ответы [ 2 ]

2 голосов
/ 13 марта 2020

Санни Патель ответит правильно, но просто чтобы показать вам другой способ сделать это:

import java.util.Scanner;
import java.util.stream.IntStream;

public class Multiply {
    public static void main(String [] args) {
        try (Scanner in = new Scanner(System.in)) {
            int N;
            do {
                System.out.println("Enter N: " );
                N = in.nextInt();
                IntStream.range(1, N+1)
                     .forEach(i -> IntStream.range(1, 11)
                                            .forEach(j -> System.out.println(String.format("%d*%d = %d", i, j, (i*j)))));
            } while ( N != -1);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
1 голос
/ 13 марта 2020

Ваш код работает в бесконечном l oop, потому что N не изменяется внутри внешнего for -l oop.

Вы можете поместить подсказку внутри l oop, и измените на do-while l oop, чтобы гарантировать как минимум 1 исполнение; или нет, если пользователь вводит число меньше 1 (из-за внешнего for -l oop).

Вам также не хватало ссылки на Сканер для захвата ввода.

Наконец, вы забыли использовать i вместо N в выходных данных, в противном случае внутренний l oop будет каждый раз выводить одни и те же значения.

import java.util.Scanner;                              // Import Scanner
public static void main(String[] args) {
    int N;
    Scanner in = new Scanner(System.in);               // Missing Scanner
    do {                                               // Changed to do-while loop
        System.out.println("Enter N: " );
        N = in.nextInt();                              // Prompt user for N.
        for(int i = 1; i <= N; ++i)
        {
            for (int c = 1; c <= 10; ++c)
                System.out.println(i + "*" + c + " = " + (i*c)); // Use i instead of N
        }
    } while ( N != -1);
}
...