Я пишу программу, которая вычисляет последовательность простых чисел и затем отображает их в таблице.
Программы просят пользователя ввести 2 целых числа: первое - это число, с которым последовательностьначинается, а второй - количество простых чисел, которые будут найдены. До этого, программа работает отлично. Проблема в том, что простые числа должны отображаться в «квадратной» таблице, а это означает, что, если возможно, таблица должна быть идеально квадратной. Если это невозможно, то количество строк и столбцов не должно отличаться более чем на 1.
Вот пример того, что я пробовал:
int columns = 0;
int rows = 0;
int element = 0;
rows = (int) Math.sqrt(numberOfPrimes);
columns = (rows * rows) < numberOfPrimes ? rows + 1 : rows;
if(numberOfPrimes%3 - 1.0 < 0.001)
{
columns = rows + 1;
rows = rows + 1;
}
if (numberOfPrimes > 100)
{
columns = 10;
if (rows * rows < numberOfPrimes)
{
rows = numberOfPrimes / 10;
}
}
System.out.println(numberOfPrimes + " = [" + rows + "," + columns + "]");
for (int r = 0; r < rows; r++)
{
for (int c = 0; c < columns; c++)
{
System.out.printf("%6s", primesArray[element] + "\t");
if (element == primesArray.length - 1)
{
break;
}
element++;
}
System.out.println();
}
Таблицаотображается правильно для некоторых входов, но не для других. Я знаю, что этот код неверен, но я понятия не имею, как написать правильный код для этого. Любая помощь будет оценена.
РЕДАКТИРОВАТЬ: я обновил код до того, что у меня есть сейчас. Таблица не работает должным образом для нечетных чисел, таких как 33. Она печатает только 30 чисел, а не оставшиеся 3. Мне нужна дополнительная строка, которая печатает эти оставшиеся числа, даже если эта строка является неполной. Я пытался решить эту проблему, но я создал массив из-за ошибки. Кроме того, я добавил оператор if, потому что если число простых чисел превышает 100, тогда таблица должна иметь только 10 столбцов и не будет квадратной.
РЕДАКТИРОВАТЬ 2: мне удалось решить проблему, и яобновил код, чтобы показать решение. Однако мне пришлось использовать перерыв, и мой профессор не позволяет нам использовать перерывы. Есть ли другой способ выхода из цикла, как только мы достигнем последнего элемента в массиве?