Advertisement
HasteBin0

Java Perfect Number Exercise

Jul 2nd, 2017
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.38 KB | None | 0 0
  1. package perfectnumbers;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Objects;
  5.  
  6. final class PerfectNumber {
  7.  
  8.     private final Integer number;
  9.     private Integer factor_sum;
  10.     private final ArrayList<Integer> factors;
  11.  
  12.     public PerfectNumber(Integer number) {
  13.         this.number = number;
  14.         this.factors = new ArrayList<>();
  15.     }
  16.  
  17.     public void factor() {
  18.         this.factors.clear();
  19.         this.factor_sum = 0;
  20.         //
  21.         for (int i = 1; i < this.number; i++) {
  22.             if (((this.number % i)) == 0) {
  23.                 this.factors.add(i);
  24.                 this.factor_sum += i;
  25.             }
  26.         }
  27.     }
  28.  
  29.     public Boolean isPerfect() {
  30.         return Objects.equals(this.getNumber(), this.getFactor_sum());
  31.     }
  32.  
  33.     public Integer getNumber() {
  34.         return this.number;
  35.     }
  36.  
  37.     public Integer getFactor_sum() {
  38.         return this.factor_sum;
  39.     }
  40.  
  41.     public Object[] getFactors() {
  42.         return this.factors.toArray();
  43.     }
  44.  
  45.     @Override
  46.     public String toString() {
  47.         return this.getNumber().toString();
  48.     }
  49.  
  50.     public void display_perfect() {
  51.         System.out.println(
  52.                 "The number "
  53.                 + this
  54.                 + (this.isPerfect() ? " is" : " isn't")
  55.                 + " a perfect number."
  56.         );
  57.         System.out.flush();
  58.     }
  59.  
  60.     public void display_factors() {
  61.         System.out.print("The number " + this + " has the factors ");
  62.         display(this.getFactors());
  63.         System.out.println(", summing to " + this.getFactor_sum() + ".");
  64.         System.out.flush();
  65.     }
  66.  
  67.     public static void display(final Object... values) {
  68.         switch (values.length) {
  69.             case 0: {
  70.                 System.out.print("<None>");
  71.                 break;
  72.             }
  73.             case 1: {
  74.                 System.out.print(values[0]);
  75.                 break;
  76.             }
  77.             case 2: {
  78.                 System.out.print(values[0] + " and " + values[1]);
  79.                 break;
  80.             }
  81.             default: {
  82.                 for (int i = 0; i < values.length - 1; i++) {
  83.                     System.out.print(i + ", ");
  84.                 }
  85.                 System.out.print("and " + values[values.length - 1]);
  86.             }
  87.         }
  88.         System.out.flush();
  89.     }
  90. }
  91.  
  92. /**
  93.  *
  94.  * @author Aidan
  95.  */
  96. public class PerfectNumbers {
  97.  
  98.     private static final int LOOPS = 10000;
  99.  
  100.     public static void main(String[] args) {
  101.         ArrayList<PerfectNumber> tmp = new ArrayList<>();
  102.         tmp.ensureCapacity(LOOPS);
  103.  
  104.         for (int i = 0; i < LOOPS; i++) {
  105.             tmp.add(new PerfectNumber(i));
  106.         }
  107.  
  108.         System.out.print("We have the numbers 1 through " + LOOPS + " inclusive.\n");
  109.         System.out.flush();
  110.  
  111.         for (int i = 0; i < LOOPS; i++) {
  112.             tmp.get(i).factor();
  113.         }
  114.  
  115.         System.out.println();
  116.         System.out.flush();
  117.  
  118.         for (int i = 0; i < LOOPS; i++) {
  119.             if (tmp.get(i).isPerfect()) {
  120.                 tmp.get(i).display_factors();
  121.             }
  122.         }
  123.  
  124.         System.out.println();
  125.         System.out.flush();
  126.  
  127.         for (int i = 0; i < LOOPS; i++) {
  128.             if (tmp.get(i).isPerfect()) {
  129.                 tmp.get(i).display_perfect();
  130.             }
  131.         }
  132.  
  133.         System.out.println();
  134.         System.out.flush();
  135.     }
  136.  
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement