Cieľom cvičení šiesteho týždňa je vyskúšať si ďalšiu prácu s poľom a dvojrozmerným poliami.
Poliarka
Budeme programovať triedu Poliarka rozširujúcu triedu Turtle, ktorá bude poznať niekoľko užitočných metód na prácu s poliami celých čísel. Na skúšanie práce s objektom triedy Poliarka nebudeme už používať ObjectInspector, ale experimentálny kód napíšeme priamo do metódy main v Spustac-i. Na zobrazenie obsahu poľa využijeme Arrays.toString:
  int[] pole = ...;
...
System.out.println(Arrays.toString(pole));
 
  
 
Na vytvorenie poľa si môžete vytvoriť metódu, ktorá vytvorí náhodné pole, alebo môžete využiť konštrukciu na vytvorenie poľa spolu s inicializáciou:
  int[] pole = {4, 1, 8, 1, 3, 9, 10, 3, 14};
 
  
 
- Pridajte do triedy 
Poliarka metódu priemer, ktorá vypočíta priemer čísel uložených v poli referencovanom parametrom pole.
 
  public double priemer(int[] pole)
 
  
 
 - Pridajte do triedy 
Poliarka metódu pocetOpakovani, ktorá vráti, koľko krát sa číslo cislo opakuje v poli referencovanom parametrom pole.
 
  public int pocetOpakovani(int[] pole, int cislo)
 
  
 
 - Pridajte do triedy 
Poliarka metódu zdvojPole, ktorá vráti referenciu na novovytvorené pole int-ov, v ktorom každý prvok poľa bude zduplikovaný. Ak pôvodné pole malo hodnoty {3, 7, 1, 4}, hodnoty vo vrátenom poli budú: {3, 3, 7, 7, 1, 1, 4, 4}
 
  public int[] zdvojPole(int[] pole)
 
  
 
 - Pridajte do triedy 
