Java
Java
Lucrare de laborator № 1
Varianta: № 09
Clasa: „Transport"
Epifanova Irina .
- Chişinău 2020 -
Formularea priblemei:
Câmpurile obligatorii:
- un cîmp de tip intreg (int), pentru păstrarea numărul de pasageri ai transportului;
- un vector dinamic, în care se păstrează informaţia despre greutatea fiecatui pasager;
- un câmp de tip intreg, static, se păstrează numărul de obiecte create ale clasei;
Câmpuri opţionale: tipul (avion, autocar etc), marca, viteza, virsta =perioda de funţionare a transportului.
De creat trei tipuri de constructori pentru această clasă (cu alocare dinamică a memoriei):
- constructor standard (fără parametri)
- câteva constructori cu parametri
- constructor de copiere
De creat metodele pentru acces la toate câmpurile clasei şi de modificare a lor (metodele set() si get()).
De creat metoda pentru a afişa la ecran toată informaţia despre Transport, adică toate câmpurile din
această clasă.
De descries metoda, care completeaza toate campurile obiectului cu valori citite de la tastatura.
De descries metoda, care completeaza toate campurile obiectului cu valori aleatoare.
De creat metoda, care calculează greutate totală a pasagerilor unui Transport.
De creat metoda, ce compară două Transporturi (două instanţe (obiecte) a clasei : obiectului curent cu
obiectul primit ca parametru) în baza numărului de pasageri.
De creat metoda statică, ce compară doi transporturi (două instanţe (obiecte) a clasei – ambele obiecte
primim ca parametrii) după greutatea sumară a tuturor pasagerilor.
În metoda main() de creat cîteva Transporturi, utilizând toţi constructorii declaraţi. După creerea fiecărei
instantze a clasei “Transport”, de afişat la ecran câmpurile cu ajutorul metodei respective. De creat un vector
dinamic din obiectele clasei şi de initializat vectorul creat, folosind 3 tipuri de constructor. De afişat la ecran
(in ciclu) informatia a tuturor transporturi în vector. De comparat câteva perechi de Transporturi în baza
numărului de pasageri şi câteva perechi - în baza greutătii sumare a pasagerilor cu ajutorul metodei respective.
Rezultatele comparării de afişat la ecran. De calculat greutatea medie a pasagerilor unui Transport. Rezultatele
de afişat la ecran.
De afişat la ecran numarul general de Transporturi creaţi, folosind câmpul static clasei.
Pentru nota 10. Adaugator pentru tot ce este descris mai sus:
- un constructor care primeşte ca parametru denumirea fişierului textual (String), de unde se incarcă valori
pentru câmpurile obiectului creat.
- o funcţie care înscrie toate cîmpurile clasei în fişier, numele fisierului se indică ca parametru la intrare.
- În funcţia main pentru toate obiectele create de salvat datele în fişiere, denumirile cărora se preiau de la
numele obiectelor.
După ce totul a fost terminat fără greşele — de spus “URRRRRAAAAAA !!!” şi de prezentat primul laborator
profesorului. :)
class transport
{
String tipul; //tipul transportului
int pasageri; //nr de pasageri
int grasime[ ]; //vector dinamic ce reprezinta KG-ul fiecarui pasager
static int numar; //parametru static ce reprezinta numarul de obiecte create
int varsta; //varsta transportului
//////////////////constructori////////
transport() //constructor implicit (fara parametri)
{ tipul="Megane";
pasageri=3;
grasime=new int[pasageri]; //aloc memorie pentru vectorul dinamic
for(int i=0;i<pasageri;i++){ //cu ajutorul ciclului for initializez datele vectorului
grasime[i]=280;}
varsta=5;
numar++; //incrementez numar,cand apelez constroctorii>se mareste numarul obiectelor create
}
public void setPasageri(int n) //metoda de schimbare a numarului pasagerilor>se schimba si marimea vectoruui dinamic KG
{if(n>0 && n!=pasageri) {int tmp[]=new int[pasageri]; //pentru a salva datele curente din vector dinamic se creeaza o copie tmp
for(int i=0;i<pasageri;i++)
tmp[i]=grasime[i]; //se copie datele
grasime=new int[pasageri];
int min=(pasageri<n? pasageri:n); //se verifica daca se doreste micsorarea vectorului sau marirea
for(int i=0;i<min;i++)
grasime[i]=tmp[i]; //se transmit datele din tmp in KG
pasageri=n; //se schimba numarul pasagerilor}}
}}
public void setGrasime(int id,int grasime_nou) //metoda de schimbare a KG a unui pasager anumit conform id
{ if(id>=1 && id<=pasageri && grasime_nou>=0 && grasime_nou<=200) //se verifica validitatea id si KG_nou transmise ca parametri metodei
grasime[id]=grasime_nou;} //se face schimbul
public int getGrasime(int id) //metoda pentru acces la KG-ul unui anumit pasager conform id
{if(id>=1 && id<=pasageri) //verific validitatea parametrului transmis id
return grasime[id]; //daca e valid returnez valoarea KG-ului cu parametrul dat
return -1;} //daca nu trasnmit -1 (eroare)
static int inInt() //introducere de la tastatura a unui int (convertire din string in int)
{return (Integer.valueOf(inString()).intValue());}
static float inFloat() //introducere de la tastatura float (convertire din string in float)
{return(Float.valueOf(inString()).floatValue());
}
void inputAll() //folosesc metodele scrise precendent pentru a obtine datele unui obiect al clasei transport introdus de al tastatura
{ System.out.println("\n");
System.out.println("Introdu tipul ");
tipul=inString();
do{System.out.println("Introdu nr de pasageri ");
pasageri=inInt();}
while(pasageri<0); //va fi aratat mesajul pana cand utilizatorul nu va introduce un nr mai mare decat 0
grasime=new int[pasageri];
for(int i=0;i<pasageri;i++)
{do{System.out.println("Introduceti KG pasagerului "+i);
grasime[i]=inInt();}
while (grasime[i]<0 || grasime[i]>200); //afisez mesajul pana cand nu vor fi introduse datele din intervalul (0,200)
}
do{System.out.println("Introduceti perioada de functionare a transportului \n");
varsta=inInt();}
while(varsta<0); //metoda va primi doar valori a varstei mai mari ca 0
}
/////////////////Metoda dea fisare a datelor campurilor obiectului calsei balaur/////////
void afisare()
{System.out.println("\n");
System.out.println("tipul: "+tipul);
System.out.println("nr de pasageri:"+pasageri);
for(int i=0;i<pasageri;i++){
System.out.println("KG pasagerului "+i+" este:"+grasime[i]);}
System.out.println("perioada de funtionare a transportului:"+varsta);
System.out.println("\n");}
if((A.kilograme()/A.pasageri)>(B.kilograme()/B.pasageri)) System.out.println("Este mai greu "+A.pasageri); //compar media aritmetica a sumei KG-
urilor/nr pasagerilor
else if((A.kilograme()/A.pasageri)<(B.kilograme()/B.pasageri))System.out.println("Este mai greu "+B.pasageri);
else System.out.println("Ambele transporturi sunt la fel ");
}
//////////Metoda de cintarire a 2 transporuri,in urma acreia pierd cativa pasageri/////
transport B=new transport(2,4); //creez alt obiect cu constructor cu parametri caruia ii transmit parametrii
B.setGrasime(6,120); //schimb KG la pasagerului cu id-ul 6
B.setPasageri(3); //scgimb nr de pasageri
B.setTipul("Opel"); //schimb tipul transportului
B.afisare(); //afisare obiect B
else System.out.println("Introduceti un numar valid de transporturi "); //daca numarul introdus e mai mic ca 2 cer un alt numar valid
System.out.println("Randomizare: ");
B.randomizare(); //introduc alte random in obiectul B cu metoda randomizare
B.afisare(); //afisez datele lui B introduse random
System.out.println("\n Nr de transporturi create: "+transport.numar); //afisez nr total de transporturi creati
}}
2
tipul: Toyota
tipul: Dacia nr de pasageri:3
nr de pasageri:3 KG pasagerului 0 este:180
tipul: Opel KG pasagerului 0 este:76 KG pasagerului 1 este:180
nr de pasageri:3 KG pasagerului 2 este:180
perioada de funtionare a transportului:100 perioada de funtionare a transportului:2 Luzerrr Dacia
Datele dupa batalie :
La realizarea acestui laborator am utilizat Intellij IDEA, deoarecere acest program imi permite de a vedea
greselile ce leam comis si variantele de a le corecta.
Ce am invatat: valorile statice se creaza doar o singura data.
Plusuri: Laboratorul nr 1 este realizata pentru o nota trecatoare.
Minusuri: As fi droit ca codul sa mie mai scurt si sa fi facut lucrul cu fisierul txt.