идеальное форматирование чисел

Я получил это домашнее задание о совершенных числах от 1 до 1000, где число равно сумме своих делителей. Я нашел правильный код, чтобы проверить, является ли число совершенным числом, и обнаружил, что эти числа были 1, 6, 28, 496 (я не знаю, почему 1 включен, но это было включено в пример моего учителя). Мой вопрос прост. Результат, на который я рассчитывал, был примерно таким:
1 = 1
6 = 1+2+3
28 = 1+2+4+7+14
496 = 1+2+4+ 8+16+31+62+124+248
но мне удалось получить следующее:
1 = 1
6 = 1+2+3+
28 = 1+2+ 4+7+14+
496 = 1+2+4+8+16+31+62+124+248+
Как исключить лишний + в конце?
Мой код что-то не так так:

private static boolean perfect(int n){
    boolean cek=false;
    int x=0;
    if(n==1)x=1;
    for(int i=1;i<n;i++){
        if(n%i==0)
            x+=i;
    }
    if(x==n)cek=true;
    return cek;
}
public static void main(String[] args) {
    for(int i=1;i<1000;i++){
        if(perfect(i)){
            if(i==1)
                System.out.println(i+"\t = "+i);
            else{
                System.out.print(i+"\t = ");
                for(int j=1;j<i;j++){
                    if(i%j==0)
                        System.out.print(j+"+");
                }
            System.out.println("");
            }
        }
    }
}    

Заранее спасибо.


person Wildan Maulana Syahidillah    schedule 25.11.2013    source источник
comment
Вам действительно нужно каждый раз проверять if (i==1)?   -  person Maria Ines Parnisari    schedule 26.11.2013
comment
хахаха нет, это немного неэффективно, я думаю. Я мог бы просто напечатать это в начале.   -  person Wildan Maulana Syahidillah    schedule 26.11.2013
comment
да, я это исправлю   -  person Wildan Maulana Syahidillah    schedule 26.11.2013


Ответы (2)


Так как это домашнее задание, я просто дам подсказку, а именно: печатать + только в том случае, если это не первая итерация цикла. Это легко проверить, я дам вам понять это.

Отредактируйте с дополнительной подсказкой: вам может понадобиться поэкспериментировать с тем, где именно вы печатаете +.

person musical_coder    schedule 25.11.2013
comment
другой ответ испортил его (ну, не полностью) для меня. если j==1, я напечатал только j, иначе я напечатал +j.. Спасибо за подсказки. - person Wildan Maulana Syahidillah; 26.11.2013
comment
Нет проблем, рад, что это сработало. Я бывший учитель, поэтому мне нравится просто давать подсказки, если это возможно, но в большинстве случаев люди пишут код за вас. В будущем, если вы явно попросите только подсказки в своем посте, я думаю, что большинство людей будут уважать это. - person musical_coder; 26.11.2013

попробуй это

boolean first = true;
for(int j=1;j<i;j++){
     if(i%j==0)
        if(!first)
           System.out.print("+"+j);
        else{
           first = false;
           System.out.print(j);
        }
 }
person subash    schedule 25.11.2013