Witam
Pracuję z książką "Java w 21 dni" i pomocniczo z "Java Podstawy". Pierwsza z książek ma rozdziały podzielone na dni. W związku z tym po 7 dniach chciałem podsumować cały "tydzień" pisząc jakiś prosty program, który będzie w sobie zawierał tematy, które w tym "tygodniu" się mieściły.
W ramach mojego podsumowania zabrałem się do prostego programu, który nie ma robić nic innego jak tylko tworzyć tablicę, posortować ją i wyświetlić ile razy dany element w niej się powtarza. (Elementy i wielkość tablicy pobrane z klawiatury).
Program jest pewnie dosyć zagmatwany jeśli idzie o jego strukturę, jednak chciałem w nim wszystko "zmieścić".
Sprawą, przy której się zatrzymałem to interfejsy, ponieważ nie jestem pewien czy dobrze je rozumiem a tym bardziej nie wiem czy w ogóle można ich użyć w moim programie.
Z tego co zrozumiałem interfejsu używamy, gdy chcemy wykonać jakieś działania na już utworzonych obiektach jak np. właśnie sortowanie ich czy wykonanie innych czynności na (w moim przypadku) elementach mojej nieszczęsnej tablicy. Z tego co zrozumiałem interfejs powinien być jak najbardziej uniwersalny, żeby można było podpiąć pod niego każdy obiekt. Nie mam jednak pojęcia jak miałoby to wyglądać w praktyce i czy w moim programie da się ich jakoś sensownie użyć.
Rozjaśnilibyście może mi trochę ten temat i pomogli jakoś w kwestii stworzenia interfejsu w moim programie? Poniżej zamieszczam kod:
Pobieram wielkość tablicy i ją zwracam:
package Table;
import java.util.*;
class ArraySize {
Scanner in = new Scanner (System.in);
private int elIn;
// Metoda odpowiadająca za pobór wielkości tablicy
public void inSize() {
elIn = in.nextInt();
}
// Zwraca rozmiar tablicy
public int getSize() {
return elIn;
}
}
Tworzę tablicę na podstawie danych z klasy powyższej. W tej klasie dodatkowo sortuję jej elementy metodą "quicksort".
package Table;
import java.util.*;
class CreateArray {
//Deklaracja tablicy
int [] tablica;
private Scanner in = new Scanner(System.in);
ArraySize tabSize = new ArraySize();
//Metoda przyjmująca zmienną indeks typu int, tworzy tablice i inicjuje jej wielkość. Wielkość będzie pobrana z innej metody w innej klasie.
public void StworzTablice (int indeks) {
tablica = new int[indeks];
}
//Metoda zwracająca długość tablicy.
int getDlugosc() {
return tablica.length;
}
//Pętla wypełnia tablicę elementami pobranymi z klawiatury. Metoda przyjmuje zmienną typu int,. która określa do kiedy pętla ma się wykonywać.
public void WypelnijTablice(int indk) {
for (int i=0; i<indk; i++) {
tablica[i] = in.nextInt();
}
}
void sortowanie() {
Arrays.sort(tablica);
}
}
Wyświetlam tablicę.
package Table;
class ViewArray {
public void NArray(int Value){
System.out.println("Tablica " + Value + " elementowa.");
}
public void VArray(int lgth, int[] tab) {
System.out.print("[ ");
for(int i=0; i<lgth; i++) {
System.out.print(" " + tab[i] + " ");
}
System.out.print(" ]");
}
}
Ta metoda ma za zadanie zliczenie ile razy dany element tablicy się powtarza. Nie jest skończona, bo tutaj zacząłem się zastanawiać czy da się w tym celu użyć jakoś interfejsu?
package Table;
public class SprawdzIle {
void SprIle(int[] tablica ) {
int licznik=0, element=0;
for (int i=0; i< tablica.length; i++) {
for (int j=0; j< tablica.length; j++) {
if (tablica[i] == tablica[j])
licznik++;
}
System.out.print(tablica[i] + " = " + licznik + ", ");
licznik = 0;
}
}
}
No i main
package Table;
import java.util.Arrays;
public class main {
public static void main(String [] args) throws NullPointerException {
ArraySize rozmiar = new ArraySize();
ViewArray vt = new ViewArray();
CreateArray ct = new CreateArray();
SprawdzIle spr = new SprawdzIle();
System.out.println("Wprowadz rozmiar tablicy");
rozmiar.inSize();
vt.NArray(rozmiar.getSize()); //Wyświetla ile elementów ma tablica. Metoda przyjmuje za argument wartość z metody getSize()
System.out.println("Wprowadz elementy tablicy: ");
ct.StworzTablice(rozmiar.getSize()); // Wywołuje metodę odpowiedzialną za rozmiar tablicy, metoda przyjmuje za argument wartość zwróconą przez getSize()
ct.WypelnijTablice(ct.getDlugosc());
System.out.println("Lista elementów w tablicy");
ct.sortowanie();
vt.VArray(ct.getDlugosc(), ct.tablica);
System.out.println();
System.out.println("Elementy powtarzają się: ");
spr.SprIle(ct.tablica);
}
}