Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
/* Таблица умножения
*/
public class Solution
{
public static void main(String[] args)
{
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
int f = 6;
int g = 7;
int h = 8;
int i = 9;
int j = 10;
System.out.println(a * a + " " + b * a + " " + c * a + " " + d * a + " " + e * a + " " + f * a + " " + g * a + " " + h * a + " " + i * a + " " + j * a);//1
System.out.println(a * b + " " + b * b + " " + c * b + " " + d * b + " " + e * b + " " + f * b + " " + g * b + " " + h * b + " " + i * b + " " + j * b);//2
System.out.println(a * c + " " + b * c + " " + c * c + " " + d * c + " " + e * c + " " + f * c + " " + g * c + " " + h * c + " " + i * c + " " + j * c);//3
System.out.println(a * d + " " + b * d + " " + c * d + " " + d * d + " " + e * d + " " + f * d + " " + g * d + " " + h * d + " " + i * d + " " + j * d);//4
System.out.println(a * e + " " + b * e + " " + c * e + " " + d * e + " " + e * e + " " + f * e + " " + g * e + " " + h * e + " " + i * e + " " + j * e);//5
System.out.println(a * f + " " + b * f + " " + c * f + " " + d * f + " " + e * f + " " + f * f + " " + g * f + " " + h * f + " " + i * f + " " + j * f);//6
System.out.println(a * g + " " + b * g + " " + c * g + " " + d * g + " " + e * g + " " + f * g + " " + g * g + " " + h * g + " " + i * g + " " + j * g);//7
System.out.println(a * h + " " + b * h + " " + c * h + " " + d * h + " " + e * h + " " + f * h + " " + g * h + " " + h * h + " " + i * h + " " + j * h);//8
System.out.println(a * i + " " + b * i + " " + c * i + " " + d * i + " " + e * i + " " + f * i + " " + g * i + " " + h * i + " " + i * i + " " + j * i);//9
System.out.println(a * j + " " + b * j + " " + c * j + " " + d * j + " " + e * j + " " + f * j + " " + g * j + " " + h * j + " " + i * j + " " + j * j);//10
}
}
Сижу на работе без дела первый день. Хотелось хоть как то поучаствовать в беседе. не нужно иронии.
Inkanus-gray, да пробелы есть лишние, но наглядность вывода сохранил)
Думаю в этом примере не принципиально наличие лишнего пробела.
Корректнее так (калька с C#, поэтому может работать не так, как надо):
int len = 10;
for (int i = 0; i < len * len; ++i)
{
if (i % len == 0)
{
if(i > 0)
System.out.println();
}
else
System.out.print(" ");
System.out.format("%03d ", (i / len + 1) * (i % len + 1));
}
Зато в общем виде и сама по себе практика разворачивания в один цикл (в особенности это касается всяких непристойных алгоритмов) — годная вещь. Если бы не было форматирования (предположим, у нас есть некий абстрактный view, а это все происходит в model с array), для больших N, это было бы более чем осмысленно. В общем, сама по себе практика не настолько порочна, как может показаться.
Попытка засунуть N-мерную таблицу в одномерную сущность имеет смысл, да. В конце концов, в РСУБД этим постоянно занимаются. Если бы модель выдавала туплы (i, j, i*j), а view отображало бы третий элемент тупла в табличке, используя первые два как координаты - ну ок, имеет право на жизнь. Если бы модель тупо выдавала массив i*j, а view раскидывало бы их по ячейкам справа-налево сверху-вниз - тоже.
Но даже там значения было бы удобнее генерить двойным циклом, а не выёбываться, вычленяя их делением из линейного индекса...
Эта практика, имхо, не порочна только в одном случае - когда линейный индекс даётся свыше, на входе алгоритма, и нам надо выдать значение для конкретного индекса.
> когда линейный индекс даётся свыше, на входе алгоритма, и нам надо выдать значение для конкретного индекса
Что-то типа такого имелось в виду:
// этот метод навязан нам интерфейсом, мы ничего не можем с этим поделать
int getCell(int linearIndex)
{
int y = (linearIndex / width) + 1;
int x = (linearIndex % width) + 1;
return x * y;
}
Но и то, имхо, архитектура говёная, раз заставляет такое делать, а не передаёт индекс ячейки по-нормальному как пару (x, y).
for (int j=1;j<11;j++){
System.out.print( j*i + " ");
}
System.out.println();
}
Inkanus-gray, да пробелы есть лишние, но наглядность вывода сохранил)
Думаю в этом примере не принципиально наличие лишнего пробела.
int len = 10;
for (int i = 0; i < len * len; ++i)
{
if (i % len == 0)
{
if(i > 0)
System.out.println();
}
else
System.out.print(" ");
System.out.format("%03d ", (i / len + 1) * (i % len + 1));
}
Но даже там значения было бы удобнее генерить двойным циклом, а не выёбываться, вычленяя их делением из линейного индекса...
Эта практика, имхо, не порочна только в одном случае - когда линейный индекс даётся свыше, на входе алгоритма, и нам надо выдать значение для конкретного индекса.
Что-то типа такого имелось в виду:Но и то, имхо, архитектура говёная, раз заставляет такое делать, а не передаёт индекс ячейки по-нормальному как пару (x, y).
Будет где нибудь в функции-адаптере
ладно если у нас только свернутый индекс на входе, но тут то зачем все это
http://ideone.com/o8OoN1
http://ideone.com/ouk6eX
"i+j-20||" вместо ";" кажется слишком расточительным, но без этого теряется особый шарм этого кода.