Poliarka metódu jeNeklesajuce, ktorá vráti, či prvky v poli referencovanom parametrom pole tvoria neklesajúcu postupnosť.
 
  public boolean jeNeklesajuce(int[] pole)
 
  
 
 Projekt: prepínače (logická hra)'''
Naprogramujte jednoduchú logickú hru pre jedného hráča. Hrá sa na hracej doske, ktorá má 6 x 6 políčok. Na každom políčku je kameň červenej alebo modrej farby. Na začiatku sú farby všetkých kameňov "náhodné". Ťah hráča spočíva v kliknutí na niektorý z kameňov (do niektorého z políčok). Toto kliknutie spôsobí, že každý z jeho susedov (vľavo, vpravo, hore a dole) zmení svoju farbu na opačnú. T.j. ak bol kameň červený, po zmene farby bude modrý a naopak. Hrá sa končí, ak majú všetky kamene rovnakú farbu. Pripomeňme, že kameň, na ktorý sa kliklo, nemení svoju farbu.
 
 
  import java.awt.Color;
import java.awt.event.MouseEvent;
import sk.upjs.jpaz2.*;
public class PrepinaciaHra extends WinPane {
        /**
         * Policka hracej dosky
         */
        private boolean[][] doska = new boolean[6][6];;
        /**
         * Indikuje, ci hra bezi (hra konci, ked sa dosiahlo vyherne rozlozenie)
         */
        private boolean hraBezi = true;
        public PrepinaciaHra() {
                this.kresliMriezku();
                this.zamiesaj(30);
                this.kresliDosku();
        }
        /**
         * Nakresli mriezku
         */
        public void kresliMriezku() {
                Turtle k = new Turtle();
                this.add(k);
                for (int i=1; i<6; i++) {
                        k.setPosition(i*50, 0);
                        k.moveTo(i*50, this.getHeight());
                }
                for (int i=1; i<6; i++) {
                        k.setPosition(0, i*50);
                        k.moveTo(this.getWidth(), i*50);
                }
                this.remove(k);
        }
        /**
         * Nakresli farebne kamene na zaklade obsahu policok
         * v this.doska
         */
        public void kresliDosku() {
                // ???
        }
        /**
         * Overi, ci riadok r a stlpec s su platne suradnice
         */
        public boolean dobraSuradnica(int r, int s) {
                return (r >= 0) && (r<6) && (s >= 0) && (s<6);
        }
        /**
         * Zrealizuje tah, kedy bolo zatlaceny prepinac na policku
         * v riadku r a stlpci s
         */
        public void tah(int r, int s) {
                int[][] smery = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
                // ???
        }
        /**
         * Vytvori startovacie rozlozenie kamenov tak, ze spravi
         * zadany pocet nahodnych prepnuti (tahov)
         */
        public void zamiesaj(int pocetMiesani) {
                // ???
        }
        /**
         * Vrati, ci v aktualnom stave policok je kresliaca plocha 
         * jednofarebna
         */
        public boolean jeVyherna() {
                return false;
        }
        @Override
        protected void onMouseClicked(int x, int y, MouseEvent detail) {
                // ???
        }
}
 
  
 
Asi nie každé iniciálne nastavenie farieb kameňov vedie k výhernej situácii. Preto na začiatku vytvorte iniciálne nastavenie farieb tak, že vychádzajúc z jednofarebnej konfigurácie hry zrealizujte zadaný počet náhodných ťahov.
Poliarka - ďalšie úlohy
- Pridajte do triedy 
Poliarka metódu indexNajmensieho, ktorá vráti index políčka v poli referencovanom parametrom pole, ktorý má najmenšiu hodnotu spomedzi prvkov na indexoch start a koniec (vrátane)
 
  public int indexNajmensieho(int[] pole, int start, int koniec)
 
  
 
 - Pridajte do triedy 
Poliarka metódu vymen, ktorá v poli referencovanom parametrom pole navzájom vymení obsah políčok na zadaných indexoch.
 
  public void vymen(int[] pole, int idx1, int idx2)
 
  
 
 - Pridajte do triedy 
Poliarka metódu zahada, ktorá v poli referencovanom parametrom pole zrealizuje nasledujúci algoritmus (nech L je dĺžka poľa):
- v prvom kroku vymení prvok na indexe 0 s prvkom, ktorý je spomedzi prvkov na indexoch 
0 až L-1 najmenší
 - v druhom kroku vymení prvok na indexe 1 s prvkom, ktorý je spomedzi prvkov na indexoch 
1 až L-1 najmenší
 - v treťom kroku vymení prvok na indexe 2 s prvkom, ktorý je spomedzi prvkov na indexoch 
2 až L-1 najmenší
 - a tento postup sa opakuje, až kým sa nedôjde na koniec poľa
 
 
Využite metódy 
indexNajmensieho a 
vymen.
  public void zahada(int[] pole)
 
  
 
 Čo realizuje algoritmus implementovaný metódou zahada ?
- Pridajte do triedy 
Poliarka metódu najcastejsiaHodnota, ktorá vráti najčastejšie sa vyskytujúcu hodnotu v poli referencovanom parametrom pole.
 
  public int najcastejsiaHodnota(int[] pole)
 
  
 
 - Pridajte do triedy 
Poliarka metódu  bezDuplicity, ktorá vráti referenciu na novovytvorené pole, ktoré vznikne z pôvodného poľa odstránením duplicitných výskytov hodnôt. Pri riešení tejto úlohy zvážte vytvorenie pomocných metód:
- na overenie počtu výskytov zadanej hodnoty v políčkach poľa medzi zadanými indexami (podobne ako to bolo v metóde 
 indexNajmensieho)
 - na zistenie počtu rôznych hodnôt, ktoré sú uložené v poli
 
 
  public int[] bezDuplicity(int[] pole)
 
  
 
 - Vytvorte metódu, ktorá zadanú vetu (interpunkčné znamienka ignorujte) rozloží na slová (bez využitia metódy 
split objektov triedy String):
 
  public String[] vetaNaSlova(String s)
 
  
 
 Korytnačí futbal s odstraňovaním lôpt
- Doprogramujte do projektu z prednášky odstraňovanie lôpt (lopta sa odstráni, ak na ňu klikneme so zatlačeným klávesom 
CTRL).