Advertisement
Guest User

Untitled

a guest
Nov 17th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.74 KB | None | 0 0
  1. import java.awt.List;
  2. import java.util.ArrayList;
  3.  
  4. public class Filter {
  5.  
  6.     /*
  7.      * En lista som innehåller listor. Till en början är den tom när vi skapar
  8.      * den
  9.      */
  10.     private ArrayList<ArrayList<Double>> list;
  11.  
  12.     public Filter(ArrayList vector) {
  13.  
  14.         /*
  15.          * Här kastar vi in den stora vektorn du har i den första platsen i
  16.          * listan dvs index 0
  17.          */
  18.         this.list.add(vector);
  19.     }
  20.  
  21.     public ArrayList<ArrayList<Double>> filter() {
  22.  
  23.         /*
  24.          * Detta är bara lite hjälpvärden: subList: håller reda på vilken lista
  25.          * det är vi befinner oss i just nu. 0 är den stora listan och 1 blir
  26.          * listan vi skapar från orginalistan hasRemoved: säger bara om vi
  27.          * faktiskt har hittat ett värde som behöver flyttas till en annan
  28.          * lista. Om vi inte har flyttat på några värden så är vi klara med den
  29.          * sista listan
  30.          */
  31.         int subList = 0;
  32.         boolean hasRemoved = false;
  33.  
  34.         /*
  35.          * while(true) för att vi avslutar vårt program med "return list;"
  36.          * istället så vi fortsätter tills vi är klara helt enkelt
  37.          */
  38.         while (true) {
  39.  
  40.             /*
  41.              * next: pekar alltid på nästa värde, vi skulle kunna bara använda
  42.              * "i+1" istället men tyckte bara det var lättare att hålla reda på
  43.              */
  44.             int next = 0;
  45.             /*
  46.              * Efter varje lista vi gått igenom så sätter vi hasRemoved till
  47.              * false igen
  48.              */
  49.             hasRemoved = false;
  50.  
  51.             /*
  52.              * Här går vi igenom sub-listan och filtrerar den, vi börjar med den
  53.              * stora vektorn (subList=0)
  54.              */
  55.             for (int i = 0; i < list.get(subList).size(); i++) {
  56.                 /*
  57.                  * Öka värdet på next med 1 så att det faktiskt pekar på nästa
  58.                  * värde
  59.                  */
  60.                 next++;
  61.  
  62.                 try {
  63.                     /*
  64.                      * Här händer det roliga. Vi tittar på om nästa värde (next)
  65.                      * minus värdet vi är på (i) är mindre eller lika med 1. I
  66.                      * så fall så lägger vi till nästa värde (next) i nästa
  67.                      * sub-lista (sublist+1) och sedan tar vi bort värdet "next"
  68.                      * från den listan vi är i, detta gör att alla värden efter
  69.                      * i skiftas ett steg till vänster i listan för att fylla i
  70.                      * tomrummet. Det betyder att "next" nu fortfarande pekar på
  71.                      * nästa värde så vi behöver inte stega "next" igen utan vi
  72.                      * gör samma jämförelse igen (next - i) och upprepar tills
  73.                      * skillnaden mellan värdena är större än 1
  74.                      */
  75.                     while (list.get(subList).get(next) - list.get(subList).get(i) <= 1) {
  76.                         list.get(subList + 1).add(list.get(subList).get(next));
  77.                         list.get(subList).remove(next);
  78.  
  79.                         /*
  80.                          * Om vi har kommit hit betyder det att vi har slängt
  81.                          * över ett värde till nästa lista så vi är inte klara
  82.                          * med vårt filter
  83.                          */
  84.                         hasRemoved = true;
  85.                     }
  86.                     /*
  87.                      * När vi är på det sista elementet i listan och försöker
  88.                      * använda get(next) så får vi felet
  89.                      * IndexOutOfBoundsException. När detta händer så är det
  90.                      * inte så farligt utan vi vill bara fortsätta så att
  91.                      * istället för att programmet sla krasha när det händer så
  92.                      * tar vi emot felet och gör inget. System.out.println är
  93.                      * onödig här så den går att ta bort och bara lämna
  94.                      * catch-satsen blank också.
  95.                      */
  96.                 } catch (IndexOutOfBoundsException e) {
  97.                     System.out.println("There was no next value.");
  98.                 }
  99.             }
  100.             /*
  101.              * Så om vi har gått igenom en lista utan att skapa en ny lista så
  102.              * är vi klara och vi returnerar vårt svar (list)
  103.              */
  104.             if (hasRemoved = false) {
  105.                 return list;
  106.             }
  107.             /*
  108.              * Om vi gjorde en ändring i vår lista så är vi inte klara och vi
  109.              * vill gå igenom nästa lista (subList + 1) så vi ökar värdet på
  110.              * subList
  111.              */
  112.             subList++;
  113.  
  114.         }
  115.     }
  116.  
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement