Member 12892727 Ответов: 1

Как я могу уменьшить количество строк кода?


public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int[] costsarr = {210, 375, 181, 600, 750, 360, 13125, 58, 7553, 5509, 2708, 2934};
System.out.println("Cost per day");
        for (int y = 0; y < costsarr.length; y++) {

            int sum = 0;

            if (y == 0) {

                sum = sum + costsarr[0];

                System.out.println("Day " + (y + 1) + ": $" + sum);
            }

            if (y == 1) {

                sum = sum + costsarr[0] + costsarr[1] * 2;

                System.out.println("Day " + (y + 1) + ": $" + sum);
            }

            if (y == 2) {

                sum = sum + costsarr[0] + costsarr[1] * 2 + costsarr[2] * 3;

                System.out.println("Day " + (y + 1) + ": $" + sum);
            }

            if (y == 3) {

                sum = sum + costsarr[0] + costsarr[1] * 2 + costsarr[2] * 3 + costsarr[3] * 4;

                System.out.println("Day " + (y + 1) + ": $" + sum);
            }

            if (y == 4) {

                sum = sum + costsarr[0] + costsarr[1] * 2 + costsarr[2] * 3 + costsarr[3] * 4 + costsarr[4] * 5;

                System.out.println("Day " + (y + 1) + ": $" + sum);
            }
            if (y == 5) {

                sum = sum + costsarr[0] + costsarr[1] * 2 + costsarr[2] * 3 + costsarr[3] * 4 + costsarr[4] * 5 + costsarr[5] * 6;

                System.out.println("Day " + (y + 1) + ": $" + sum);
            }
            if (y == 6) {

                sum = sum + costsarr[0] + costsarr[1] * 2 + costsarr[2] * 3 + costsarr[3] * 4 + costsarr[4] * 5 + costsarr[5] * 6 + costsarr[6] * 7;

                System.out.println("Day " + (y + 1) + ": $" + sum);
            }
            if (y == 7) {

                sum = sum + costsarr[0] + costsarr[1] * 2 + costsarr[2] * 3 + costsarr[3] * 4 + costsarr[4] * 5 + costsarr[5] * 6 + costsarr[6] * 7 + costsarr[7] * 8;

                System.out.println("Day " + (y + 1) + ": $" + sum);
            }
            if (y == 8) {

                sum = sum + costsarr[0] + costsarr[1] * 2 + costsarr[2] * 3 + costsarr[3] * 4 + costsarr[4] * 5 + costsarr[5] * 6 + costsarr[6] * 7 + costsarr[7] * 8 + costsarr[8] * 9;

                System.out.println("Day " + (y + 1) + ": $" + sum);
            }
            if (y == 9) {

                sum = sum + costsarr[0] + costsarr[1] * 2 + costsarr[2] * 3 + costsarr[3] * 4 + costsarr[4] * 5 + costsarr[5] * 6 + costsarr[6] * 7 + costsarr[7] * 8 + costsarr[8] * 9 + costsarr[9] * 10;

                System.out.println("Day " + (y + 1) + ": $" + sum);
            }
            if (y == 10) {

                sum = sum + costsarr[0] + costsarr[1] * 2 + costsarr[2] * 3 + costsarr[3] * 4 + costsarr[4] * 5 + costsarr[5] * 6 + costsarr[6] * 7 + costsarr[7] * 8 + costsarr[8] * 9 + costsarr[9] * 10 + costsarr[10] * 11;

                System.out.println("Day " + (y + 1) + ": $" + sum);
            }
            if (y == 11) {

                sum = sum + costsarr[0] + costsarr[1] * 2 + costsarr[2] * 3 + costsarr[3] * 4 + costsarr[4] * 5 + costsarr[5] * 6 + costsarr[6] * 7 + costsarr[7] * 8 + costsarr[8] * 9 + costsarr[9] * 10 + costsarr[10] * 11 + costsarr[11] * 12;

                System.out.println("Day " + (y + 1) + ": $" + sum);
            }
            if (y == 12) {

                sum = sum + costsarr[0] + costsarr[1] * 2 + costsarr[2] * 3 + costsarr[3] * 4 + costsarr[4] * 5 + costsarr[5] * 6 + costsarr[6] * 7 + costsarr[7] * 8 + costsarr[8] * 9 + costsarr[9] * 10 + costsarr[10] * 11 + costsarr[11] * 12 + costsarr[12] * 13;

                System.out.println("Day " + (y + 1) + ": $" + sum);
            }

        } 

    }
}


Что я уже пробовал:

Это делается для того, чтобы рассчитать сумму, потраченную каждый день за 12 дней Рождества. Это самое лучшее, что я мог бы сократить, и не знаю, куда еще идти отсюда.

CHill60

Зачем укорачивать? Количество строк кода? Сколько времени требуется для выполнения? Сколько памяти он потребляет?

Подсказка-попробуйте "переключиться" и попробуйте ввести переменную для вывода

PIEBALDconsult

Замените каждую новую строку пробелом. Сделано.

Dave Kreskowiak

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

Member 12892727

Большое вам спасибо! кажется, я понял :)

1 Ответов

Рейтинг:
2

Peter Leow

Главный виновник в том, что вы положили это

int sum=0;

внутри цикла for, эффект которого заключается в том, что эта сумма сбрасывается до нуля на каждой итерации, что приводит к необходимости повторять добавление предыдущего дня в последующей итерации снова и снова. Поэтому поместите его перед началом цикла. Как только вы это сделаете, сумма сохранит свое значение с предыдущей итерации, что избавит вас от избыточного сложения в каждом блоке if.
Далее, каждое из условий if основано на индексном номере массива, который вы можете вывести из числа итераций, которое является y в вашем коде, так зачем же заново изобретать колесо. Вам нужна только одна строка кода, как это:
sum = sum + costsarr[y] * (y+1);

поскольку количество итераций будет заботиться об индексе массива.
Собрав воедино, окончательный код должен выглядеть следующим образом:
int[] costsarr = {210, 375, 181, 600, 750, 360, 13125, 58, 7553, 5509, 2708, 2934};
int sum = 0;
for(int i=0;i<costsarr.length;i++)
{
	int day = i+1;
	sum += costsarr[i] * day;
	System.out.println("Day " + day + ": $" + sum);
}

Наслаждайтесь своим обучением...