2016-07-31 14 views
0

Ich habe gerade die Aliquot-Sequenz codiert. Es gibt ein Problem, das mir bekannt ist und das in der Ausgabe ist, dass es immer die ursprüngliche Zahl wegen der "Rückkehr n" Aussage von den statischen Methoden druckt. Wie verwende ich die statische Methode, aber nicht um die Rückgabe n Zahl zu drucken? ist es überhaupt möglich oder sollte es in statische Leere geändert werden ?. Außerdem würde ich gerne eine kürzere Version dieses Programms sehen, vielleicht mit anderen Methoden. Vielen Dank. öffentliche Klasse AliquotSequence { private statische int-Teiler;Aliquot-Sequenz in Java

public static void main(String[] args) { 
    System.out.println(aliquotCheckOne(74)); 
    System.out.println(aliquotCheckTwo(AliquotSequence.divisors)); 
    System.out.println(aliquotCheckThree(AliquotSequence.divisors)); 
    System.out.println(finalCheck(AliquotSequence.divisors)); 
} 

public static int aliquotCheckOne(int n1) { 

    System.out.println("Divisors for number 74 are: "); 
    for (int i = 1; i < n1; i++) { 
     if (n1 % i == 0) { 
      divisors += i; 
      System.out.println(i); 

     } 
    } 
    System.out.println("Sum of divisors of number 74 is: " +  AliquotSequence.divisors); 
    return n1; 
} 

public static int aliquotCheckTwo(int n2) { 
    AliquotSequence.divisors = 0; 
    System.out.println("Divisors for number 40 are: "); 
    for (int i = 1; i < n2; i++) { 
     if (n2 % i == 0) { 
      divisors += i; 
      System.out.println(i); 

     } 
    } 
    System.out.println("Sum of divisors of number 40 is: " + AliquotSequence.divisors); 
    return n2; 
} 

public static int aliquotCheckThree(int n3) { 
    AliquotSequence.divisors = 0; 
    System.out.println("Divisors for number 50 are: "); 
    for (int i = 1; i < n3; i++) { 
     if (n3 % i == 0) { 
      divisors += i; 
      System.out.println(i); 

     } 
    } 
    System.out.println("Sum of divisors of number 50 is: " + AliquotSequence.divisors); 
    return n3; 
} 

public static int finalCheck(int n4) { 
    AliquotSequence.divisors = 0; 
    System.out.println("Divisors for number 43 are: "); 
    for (int i = 1; i < n4; i++) { 
     if (n4 % i == 0) { 
      divisors += i; 
      System.out.println(i); 

     } 

    } 
    if (AliquotSequence.divisors == 1) { 
     System.out.println("End of Aliquot Sequence"); 
    } 
    return n4; 
} 
} 

The output is: 
Divisors for number 74 are: 
1 
2 
37 
Sum of divisors of number 74 is: 40 
74 (Here it prints return n) 
Divisors for number 40 are: 
1 
2 
4 
5 
8 
10 
20 
Sum of divisors of number 40 is: 50 
40 (And again) 
Divisors for number 50 are: 
1 
2 
5 
10 
25 
Sum of divisors of number 50 is: 43 
50 (again) 
Divisors for number 43 are: 
1 
End of Aliquot Sequence 
43 (again) 

Antwort

1

Wenn Sie es nicht wollen, um die Nummer drucken in Sie Methodenparameter sind (zum Beispiel n1) Sie können einfach die Methode (n) void machen und return-Anweisung entfernen. Wenn Sie eine Möglichkeit wünschen, die Aliquot-Sequenz zu drucken ...

int divisors(int n){ 
    if(n==1) return 0; 
    int sum = 1; 
    for(int i = 2; i <= Math.sqrt(n); i++) { 
     if(n % i == 0) { 
      sum += i; 
      int d = n/i; 
      if(d != i) { 
       sum+=d; 
      } 
     } 
    } 
    return sum; 
} 

// use this 
void sequence(int n){ 
    System.out.println(n); 
    int div = divisors(n); 
    while(div>0) { 
     System.out.println(div); 
     div = divisors(div); 
    } 
    System.out.println(div); 
} 
+0

Vielen Dank, es hat geholfen. – Ivanko