Как напечатать случайное число в математической таблице? - PullRequest
0 голосов
/ 18 октября 2018

Я реализую математическую таблицу, используя два целых числа (a и tableSize).Я построил случайную операцию с именем R. Я собираюсь вычислить случайное число между строкой и диапазоном столбцов и распечатать случайное число.Для тех случаев, когда значение строки больше, чем значение столбца, выводом является тире ("-").

Вот мой код,

    int a = 4;
    int tableSize = 10;
    System.out.print("    R ");
    for(int i = a; i <= tableSize;i++ )
    {
        System.out.format("%4d",i);
    }   
    System.out.println();
    for(int i = a ;i <= tableSize;i++)
    {
        System.out.format("%4d ",i);
        for(int j=a;j <= tableSize;j++)
        {
            int randomNum = rand.nextInt (j) + i;
            if(!(i > j))
            {
                System.out.format("%4d", randomNum);
            } else
            {
                System.out.format("%4s", "-");
            }
         }
         System.out.println();
     }

Вывод, который мне нуженвот так,

R  4  5  6  7  8  9  10
4  4  4  5  5  4  9   8
5  -  5  5  6  5  9   8
6  -  -  6  6  7  9   6
7  -  -  -  7  7  7   7
8  -  -  -  -  8  9   9
9  -  -  -  -  -  9  10
10 -  -  -  -  -  -  10

Но проблема в том, что я не получил такой вывод.вывод, который я получаю,

   R    4   5   6   7   8   9  10
   4    5   7   6   8   8  10  13
   5    -   5   9   8   8  10  12
   6    -   -   9   8  11  10  11
   7    -   -   -   8  14   9  16
   8    -   -   -   -  14  12  11
   9    -   -   -   -   -  13  18
  10    -   -   -   -   -   -  19

И значение строки больше значения столбца. Пожалуйста, кто-нибудь может мне помочь?Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 18 октября 2018

Во-первых, вы должны знать, как получить случайное число между двумя целыми числами, а затем закодировать остальное (проверьте комментарии кода)

Вот реализация, использующая троичный оператор ?: , которыйПолезно знать о

PrintR.java:

import java.util.Random;

public class PrintR {
    public static void main(String[] args) {
        int a = 4;
        int end = 10;
        printRTable(a, end);
    }

    public static void printRTable(int init, int end) {
        Random rand = new Random();
        // first print the top header row
        System.out.format("   R  ");
        for(int i = init; i<=end;i++ ) {
            System.out.format("%4d",i);
        }
        System.out.println();
        System.out.println("------------------------------------------");

        for(int i = init ;i<=end;i++) {
            // print left most column first
            System.out.format("%4d |",i);
            for(int j=init;j<=end;j++) {
                //Ternary operator 
                //r.nextInt(High-Low + 1) + Low; gives you a random number in between Low (inclusive) and High (inclusive)
                System.out.format("%4s", i > j ? "-" : (rand.nextInt(j-i+1)) + i);
            }
            System.out.println();
        }
    }

}

Пример вывода:

   R     4   5   6   7   8   9  10
------------------------------------------
   4 |   4   4   5   7   5   5   4
   5 |   -   5   6   6   5   8  10
   6 |   -   -   6   7   7   6   8
   7 |   -   -   -   7   7   7  10
   8 |   -   -   -   -   8   8  10
   9 |   -   -   -   -   -   9  10
  10 |   -   -   -   -   -   -  10
0 голосов
/ 18 октября 2018

Измените ваше случайное число следующим образом.

 int randomNum = rand.nextInt((tableSize - a) +1)+a;

Вывод:

   R    4   5   6   7   8   9  10
   4    4   6   7   6   6   7   7
   5    -   6   5   4   6   8   8
   6    -   -   7   8   7   7   8
   7    -   -   -  10   7   5   5
   8    -   -   -   -   9   5   8
   9    -   -   -   -   -   8   8
  10    -   -   -   -   -   -   4
0 голосов
/ 18 октября 2018

Требуется число, которое может превышать верхний предел (включительно), но Random.nextInt(int) исключает верхний предел, поэтому необходимо добавить 1 к аргументу.Чтобы получить случайное число от нуля до 10 (включительно), вы можете использовать rand.nextInt(10+1).

Но у вас также есть нижняя граница.Правильно, что вам нужно добавить нижнюю границу к результату, как вы это сделали, но сначала вам нужно вычесть ее из диапазона.

Вам нужно изменить эту строку:

int randomNum = rand.nextInt (j) + i;

На это:

int randomNum = rand.nextInt(j + 1 - i) + i;

Но вам нужно переместить эту строку в проверке, что я <= j, иначе ваш диапазон станет отрицательным: </p>

if (i <= j) {
    int randomNum = rand.nextInt(j + 1 - i) + i;
    System.out.format("%4d", randomNum);
} else {
    System.out.format("%4s", "-");
}

Вывод:

   R    4   5   6   7   8   9  10
   4    4   5   5   7   4   5   8
   5    -   5   6   6   5   5   5
   6    -   -   6   6   8   8   9
   7    -   -   -   7   7   9   9
   8    -   -   -   -   8   9   9
   9    -   -   -   -   -   9   9
  10    -   -   -   -   -   -  10
0 голосов
/ 18 октября 2018

Проблема в том, что вы вычисляете значение ячейки как сумму случайного числа между 1 и номером столбца плюс номер строки.Логика, которую я считаю нужной, заключается в том, что данная ячейка в матрице не может быть больше, чем max номера строки или столбца.Если это так, то вам нужно изменить эту строку:

int randomNum = rand.nextInt(j) + i;

На это:

int randomNum = rand.nextInt((Math.max(i, j) - a) + 1) + a;

Демо

...