Умножьте таблицу, используя пока l oop C# - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь создать таблицу умножения, используя while l oop, но не понимаю, почему, хотя (x <= sk1) l oop выполняет I <= sk1 l oop только один раз. </p>

int x = 1;

Console.Write("Enter number under 20: ");
string input1 = Console.ReadLine();
int sk1 = int.Parse(input1);

while (sk1 > 20)
{
    Console.Write("Enter number once again: ");
    input1 = Console.ReadLine();
    sk1 = int.Parse(input1);
}

while (x <= sk1)
{
    int i = 1;
    while (i <= sk1)
    {
        Console.Write($" {i*x} ");
        i++;
    }
    Console.WriteLine();
    x++;
}

Ответы [ 3 ]

0 голосов
/ 31 марта 2020

Давайте упростим проблему:

  1. Разделим задачу на: пользовательский ввод и генерацию таблицы
  2. Выберите читаемые имена (что означает sk1? )

Код:

private static int ReadPositiveInteger(int maxValue) {
  while (true) {
    Console.Write($"Enter positive number under {maxValue}: "); 

    if (!int.Parse(Console.ReadLine(), out int result))
      Console.WriteLine("Sorry, not a integer value");
    else if (result <= 0)
      Console.WriteLine("Sorry, not a positive integer value");
    else if (result > maxValue) 
      Console.WriteLine($"Sorry, the value must be not greater than {maxValue}");
    else
      return result; 
    }
  }

Имея size давайте построим таблицы:

private static void PrintMultiplyTable(int size) {
  int row = 1; 

  while (row <= size) {
    int column = 1;

    while (column <= size) {
      Console.WriteLine($" {row * column,3}"); // ,3 - formatting

      column += 1; 
    }

    row += 1;    
  } 
}

Теперь по порядку нарисуйте таблицу, которую вы можете поставить (где-нибудь в методе Main)

PrintMultiplyTable(ReadPositiveInteger(20)); 
0 голосов
/ 02 апреля 2020

Я в конце концов придумал это решение, работает нормально.

int x = 1;        
Console.Write("Enter number under 20: ");
string input1 = Console.ReadLine();
int num1 = int.Parse(input1);

while (num1 > 20)
{
    Console.Write("Enter number once again: ");
    input1 = Console.ReadLine();
    num1 = int.Parse(input1);
}

while (x <= num1)
{
    int i = 1;
    while (i <= num1)
    {
        Console.Write($" {i*x} ");
        i++;
    }
    Console.WriteLine();
    x++;
}
0 голосов
/ 31 марта 2020

Посмотрите на l oop.

int x = 1;

while (x <= sk1)
{
    int i = 1;
    while (i <= sk1)
    {
        //Do some stuff here
        i++;
    }
    Console.WriteLine();
    x++;
}

В вашем случае это зациклилось один раз, потому что вы ввели 1 в качестве пользовательского ввода. sk1 = 1

  • Поставьте точку останова на свой код, и вы увидите, что во второй раз i == 2. Таким образом, i больше не меньше или не равен sk1. (2 не меньше или равно 1)
  • Теперь x == 2 и x больше не меньше или не равны sk1. (2 не меньше или равно 1)
...