Clasa Masina
public class Masina {
private String nume;
private int vcurba,vlinie,handicap;
/**
*
* @param nume
* @param vcurba
* @param vlinie
* @param handicap
*/
public Masina(String nume, int vcurba, int vlinie, int handicap) {
this.nume = nume;
this.vcurba = vcurba;
this.vlinie = vlinie;
this.handicap = handicap;
}
public String getNume() {
return nume;
}
public void setNume(String nume) {
this.nume = nume;
}
public int getVcurba() {
return vcurba;
}
public void setVcurba(int vcurba) {
this.vcurba = vcurba;
}
public int getVlinie() {
return vlinie;
}
public void setVlinie(int vlinie) {
this.vlinie = vlinie;
}
public int getHandicap() {
return handicap;
}
public void setHandicap(int handicap) {
this.handicap = handicap;
}
}
Clasa Segment
public class Segment {
public static final int CURBA=0,LINIE=1;
private int tip,distanta;
/**
*
* @param tip
* @param distanta
*/
public Segment(int tip, int distanta) {
this.tip = tip;
this.distanta = distanta;
}
public int getTip() {
return tip;
}
public void setTip(int tip) {
this.tip = tip;
}
public int getDistanta() {
return distanta;
}
public void setDistanta(int distanta) {
this.distanta = distanta;
}
}
Clasa Circuit
public class Circuit {
private String nume;
private Segment[] segmente;
/**
*
* @param nume
* @param segmente
*/
public Circuit(String nume, Segment[] segmente) {
this.nume = nume;
this.segmente = segmente;
}
public String getNume() {
return nume;
}
public void setNume(String nume) {
this.nume = nume;
}
public Segment[] getSegmente() {
return segmente;
}
public void setSegmente(Segment[] segmente) {
this.segmente = segmente;
}
}
Clasa Rezultat
public class Rezultat implements Comparable< Rezultat > {
private String numeMasina;
private int timp;
/**
*
* @param numeMasina
* @param timp
*/
public Rezultat(String numeMasina, int timp) {
this.numeMasina = numeMasina;
this.timp = timp;
}
public String getNumeMasina() {
return numeMasina;
}
public void setNumeMasina(String numeMasina) {
this.numeMasina = numeMasina;
}
public int getTimp() {
return timp;
}
public void setTimp(int timp) {
this.timp = timp;
}
@Override
public int compareTo(Rezultat o) {
return this.timp - o.timp;
}
}
Clasa principala
public class RezolvareFAIMA {
/*
* Definim constantele din aplicatie: masini, segmente, circuite
*/
private static final Masina[] MASINI = new Masina[]{
new Masina("Turtle Apotheosis", 2, 10, 0),
new Masina("Gently Snail", 5, 4, 20),
new Masina("Sleepy MacLarden", 2, 15, 25),
new Masina("Old Tom Sheriff", 5, 10, 50)
};
private static final Circuit[] CIRCUITE = new Circuit[]{
new Circuit("Burburring", new Segment[]{
new Segment(Segment.CURBA, 100),
new Segment(Segment.LINIE, 200),
new Segment(Segment.CURBA, 50),
new Segment(Segment.LINIE, 50),
new Segment(Segment.LINIE, 200),
new Segment(Segment.CURBA, 50),
new Segment(Segment.CURBA, 200),
new Segment(Segment.LINIE, 150)
}),
new Circuit("Silversandman", new Segment[]{
new Segment(Segment.LINIE, 200),
new Segment(Segment.CURBA, 100),
new Segment(Segment.CURBA, 100),
new Segment(Segment.LINIE, 50),
new Segment(Segment.CURBA, 200),
new Segment(Segment.LINIE, 50),
new Segment(Segment.CURBA, 100),
new Segment(Segment.LINIE, 200)
})
};
public static void main(String[] args) {
for (Circuit c : CIRCUITE) {
System.out.println("Rezultatele pe circuitul " + c.getNume());
Rezultat[] rezultate = new Rezultat[MASINI.length];
int i = 0;
for (Masina m : MASINI) {
int timp = m.getHandicap();
for (Segment s : c.getSegmente()) {
switch (s.getTip()) {
case Segment.CURBA:
timp += s.getDistanta() / m.getVcurba();
break;
case Segment.LINIE:
timp += s.getDistanta() / m.getVlinie();
break;
}
}
rezultate[i++] = new Rezultat(m.getNume(), timp);
}
Arrays.sort(rezultate);
for (Rezultat r : rezultate) {
System.out.println(r.getNumeMasina() + ": " + r.getTimp());
}
}
}
}