Omar_Natour

Natour, O. 9/16/16 Csc-220 Ugly Numbers

Sep 17th, 2016
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.17 KB | None | 0 0
  1. /*
  2.  * Omar Natour
  3.  * 9/16/2016
  4.  * Csc-220 Data Structures
  5.  * Hw1 Ugly Number Table
  6.  * Take in a starting and ending range and display all ugly numbers within that range.
  7.  */
  8.  
  9. import java.util.ArrayList;
  10. import javafx.application.Application;
  11. import javafx.event.ActionEvent;
  12. import javafx.event.EventHandler;
  13. import javafx.geometry.Pos;
  14. import javafx.scene.*;
  15. import javafx.scene.control.Button;
  16. import javafx.scene.control.TextArea;
  17. import javafx.scene.control.TextField;
  18. import javafx.scene.layout.BorderPane;
  19. import javafx.scene.layout.HBox;
  20. import javafx.scene.paint.Color;
  21. import javafx.scene.text.Text;
  22. import javafx.stage.Stage;
  23.  
  24. public class UglyNumbers extends Application {
  25.     public static void main(String[] args) {
  26.         launch(args);
  27.     }
  28.  
  29.     static TextArea taOut = new TextArea();
  30.  
  31.     public void start(Stage primaryStage) {
  32.  
  33.         BorderPane Gui = new BorderPane();
  34.  
  35.         Gui.setTop(intro());
  36.         Gui.setCenter(header());
  37.         Gui.setBottom(output());
  38.  
  39.         Scene sce = new Scene(Gui, 650, 300, Color.BLUE);
  40.  
  41.         primaryStage.setTitle("Ugly Numbers");
  42.         primaryStage.setScene(sce);
  43.         primaryStage.show();
  44.         primaryStage.setResizable(false);
  45.     }
  46.  
  47.     private Node intro() {
  48.         HBox hbIntro = new HBox();
  49.         hbIntro.setPrefHeight(10);
  50.  
  51.         Text tIntro = new Text(
  52.                 "Enter the starting and ending value for the range of numbers to be searched for ugly numbers.");
  53.  
  54.         hbIntro.setAlignment(Pos.CENTER);
  55.         hbIntro.getChildren().add(tIntro);
  56.         return hbIntro;
  57.     }
  58.  
  59.     private Node header() {
  60.  
  61.         HBox HBtopper = new HBox(10);
  62.  
  63.         TextField tfStart = new TextField();
  64.         TextField tfEnd = new TextField();
  65.         Text tStart = new Text("Start:");
  66.         Text tEnd = new Text("End:");
  67.  
  68.         Button btGo = new Button("GO!");
  69.  
  70.         EventHandler<ActionEvent> Go = e -> {
  71.             String sStart = tfStart.getText();
  72.             String sEnd = tfEnd.getText();
  73.  
  74.             int iStart;
  75.             int iEnd;
  76.  
  77.             if (sStart.matches("(\\d+)") && sEnd.matches("(\\d+)")) {
  78.                 iStart = Integer.parseInt(sStart);
  79.                 iEnd = Integer.parseInt(sEnd);
  80.                 findUglys(iStart, iEnd);
  81.             } else {
  82.                 taOut.setText("You've made a grave mistake");
  83.             }
  84.         };
  85.  
  86.         btGo.setOnAction(Go);
  87.  
  88.         HBtopper.setAlignment(Pos.CENTER);
  89.         HBtopper.getChildren().addAll(tStart, tfStart, tEnd, tfEnd, btGo);
  90.  
  91.         return HBtopper;
  92.     }
  93.  
  94.     private Node output() {
  95.  
  96.         HBox HBmiddle = new HBox();
  97.  
  98.         taOut.setPrefColumnCount(40);
  99.         taOut.setPrefHeight(200);
  100.  
  101.         HBmiddle.setAlignment(Pos.CENTER);
  102.         HBmiddle.getChildren().add(taOut);
  103.  
  104.         return HBmiddle;
  105.     }
  106.  
  107.     ///////// GUI//////////^^^
  108.     //////// LOGIC/////////vvv
  109.  
  110.     // Professor Silvestri's prime number identification method, taken from his
  111.     // method library.
  112.     public static boolean isPrime(int number) {
  113.  
  114.         int upperFactorLimit = (int) Math.sqrt(number);
  115.  
  116.         for (int divisor = 2; divisor <= upperFactorLimit; divisor++) {
  117.             if (number % divisor == 0)
  118.                 return false;
  119.         }
  120.         return true;
  121.     }
  122.  
  123.     static ArrayList<Integer> findFactors(int factoree) {
  124.  
  125.         ArrayList<Integer> factors = new ArrayList<Integer>();
  126.  
  127.         for (int i = 1; i <= factoree; i++) {
  128.             if (factoree % i == 0)
  129.                 factors.add(i);
  130.         }
  131.         return factors;
  132.     }
  133.  
  134.     static ArrayList<Integer> findPrimeFactors(ArrayList<Integer> factors) {
  135.  
  136.         ArrayList<Integer> primeFactors = new ArrayList<Integer>();
  137.  
  138.         for (int i = 0; i < factors.size(); i++) {
  139.             if (isPrime(factors.get(i)) || factors.get(i) == 1)
  140.                 primeFactors.add(factors.get(i));
  141.         }
  142.         return primeFactors;
  143.     }
  144.  
  145.     static boolean isUgly(int num) {
  146.  
  147.         ArrayList<Integer> primeFactors1 = findPrimeFactors(findFactors(num));
  148.  
  149.         if (primeFactors1.size() <= 0) {
  150.             return false;
  151.         }
  152.  
  153.         for (int i = 0; i < primeFactors1.size(); i++) {
  154.             int current = primeFactors1.get(i);
  155.  
  156.             if ((current != 2 && current != 3 && current != 5 && current != 1))
  157.                 return false;
  158.         }
  159.         return true;
  160.     }
  161.  
  162.     static void findUglys(int start, int end) {
  163.  
  164.         String Uglys = "";
  165.         int count = 0;
  166.  
  167.         for (int i = start; i <= end; i++) {
  168.             if (isUgly(i)) {
  169.                 count++;
  170.                 if (count % 5 == 0) {
  171.                     Uglys += String.format("%-6d", i);
  172.                     Uglys += ("\n");
  173.                 } else
  174.                     Uglys += String.format("%-6d", i);
  175.             }
  176.  
  177.         }
  178.         taOut.setText(Uglys);
  179.     }
  180.  
  181. }
Add Comment
Please, Sign In to add comment