Laborator 6
Problema 1
abstract class Device{
private String information;
public Device(){
information = "";
}
public Device(String information){
this.information = information;
}
public void store(String information){
this.information = information;
}
public String load(){
return information;
}
public abstract String getDevice(Device device);
}
class PhotoDevice extends Device{
public PhotoDevice(String information){
super(information);
}
public void takePicture(){
System.out.println("TakePicture...");
//String picture = ...
//Se va apela this.store(picture) pentru stocarea pozei
}
public String getDevice(Device device){
String result="PhotoDevice";
return result;
}
}
class VideoDevice extends Device{
private String producer;
public VideoDevice(String information, String producer){
super(information);
this.producer = producer;
}
public void film(){
System.out.println("Film...");
//String film = ...
//Se va apela this.store(film) pentru stocarea filmului
}
public String getDevice(Device device){
String result="VideoDevice";
return result;
}
}
class PC{
private String memory = "";
private String registry;
public void store(String information){
memory += information;
registry = information;
}
public String load(){
return registry;
}
}
/*
class USB {
public void transferPCToDevice(PC pc, Device device){
String data;
data = pc.load();
device.store(data);
System.out.println("PC -> Device " + data);
}
public void transferDeviceToPC(PC pc, Device device){
String data;
data = device.load();
pc.store(data);
System.out.println("Device -> PC " + data);
}
}
*/
class USB {
public void transferPCToDevice(PC pc, Device device) {
String data;
data = pc.load();
device.store(data);
/*if (device instanceof PhotoDevice)
System.out.println("PC -> PhotoDevice " + data);
else if (device instanceof VideoDevice)
System.out.println("PC -> VideoDevice " + data);
*/
System.out.println("PC -> "+ device.getDevice(device)+" " +data);
}
}
public class Main {
public static void main(String[] args) {
Device photo, video;
PC pc;
USB usb;
photo = new PhotoDevice("initialPhotoData");
video = new VideoDevice("initialVideoData","company");
pc = new PC();
usb = new USB();
usb.transferPCToDevice(pc, photo);
// usb.transferDeviceToPC(pc, video);
usb.transferPCToDevice(pc,video);
}
}
Problema 2
class B {
public void oMetoda(B b) {
System.out.println("BBBB.oMetoda");
}
//...
}
class D extends B{
public void oMetoda(B b) {
System.out.println("DDDD.oMetoda");
}
//...
}
public class Main {
public static void main(String[] args) {
B b = new B();
B d = new D();
d.oMetoda(b); //Se va afisa DDDD.oMetoda
}
}
Problema 3
import java.io.*;
class listaContribuabili{
private contribuabil[] contribuabili=new contribuabil[10];
private int nr_contribuabili=0;
public listaContribuabili(){
}
public void adaugaContribuabil(contribuabil c1){
if(nr_contribuabili<=contribuabili.length){
contribuabili[nr_contribuabili]=c1;
nr_contribuabili++;
}
else
{
contribuabil[] tmp=new contribuabil[contribuabili.length+10];
for(int i = 0; i <contribuabili.length; i++) {
tmp[i] = contribuabili[i];
}
contribuabili = tmp;
}
}
public contribuabil getContribuabil(String CNP){
for (int i = 0; i < nr_contribuabili; i++) {
if (contribuabili[i].getCNP().equals(CNP)) {
return contribuabili[i];
}
}
return null;
}
}
class contribuabil{
private String nume,CNP;
public contribuabil(String nume, String CNP){
this.nume=nume;
this.CNP=CNP;
}
public String getCNP(){
return CNP;
}
private proprietate[] proprietati=new proprietate[10];
private int nr_proprietati=0;
private float cost;
public void adaugaProprietate(proprietate p1){
if(nr_proprietati<=proprietati.length){
proprietati[nr_proprietati]=p1;
nr_proprietati++;
}
else
{
proprietate[] tmp=new proprietate[proprietati.length+10];
for(int i = 0; i <proprietati.length; i++) {
tmp[i] = proprietati[i];
}
proprietati = tmp;
proprietati[nr_proprietati]=p1;
}
}
public float getCost(){
this.cost=0;
for(int i=0;i<nr_proprietati;i++){
this.cost=this.cost+proprietati[i].cost(proprietati[i].suprafata);
}
return this.cost;
}
public String getFluturas(){
String result="Contribuabil: "+this.nume+"\n\nProprietati:\n";
for(int i=0;i<nr_proprietati;i++){
result=result+proprietati[i].getFluturas();
}
result=result+"\n\nSuma totala: "+getCost();
return result;
}
}
abstract class proprietate{
protected String strada;
protected int nr;
protected float suprafata;
public proprietate(String strada, int nr, float suprafata){
this.strada=strada;
this.nr=nr;
this.suprafata=suprafata;
}
public abstract float cost(float suprafata);
public abstract String getFluturas();
}
class cladire extends proprietate{
public cladire(String strada, int nr, float suprafata){
super(strada,nr,suprafata);
}
public float cost(float suprafata){
return 500*super.suprafata;
}
public String getFluturas(){
String result="";
result=result+"Cladire: Strada "+super.strada+" Nr. "+super.nr+"\n\t\t "+
"Suprafata "+super.suprafata+
"\n\t\t Cost "+cost(super.suprafata)+"\n";
return result;
}
}
class teren extends proprietate{
private int rang;
public teren(String strada, int nr, float suprafata,int rang){
super(strada,nr,suprafata);
this.rang=rang;
}
public float cost(float suprafata){
return 350*super.suprafata/this.rang;
}
public String getFluturas(){
String result="";
result=result+"Teren: Strada "+super.strada+" Nr. "+super.nr+"\n\t\t"+
" Suprafata "+super.suprafata+" Rang "+this.rang +
"\n\t\t Cost "+cost(super.suprafata)+"\n";
return result;
}
}
public class Main {
public static void main(String[] args) {
contribuabil c1 = new contribuabil("Ion Popescu", "123");
proprietate p1 = new cladire("V Parvan", 2, 20);
proprietate p2 = new teren("V Parvan", 2, 10, 1);
proprietate p3 = new cladire("Lugoj", 4, 25);
c1.adaugaProprietate(p1);
c1.adaugaProprietate(p2);
c1.adaugaProprietate(p3);
contribuabil c2=new contribuabil("Geoge Constantinescu","124");
proprietate p11=new cladire("Mihai Viteazul",3,100);
proprietate p22=new teren("Mihai Viteazul",4,150,2);
c2.adaugaProprietate(p11);
c2.adaugaProprietate(p22);
// System.out.println(c2.getFluturas());
listaContribuabili lista=new listaContribuabili();
lista.adaugaContribuabil(c1);
lista.adaugaContribuabil(c2);
System.out.println(lista.getContribuabil("123").getFluturas());
System.out.println(lista.getContribuabil("124").getFluturas());
try{
InputStreamReader inputKeyboard = new InputStreamReader(System.in);
BufferedReader buffKeyboard = new BufferedReader(inputKeyboard);
System.out.print("\nCNP-ul contribuabilului:");
String CNP = buffKeyboard.readLine();
if((lista.getContribuabil(CNP))==null)
System.out.println("Contribuabilul nu exista");
else
System.out.println(lista.getContribuabil(CNP).getFluturas());
}catch(IOException e){
System.out.println("Something is wrong");
}
}
}
Problema 4
class Tren{
private static final maxVagoane=15;
private Vagon[] vagoane=new Vagon[maxVagoane];
private int nrVagoane=0;
public Tren(){
}
public void adaugareVagon(Vagon v1){
if(nrVagoane<vagoane.length){
vagoane[nrVagoane]=v1;
nrVagoane++;
}
}
private int getColete(){
int nrColete=0;
for(int i=0;i<nrVagoane;i++)
nrColete=nrColete+vagoane[i].getColete();
return nrColete;
}
public boolean equals(Object o) {
if(o instanceof Tren)
return (((Tren)o).getColete() == getColete());
else
return false;
}
public String toString(){
String s="Tren: ";
for(int i=0;i<nrVagoane;i++)
s=s+vagoane[i];
return s;
}
}
abstract class Vagon {
abstract public int getColete();
}
abstract class Calatori extends Vagon{
abstract public int getCalatori();
public void deschidere(){
System.out.println("Usile se deschid");
}
public void inchidere(){
System.out.println("Usile se inchid");
}
}
class CalatoriA extends Calatori{
public int getCalatori(){
return 40;
}
public int getColete(){
return 300;
}
public String toString(){
String s="CalatoriA ";
return s;
}
}
class CalatoriB extends Calatori{
public int getCalatori(){
return 50;
}
public int getColete(){
return 400;
}
public void blocareGeam(){
System.out.println("Geamurile s-au blocat");
}
public String toString(){
String s="CalatoriB ";
return s;
}
}
class Marfa extends Vagon{
public int getColete(){
return 400;
}
public String toString(){
String s="Marfa ";
return s;
}
}
public class Main{
public static void main(String[] args){
Tren t1=new Tren();
Vagon v1=new CalatoriA();
Vagon v2=new CalatoriB();
Vagon v3=new Marfa();
t1.adaugareVagon(v1);
t1.adaugareVagon(v2);
t1.adaugareVagon(v3);
Tren t2=new Tren();
Vagon v4=new CalatoriA();
Vagon v5=new CalatoriA();
Vagon v6=new Marfa();
t2.adaugareVagon(v4);
t2.adaugareVagon(v5);
t2.adaugareVagon(v6);
System.out.println(t1);
System.out.println(t2);
System.out.println(t1.equals(t2));
((CalatoriA)v1).deschidere();
((CalatoriA)v1).inchidere();
((CalatoriB)v2).blocareGeam();
}
}
Problema 5
abstract class Greutate {
abstract public int capacitate();
}
class GreutateSimpla extends Greutate {
private int capacitate=0;
public GreutateSimpla(int capacitate){
this.capacitate=capacitate;
}
public int capacitate(){
return this.capacitate;
}
}
class GreutateDubla extends Greutate {
private Greutate greutate1, greutate2;
public GreutateDubla(Greutate g1, Greutate g2){
this.greutate1=g1;
this.greutate2=g2;
}
public void setGreutate1(Greutate g){
this.greutate1=g;
}
public void setGreutate2(Greutate g){
this.greutate2=g;
}
public int capacitate(){
return this.greutate1.capacitate()+this.greutate2.capacitate();
}
}
class GreutateMultipla extends Greutate {
private Greutate[] lantGreutati=new Greutate[10];
private int nrGreutati=0;
public GreutateMultipla(Greutate[] g){
this.adaugaGreutate(g);
}
public void adaugaGreutate(Greutate g){
if(nrGreutati<=lantGreutati.length){
lantGreutati[nrGreutati]=g;
nrGreutati++;
}
else{
Greutate[] tmp=new Greutate[lantGreutati.length+10];
for(int i=0;i<lantGreutati.length;i++){
tmp[i]=lantGreutati[i];
}
lantGreutati=tmp;
lantGreutati[nrGreutati]=g;
nrGreutati++;
}
}
public void adaugaGreutate(Greutate[] g){
for(int i=0;i<g.length;i++){
this.adaugaGreutate(g[i]);
}
}
public int capacitate(){
int capacitate=0;
for(int i=0;i<nrGreutati;i++)
capacitate=capacitate+lantGreutati[i].capacitate();
return capacitate;
}
}
class ColectieGreutati{
private Greutate[] colectie=new Greutate[10];
private int nrGreutati=0;
private int nrMaxGreutati;
public ColectieGreutati(int nrMaxGreutati){
this.nrMaxGreutati=nrMaxGreutati;
}
public void adaugaGreutate(Greutate g){
if(nrGreutati<=nrMaxGreutati){
this.colectie[nrGreutati]=g;
nrGreutati++;
}
else{
System.out.println("Numarul maxim de greutati din colectie a fost deja atins!\n");
}
}
public void adaugaGreutate(Greutate[] g){
for(int i=0;i<g.length;i++)
this.adaugaGreutate(g[i]);
}
public int capacitate(){
int capacitate=0;
for(int i=0;i<nrGreutati;i++)
capacitate=capacitate+colectie[i].capacitate();
return capacitate;
}
public double medie(){
return this.capacitate()/this.nrGreutati;
}
}
public class Main {
public static void main(String[] args) {
Greutate gs1 = new GreutateSimpla(10);
Greutate gs2 = new GreutateSimpla(20);
Greutate gd = new GreutateDubla(gs1, gs2);
Greutate gm = new GreutateMultipla(new Greutate[]{gs1, gs2, gd});
Greutate[] greutati={gs1,gs2,gd,gm};
ColectieGreutati c1=new ColectieGreutati(100);
c1.adaugaGreutate(greutati);
System.out.println("Capacitate colectie:"+c1.capacitate());
System.out.println("Media colectiei: "+c1.medie());
}
}