Documente Academic
Documente Profesional
Documente Cultură
Varianta: № 01
Clasa: „Strutz”
Epifanova Irina .
- Chişinău 2020 -
Formularea problemei:
De creat clasa “Strutz” cu câteva câmpuri.
Câmpurile obligatorii:
- un câmp de tip intreg (int), pentru păstrarea numărul de pui ai strutzului;
− un vector dinamic, în care se păstrează informaţia despre fiecare pui al strutzului (sunt posibile 3 variante:
genul feminin cu valoare: -1, genul masculin: +1, şi necunoscut: 0 :) adicâ acest ou a fost mâncat :))
− un câmp de tip intreg, static, in care se păstrează numărul de obiecte create.
Câmpuri opţionale: densitatea pufului, viteza de alergare, forţa aplicată la introducerea capului în pământ :),
vârsta etc…
De creat trei tipuri de constructori pentru această clasă (cu alocare dinamică a memoriei):
- constructor standard (implicit - 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 (set() si get()).
● De creat metoda pentru a afişa la ecran toată informaţia despre strutz, adică toate câmpurile din
această clasă.
● De descries metoda, care completeaza toate campurile obiectului cu valori citite de la tastatura.
● De creat metoda statică, ce compară doi strutzi (două instanţe (obiecte) a clasei – ambele obiecte
primim ca parametrii) în baza numărului de pui
● De creat metoda, care calculează numărul sumar de ouă, care a fost mâncat la strutz :)
În metoda main() de creat nişte strutzi, utilizând toţi constructorii declaraţi. După creerea fiecărei instantze a
clasei “strutz”, de afişat la ecran câmpurile lui cu ajutorul metodei respective (set() şi get()). 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 strutzi in vector. De comparat câteva perechi de strutzi în baza numărului
de pui cu ajutorul metodei respective. Rezultatele comparării de afişat la ecran. De calculat numărul de ouă,
care au fost mâncate la toţi strutzii creaţi, de asemenea cu ajutorulmetodei corăspunzătoare precum şi cu
metodele de acces la câmpurile clasei. Rezultatele de afişat la ecran.
De afişat la ecran numarul general de strutzi creaţi, folosind câmpul static clasei.
Codul sursa (listingul programului)
import java.io.*;
import java.util.Scanner;
import java.util.Random;
import java.util.ArrayList;
/*
Definim campurile clasei
*/
String numeStrutz;
int numarCopii;
int despreCopii[];
String vitezaDeAlergare;
int varsta;
static int nrObiecte;
/*
Constructorul de baza fara argumenti
*/
Straus()
{
numeStrutz = "Domenic";
numarCopii = 4;
despreCopii = new int[numarCopii];
for(int i=0;i<numarCopii;i++)
{
despreCopii[i] = 1;
}
vitezaDeAlergare = "50 Km/h";
varsta = 20;
nrObiecte++;
}
/*
Constructorul cu numar anumit de parametri ... in cazul dat 4 parametri
*/
Straus(String name, int nrCop, int[] despreCop, int age)
{
if(name != "")
{
numeStrutz = name;
}else {
System.out.println("Nume null");
}
if(numarCopii >= 0) {
numarCopii = nrCop;
} else {
System.out.println("Nume negativ pentru numarul de copii");
}
if(despreCop.length == numarCopii) {
despreCopii = despreCop;
}else {
System.out.println("Error ... Nu toti copii sunt definiti pentru " + numeStrutz);
}
varsta = age;
vitezaDeAlergare = "X Km/h";
nrObiecte++;
}
/*
Constructorul de copiere, care primeste ca argument un obiect a acestei clase, si copie fiecare
camp a obiectului primit in *this
*/
Straus(Straus altObiect)
{
numeStrutz = altObiect.numeStrutz;
numarCopii = altObiect.numarCopii;
despreCopii = new int[numarCopii];
for(int i=0;i<numarCopii;i++)
{
despreCopii[i] = altObiect.despreCopii[i];
}
vitezaDeAlergare = altObiect.vitezaDeAlergare;
varsta = altObiect.varsta;
nrObiecte++;
}
/*
Constructorul ce citeste din fisier toate datele necesare pentru crearea obiectului ...
primeste un string, si intelege separarea dupa separatorul ','
*/
Straus(String fileName)
{
String name = "";
int numCop = 0;
int[] dC = new int[10];
String viteza = "";
int age = 0;
try(BufferedReader br = new BufferedReader(new FileReader(fileName)))
{
String line;
while( (line = br.readLine()) != null )
{
String[] fields = line.split(",");
name = fields[0];
numCop = Integer.parseInt(fields[1]);
dC = new int[numCop];
for(int i=0;i<numCop;i++)
{
dC[i] = Integer.parseInt(fields[2+i]);
}
viteza = fields[numCop+2];
age = Integer.parseInt(fields[numCop+3]);
}
}catch(IOException e)
{
System.err.format("IOException: %s%n", e);
}
this.numeStrutz = name;
this.numarCopii = numCop;
this.despreCopii = new int[numCop];
for(int i=0;i<this.numarCopii;i++)
{
this.despreCopii[i] = dC[i];
}
this.varsta = age;
this.vitezaDeAlergare = viteza;
nrObiecte++;
}
for(int i=0;i<nameLength-1;i++)
{
char randomLowerChar = lowerCharSet.charAt(rand.nextInt(lowerCharSet.length()));
sb.append(randomLowerChar);
}
numeStrutz = sb.toString();
numarCopii = rand.nextInt(0,10);
despreCopii = new int[numarCopii];
for(int i=0;i<numarCopii;i++)
{
despreCopii[i] = rand.nextInt(-1,2);
}
int speed = rand.nextInt(100);
vitezaDeAlergare = Integer.toString(speed) + " Km/h";
varsta = rand.nextInt(100);
}
/* ################################## Metode comparare intre doua obiecte
##################################### */
public void MulteOua(Straus alt)
{
System.out.println("\n\n");
if(this.numarCopii > alt.numarCopii)
{
System.out.println(this.numeStrutz + " are mai multi copii ca "+ alt.numeStrutz);
} else if (this.numarCopii < alt.numarCopii) {
System.out.println(this.numeStrutz + " are mai putini copii ca "+ alt.numeStrutz);
} else if (this.numarCopii == alt.numarCopii) {
System.out.println(this.numeStrutz + " are exact tot atiti copii ca si "+
alt.numeStrutz);
}
}
/* ################################## Metoda ce calculeaza cate oua cu valoarea 0 are
obiectul ############### */
public int getAllEatenEggs()
{
int count = 0;
for(int i=0;i<numarCopii;i++)
{
if(despreCopii[i] == 0)
{
count++;
}
}
return count;
}
/* ################################## Metode ce scrie in file toate campurile obiectului
################### */
public void writeToFile(String fileName)
{
try{
BufferedWriter printer = new BufferedWriter (new FileWriter(fileName));
printer.write("Numele -> " + numeStrutz);
printer.newLine();
printer.write("Numarul copiilor este -> " + Integer.toString(numarCopii));
printer.newLine();
if(numarCopii > 0)
{
for(int i=0;i<numarCopii;i++) {
if(despreCopii[i]==1)
{
printer.write("[Mascul:" + Integer.toString(i) + "] ");
} else if (despreCopii[i]==-1) {
printer.write("[Femela:" + Integer.toString(i) +"] ");
} else{
printer.write("[Acest ou a fost mincat :" + Integer.toString(i) + "] ");
}
}
printer.newLine();
}else {
printer.write("Acest strutz nu are copii");
printer.newLine();
}
printer.write("Viteza de alergare este ->" + vitezaDeAlergare);
printer.newLine();
printer.write("Varsta strudzului este -> "+ Integer.toString(varsta));
printer.newLine();
printer.close();
}catch(Exception e) {
e.printStackTrace();
}
}
System.out.println("\n");
Straus strutz1 = new Straus();
strutz1.getInfoAboutOneObject(); //Creem obiect cu constructor default fara argumenti
javaVector.add(strutz1);
Concluzie
In concluzie pot afirma ca in urma acestei lucrari de laborator am invatat de a crea obiecte, prin foarte multe metode ce
de difera una de alta … la fel am invatat de a gestiona campurile unui obiect creat in urma a diferitor costructori. In
acelasi timp am invatat de a ma folosi de fisiere in cod, in ambele parti, cat citirea atat si scrierea.