Niezrozumienie metody

0
package staticInnerClass;

/**
* Ten program demonstruje zastosowanie statycznych klas wewnętrznych.
* @version 1.01 2004-02-27
* @author Cay Horstmann
*/

public class StaticInnerClassTest
{
   public static void main(String[] args)
   {
      double[] d = new double[20];
      for (int i = 0; i < d.length; i++)
         d[i] = 100 * Math.random();
      ArrayAlg.Pair p = ArrayAlg.minmax(d);
      System.out.println("min = " + p.getFirst());
      System.out.println("max = " + p.getSecond());
   }
}

class ArrayAlg
{
	/**
	* Para liczb zmiennoprzecinkowych.
	*/
   public static class Pair
   {
      private double first;
      private double second;

      /**
      * Tworzy parę dwóch liczb zmiennoprzecinkowych.
      * @param f pierwsza liczba
      * @param s druga liczba
      */
      public Pair(double f, double s)
      {
         first = f;
         second = s;
      }

      /**
      * Zwraca pierwszą liczbę z pary.
      * @return pierwsza liczba
      */
      public double getFirst()
      {
         return first;
      }

      /**
      * Zwraca drugą liczbę z pary.
      * @return druga liczba
      */
      public double getSecond()
      {
         return second;
      }
   }

   /**
   * Znajduje największą i najmniejszą wartość w tablicy.
   * @param values tablica liczb zmiennoprzecinkowych
   * @return para liczb, w której pierwsza liczba określa wartość najmniejszą, a druga
   * największą
   */
   public static Pair minmax(double[] values)
   {
      double min = Double.MAX_VALUE;
      double max = Double.MIN_VALUE;
      for (double v : values)
      {
         if (min > v) min = v;
         if (max < v) max = v;
      }
      return new Pair(min, max);
   }
}

W powyższym kodzie nie rozumiem działania metody minmax.

  1. W jaki sposób ona szuka wartości min i max ?
  2. Czemu w do zmiennej "min" przypisane jest MAX_VALUE i zmiennej "max" przypisane jest MIN_VALUE

W skrócie krótka metoda ale nie wiem jak działa.

0
 public static Pair minmax(double[] values)
   {
      double min = Double.MAX_VALUE; //zaczynamy szukanie od największej możliwej wartości (min z danej tablicy może być mniejsze niż maksymalna wartość danego typu zmiennej, ale na pewno nie większe, jest to więc pewna wartość graniczna)
      double max = Double.MIN_VALUE; //zaczynamy szukanie od najmniejszej możliwej wartości (max z danej tablicy może być większe niż minimalne wartość danego typu zmiennej, ale na pewno nie mniejsze, jest to więc pewna wartość graniczna)

      for (double v : values) //program przechodzi przez wszystkie wartości z tablicy values
      {
         if (min > v) min = v; //jeśli wartość z tablicy jest mniejsza od naszej min - to może być szukane minimum, wybieramy więc tę mniejszą wartość podpisujemy do min i kontynuujemy. Jeśli sprawdzana wartość nie jest mniejsza, nic się nie dzieje. 


         if (max < v) max = v; //jeśli wartość z tablicy jest większa od naszej max  - to może być szukane maximum, wybieramy więc tę większą wartość podpisujemy do max i kontynuujemy. Jeśli sprawdzana wartość nie jest większa, nic się nie dzieje. 

//Jeśli w kolejnych iteracjach znajdzie mniejszą wartość niż nowe min, znowu podstawi ją pod min i dalej będzie szukało mniejszej wartości. Analogicznie z max.
      }
      return new Pair(min, max); //zwraca znalezione min i max
   }
0

Dzięki wielkie za taką fajna odpowiedź. Chodź przyznam że musiałem to kilka razy przeczytać aby zrozumieć. Teraz to wydaje sie banalnie proste. Zmyliły mnie te zmienne min i max a przecież szukaliśmy wartości minimalnej i maksymalnej danej tablicy a nie deklarowanych zmiennych. Pozdro.

0

Abstrahując od metody, to ten kod to doskonały przykład, jak z 6 linijek kodu zrobić 60 dorzucając bezsensowne klasy, pola, getery i komentarze w stylu captain obvious.

Czyli... typowy kod Javy ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1