Java paskaita Nr. 4 – Konstruktorius

Šioje paskaitoje susipažinome su Java konstruktoriais. Techninis apibrėžimas yra Konstruktorius – tai metodas, kuris sukuria klasės objektus ir nustato klasės objekto kintamųjų pradines reikšmes.

Konstruktorius

Iš esmės reikalingas priskirti standartines reikšmes, paleisti ir vykdyti reikiamus objektus.

Nenaudojant kompiliatoriaus viską galima rašyti ir pasileisti naudojant: https://www.jdoodle.com/online-java-compiler 

class Taskas {
protected int x, y; // klasės kintamieji
// konstruktoriai
public Taskas () { x = 0; y = 0;}
public Taskas (int pX, int pY) { x = pX; y = pY;} 
// metodai
public void Pereiti (int n_X, int n_Y) { x = n_X; y =n_Y;}
public int koksX( ) { return x;}
public int koksY( ) { return y;}
public static void main(String args[ ])
  {
// objektų kūrimas
public Taskas  t1 =new  Taskas(); 	// sukuriami objektai t1 ir t2	
public Taskas t2 = new Taskas(5.0, -7,0); 
// veiksmai su objektais
System.out.println(“t1.x= " + t1.x );
System.out.println(“t1.y= " + t1.y);
System.out.println(“t2.x= " + t2.x );
System.out.println(“t2.y= " + t2.y);
int a =t1.koksX( );
System.out.println(“a= " + a);
t2.Pereiti (10,10);	
System.out.println(“t2.x= " + t2.x );
System.out.println(“t2.y= " + t2.y);
  }
}

Užduotis

[expand title=”Suskleisti” expanded=”true”]

 

Aprašykite klasę Apskritimas. Klasės apraše turi būti:

KINTAMIEJI:

  • sveikojo tipo x ir y koordinatės p
  • lokštumoje;realusis r – apskritimo spindulys.

KONSTRUKTORIAI:

  • Konstruktorius be parametrų, kuri klasės kintamiesiems nustato pradines reikšmes x=0; y=0; r=0.
  • Konstruktorius su parametrais, kurį kviečiant galima nustatyti klasės kintamųjų reikšmes.

METODAI:

  1. Metodas su parametrais, kuris leidžia pakeisti visų kintamųjų reikšmes.
  2. Metodas, kuris skaičiuoja ir grąžina apskritimo plotą.
  3. Metodas, kuris skaičiuoja ir grąžina apskritimo perimetrą.
  4. Metodas, kuris atspausdina visų kintamųjų reikšmes.
  5. Metode main sukurti tris klasės Apskritimas tipo objektus a1, a2 ir a3. Objektas a1 kuriamas iškviečiant konstruktorių be parametrų. Po to iškviesti metodą ir pakeisti reikšmes į 1,1,1. Suskaičiuoti plotą ir perimetrą. Rezultatus parodyti kompiuterio ekrane.
  6. Objektas a2 kuriamas iškviečiant konstruktorių be parametrų, kuris nustato reikšmes 0,0,0. Po to iškviesti metodą ir pakeisti reikšmes į 2,2,2. Suskaičiuoti plotą ir perimetrą. Rezultatus parodyti kompiuterio ekrane.
  7. Objektas a3 kuriamas iškviečiant konstruktorių su parametrais, kuris nustato reikšmes 3,3,3. Suskaičiuoti plotą ir perimetrą. Rezultatus parodyti kompiuterio ekrane.

Pavyzdys

public class Taskas {
int x, y; // klasės kintamieji
// konstruktoriai
public Taskas () { x = 0; y = 0;}
public Taskas (int pX, int pY) { x = pX; y = pY;}
// metodai
public void Pereiti (int n_X, int n_Y) { x = n_X; y =n_Y;}
public int koksX( ) { return x;}

 

[/expand]

KINTAMIEJI

Visą užduoti paeiliui nagrinėsime žingsnis po žingsnio ir pradėsime rašyti programą nuo nulio.

  • sveikojo tipo x ir y koordinatės plokštumoje
  • realusis r – apskritimo spindulys.

Sukuriame public klasę Apskritimas ir ją aprašome. Suvedame kintamuosiuos.

public class Apskritimas {
    int x, y;  //sveikasis
    double r; //realusis
}

 

KONSTRUKTORIAI

  • Konstruktorius be parametrų, kuri klasės kintamiesiems nustato pradines reikšmes x=0; y=0; r=0.
  • Konstruktorius su parametrais, kurį kviečiant galima nustatyti klasės kintamųjų reikšmes.
public class Apskritimas {
    int x, y;
    double r;
    
//konstruktoriai
public Apskritimas () {x=0; y=0; r=0}; //be parametrų
public Apskritimas (int xA, int yA, double rA) {x = xA; y = yA; r = rA;} //su parametrais
}

 

METODAI

1 metodas

Metodas su parametrais, kuris leidžia pakeisti visų kintamųjų reikšmes.

Šis metodas iš pažiūros niekuo nesiskiria nuo konstruktoriaus. Nes iš esmės jį naudojant jis perima konstruktoriaus su argumentais vaidmenį. Jis yra patogus naudoti programoje norint atlikti papildomus veiksmus ir pakeisti pradines reikšmes, jeigu pradinės turi keisti programoje.

Šį metodą išbandysime, tačiau jeigu mūsų reikšmės nesikeičia visos programos naudojimo metu šio metodo galime ir nenaudoti ir paduoti pradines reikšmes tiesiai per konstruktorių. Plačiau, apie tai kitame etape.

public class Apskritimas {
    int x, y;
    double r;
    
//konstruktoriai
public Apskritimas () {x=0; y=0; r=0;}
public Apskritimas (int xA, int yA, double rA) {x = xA; y = yA; r = rA;}
}

//metodas - pakeisti reiškmes
public void Pakeisti (int n_X, int n_Y, double n_r) { x = n_X; y =n_Y; r = n_r;}

Pagrindinis metodas

Kad būtų galima paleisti kodą. Būtinas pagrindinis metodas.

public static void main(String[] args) {
}

Pridėjus šią eilutę, jau yra visos pagrindinės dalys ir konsolė nebemėtys klaidų. Ir pabandymui pridėjome System.out.print, kuri atspausdins skliausteliuose esanti tekstą.

public class Apskritimas {
    int x, y;
    double r;
    
public static void main(String[] args) {
 System.out.print("x=" +  " y=" +  " r=" );   
}
    
//konstruktoriai
public Apskritimas () {x=0; y=0; r=0;}
public Apskritimas (int xA, int yA, double rA) {x = xA; y = yA; r = rA;}


//metodas - pakeisti reiškmes

public void Pakeisti (int n_X, int n_Y, double n_r) { x = n_X; y =n_Y; r = n_r;}

}

Rezultatas:

x= y= r=

 

 

2 metodas

Metodas, kuris skaičiuoja ir grąžina apskritimo plotą.

Čia sukuriame metodą su argumentu, kuris naudojantis apskritimo ploto formulę gražins sumos reikšmę. Šis metodas nenaudoja argumentų.

//metodas 2 - skaičiuoti apskritimo plotą s = pi * r * r
public double koksPl () 
{
    double suma = 0;
    suma = 3.14 * (r * r);
    return suma;
    
}

 

3 metodas

Metodas, kuris skaičiuoja ir grąžina apskritimo perimetrą.

Principas toks pats kaip ir antro metodo, tik skaičiuojame perimetrą.

//metodas 3 - skaičiuoti apskritimo perimetrą p = 2 * pi * r 
public double koksPer () 
{
    double perimetras = 2 * 3.14 * r;
    return perimetras;
    
}

 

Metodų vykdymas

Pagrindiniame metode pridedame dvi eilutes, kuri viena priskiria klasei Apskritimas O1 ir naudodami jį galime vykdyti savo sukurtus metodus.

public static void main(String[] args) {
 Apskritimas O1 = new Apskritimas(); //konstruktoriaus priskyrimas 01
 O1.Pakeisti(2, 4, 6); //metodo vykdymas
 
 
}

Pilnas parašytas kodas su mūsų sukurtais metodais. Ir jų paleidimu. Metode Pakeisti pridėti eilutė, kuri atspausdins mūsų paduotas 2, 4, 6 reikšmes į konsolę.

public class Apskritimas {
    int x, y;
    double r;
    
public static void main(String[] args) {
 Apskritimas O1 = new Apskritimas(); //konstruktoriaus paleidimo mechanizmas 
 O1.Pakeisti(2, 4, 6);
 
 
}
    
//konstruktoriai
public Apskritimas () {x=0; y=0; r=0;}
public Apskritimas (int xA, int yA, double rA) {x = xA; y = yA; r = rA;}


//metodas - pakeisti reiškmes

public void Pakeisti (int n_X, int n_Y, double n_r) { x = n_X; y =n_Y; r = n_r;
    
    System.out.print("x=" + x + " y=" + y + " r=" + r);
}

//metodas 2 - skaičiuoti apskritimo plotą s = pi * r * r
public double koksPl () 
{
    double suma = 0;
    suma = 3.14 * (r * r);
    return suma;
    
}

//metodas 3 - skaičiuoti apskritimo perimetrą p = 2 * pi * r 
public double koksPer () 
{
    double perimetras = 2 * 3.14 * r;
    return perimetras;
    
}

}

Rezultatas:

x=2 y=4 r=6.0

 

4 metodas

Metodas, kuris atspausdina visų kintamųjų reikšmes.

Sukuriame metodą, kuris spausdins reikšmes. Jį tai pat vykdysime naudoti O1. Rašysime: O1.Spausdinti();

//metodas 4 - skirtas spausdinti

public void Spausdinti () 
{
     System.out.print("x=" + x + " y=" + y + " r=" + r);
     System.out.println("");
    
}

 

5 dalis

Metode main sukurti tris klasės Apskritimas tipo objektus a1, a2 ir a3. Objektas a1 kuriamas iškviečiant konstruktorių be parametrų. Po to iškviesti metodą ir pakeisti reikšmes į 1,1,1. Suskaičiuoti plotą ir perimetrą. Rezultatus parodyti kompiuterio ekrane.

Jau turime visus metodus ir dabar juos panaudosime.

Visas programos kodas lieka toks pats, koreguojame tik pagrindinį metodą. Tik pridedame dar vieną eilutę System.out.println joje paleidžiame mūsų susikurtus ploto ir perimetro skaičiavimo metodus.

public static void main(String[] args) {
 Apskritimas O1 = new Apskritimas(); //konstruktoriaus paleidimo mechanizmas 
 O1.Pakeisti(2, 4, 6);
 O1.Spausdinti();
 System.out.println("a1 Plotas " + O1.koksPl() + "; a1 Perimetras " + O1.koksPer() + ";");
 
}

Rezultatas:

x=2 y=4 r=6.0
a1 Plotas 113.04; a1 Perimetras 37.68;

Konstruktorių naudojimas

Lygiai tą patį rezultatą galime pasiekti ir nenaudodami Pakeisti() metodo. Metodą iškomentuojame // ir jo nenaudojame. O reikšmes įrašome tiesiai čia: Apskritimas O1 = new Apskritimas(2, 4, 6);

Tokiu atveju programa naudos mūsų susikurtą konstruktorių:

public Apskritimas (int xA, int yA, double rA) {x = xA; y = yA; r = rA;}

Pakeistas kodas

public static void main(String[] args) {
 Apskritimas O1 = new Apskritimas(2, 4, 6); 
 O1.Spausdinti();
 System.out.println("a1 Plotas " + O1.koksPl() + "; a1 Perimetras " + O1.koksPer() + ";");
}

 

5 metodas

Kadangi struktūrą kitų užduočių yra tokia pati ir būtų paprasčiau  užduotis susikursime metodą, kuris atspausdins visas reikšmes iš karto.

public void SpausdintiAll () 
{
     System.out.print("x=" + x + " y=" + y + " r=" + r );
      System.out.println("");
    System.out.println("Plotas " + koksPl() + "; Perimetras " + koksPer() + ";");
     System.out.println("");
    
}

Pagrindinio argumento pakeitimai:

public static void main(String[] args) {
 Apskritimas O1 = new Apskritimas(2, 4, 6); 
 O1.Spausdinti();
 System.out.println("a1 Plotas " + O1.koksPl() + "; a1 Perimetras " + O1.koksPer() + ";");
 System.out.println("");
 Apskritimas O2 = new Apskritimas(2, 2, 2); 
 O2.SpausdintiAll();
 Apskritimas O3 = new Apskritimas(3, 3, 3); 
 O3.SpausdintiAll();
}

Rezultatas:

x=2 y=4 r=6.0
a1 Plotas 113.04; a1 Perimetras 37.68;

x=2 y=2 r=2.0
Plotas 12.56; Perimetras 12.56;

x=3 y=3 r=3.0
Plotas 28.26; Perimetras 18.84;

 

Galutinis programos kodas

public class Apskritimas {
  int x,y;
  double r;
  
public static void main(String[] args) {
        
        Apskritimas O1 = new Apskritimas(1, 1, 1); 
       // System.out.println("a1 Plotas " + O1.koksPl() + "; a1 Perimetras " + O1.koksPer() + ";");
       // O1.Pakeisti(4, 3, 5);
       // System.out.println("a1 Plotas " + O1.koksPl() + "; a1 Perimetras " + O1.koksPer() + ";");
       O1.SpausdintiAll();
       
        Apskritimas O2 = new Apskritimas(2, 2, 2); 
       // System.out.println("a2 Plotas " + O2.koksPl() + "; a2 Perimetras " + O2.koksPer() + ";");
       // O2.Pakeisti(2, 2, 2);
      //  System.out.println("a2 Plotas " + O2.koksPl() + "; a2 Perimetras " + O2.koksPer() + ";");
       O2.SpausdintiAll();
        
        Apskritimas O3 = new Apskritimas(3, 3, 3); 
      //  System.out.println("a3 Plotas " + O3.koksPl() + "; a3 Perimetras " + O3.koksPer() + ";");
      // O3.Pakeisti(9, 8, 7);
      //  System.out.println("a3 Plotas " + O3.koksPl() + "; a3 Perimetras " + O3.koksPer() + ";");
      O3.SpausdintiAll();
    }	
  

//konstruktoriai
public Apskritimas () {x=0; y=0; r=0;}
public Apskritimas (int xA, int yA, double rA) {x = xA; y = yA; r = rA;}

//metodai
//public void Pakeisti (int n_X, int n_Y, double n_r) { x = n_X; y =n_Y; r = n_r;}

public double koksPl () 
{
    double suma = 0;
    suma = 3.14 * (r * r);
    return suma;
    
}
public double koksPer () 
{
    double perimetras = 2 * 3.14 * r;
    return perimetras;
    
}

public void Spausdinti () 
{
     System.out.print("x=" + x + " y=" + y + " r=" + r);
     System.out.println("");
    
}

public void SpausdintiAll () 
{
     System.out.print("x=" + x + " y=" + y + " r=" + r );
      System.out.println("");
    System.out.println("Plotas " + koksPl() + "; Perimetras " + koksPer() + ";");
     System.out.println("");
    
}

}

 

Tags:

Add a Comment

Your email address will not be published. Required fields are marked *