public class Tank { private double V; // Volume private String tankName; private double C= Double.MAX_VALUE; // Cost($) private double R= Double.MAX_VALUE; // Radius(m) private double L= Double.MAX_VALUE; // Length(m) private double m= Double.MAX_VALUE; // Mass(kg) private double w= Double.MAX_VALUE; // Weld length(m) public static final double t = 0.04; // Thickness of walls(m) public static final double p = 8000; // Density of steel(kg/m^3) public static final double Rmin = 0.5; // Min radius(m) public static final double Rmax = 2.0; // Max radius(m) public static final double Rincr = 0.1; // Increment when searching for min cost(m) public Tank(double v, String n) { this.V = v; tankName = n; } // Get methods public double getCost() { return C; } public double getLength() { return L; } public double getMass() { return m; } public double getRadius() { return R; } public String getTankName() { return tankName; } public double getVolume() { return V; } public double getWeldLen() { return w; } // Set method public void setTankName(String string) { tankName = string; } // Compute tank dimensions, public void computeCost(double c1, double c2) { double eps = 0.001; // Prevent premature end of loop double bestC = Double.MAX_VALUE; double bestR = Double.MAX_VALUE; for (double r = Rmin; r <= Rmax + eps; r += Rincr) { double len = V / (Math.PI * r * r); double weld = 8.0 * Math.PI * (r + 0.5 * t); //Eq. 6 double v2 = 2.0 * Math.PI * (r + t) * (r + t) * t; //Eq. 5 double v1 = len * Math.PI * ((r + t) * (r + t) - r * r); //Eq. 4 double mass = p * (v1 + v2); //Eq. 3 double cost = c1 * mass + c2 * weld; //Eq. 2 if (cost < bestC) { bestC = cost; bestR = r; } } C= bestC; R= bestR; L= V/(Math.PI*R*R); w= 8.0 * Math.PI * (R + 0.5 * t); //Eq. 6 double vol2 = 2.0 * Math.PI * (R + t) * (R + t) * t; //Eq. 4 double vol1 = L * Math.PI * ((R + t) * (R + t) - R * R); //Eq. 5 m = p * (vol1 + vol2); //Eq. 3 } }