In: Computer Science
please can you write the calc_plant method in another way, I don't understand way they assign these specific numbers to min, unhappy1...4. the question says if the plant is within two miles or less of a city, the unhappiness is infinite (that is, assign a very large number to the unhappiness for that city). 2) Otherwise, the unhappiness is equal to the population of the city divided by the distance of the plant from the city. The average unhappiness equals: Avg. Unhappiness = Sum of the unhappiness of 4 cities / The total state's population. Your program should select the site at which the average unhappiness is smallest.
mport java.io.*;
import java.util.*;
public class State {
private int citi1x,citi1y;
private int pop1;
private int citi2x,citi2y;
private int pop2;
private int citi3x,citi3y;
private int pop3;
private int citi4x,citi4y;
private int pop4;
private int plantx,planty;
public int getCity1X(){
return citi1x;
}
public int getCity1Y(){
return citi1y;
}
public int getCity2X(){
return citi2x;
}
public int getCity2Y(){
return citi2y;
}
public int getCity3X(){
return citi3x;
}
public int getCity3Y(){
return citi3y;
}
public int getCity4X(){
return citi4x;
}
public int getCity4Y(){
return citi4y;
}
public void setCity1(int a, int b){
citi1x = a;
citi1y = b;
}
public void setCity2(int a, int b){
citi2x = a;
citi2y = b;
}
public void setCity3(int a, int b){
citi3x = a;
citi3y = b;
}
public void setCity4(int a, int b){
citi4x = a;
citi4y = b;
}
public void setPop1(int a){
pop1 = a;
}
public void setPop2(int a){
pop2 = a;
}
public void setPop3(int a){
pop3 = a;
}
public void setPop4(int a){
pop4 = a;
}
public int getPop1(int a){
return pop1;
}
public int getPop2(int a){
return pop2;
}
public int getPop3(int a){
return pop3;
}
public int getPop4(int a){
return pop4;
}
public int getPlantX(){
return plantx;
}
public int getPlantY(){
return planty;
}
public void setPlantX(int a){
plantx = a;
}
public void setPlantY(int a){
planty = a;
}
public void read_input(){
int x,y;
int pop;
Scanner sc = new Scanner(System.in);
do {
System.out.print("Enter X and Y for city 1: ");
x = sc.nextInt();
y = sc.nextInt();
} while ((x < 1 || x > 25) && (y < 1 && y
> 25));
setCity1(x,y);
System.out.print("Enter population for city 1: ");
pop = sc.nextInt();
setPop1(pop*1000);
do {
System.out.print("Enter X and Y for city 2: ");
x = sc.nextInt();
y = sc.nextInt();
} while ((x < 1 || x > 25) && (y < 1 && y
> 25));
setCity2(x,y);
System.out.print("Enter population for city 2: ");
pop = sc.nextInt();
setPop2(pop*1000);
do {
System.out.print("Enter X and Y for city 3: ");
x = sc.nextInt();
y = sc.nextInt();
} while ((x < 1 || x > 25) && (y < 1 && y
> 25));
setCity3(x,y);
System.out.print("Enter population for city 3: ");
pop = sc.nextInt();
setPop3(pop*1000);
do {
System.out.print("Enter X and Y for city 4: ");
x = sc.nextInt();
y = sc.nextInt();
} while ((x < 1 || x > 25) && (y < 1 && y
> 25));
setCity4(x,y);
System.out.print("Enter population for city 4: ");
pop = sc.nextInt();
setPop4(pop*1000);
}
public void calc_plant(){
double min = 100000;
for (int i = 1; i<=25; i++){
for (int j = 1; j<=25; j++){
double unhappy1 = 0;
double unhappy2 = 0;
double unhappy3 = 0;
double unhappy4 = 0;
if ((i == citi1x && j == citi1y) || (i == citi2x &&
j == citi2y) || (i == citi3x && j == citi3y) || (i ==
citi4x && j == citi4y))
continue;
double dist = Math.sqrt((i-citi1x)*(i-citi1x) +
(j-citi1y)*(j-citi1y));
if (dist <= 2){
unhappy1 = 10000000;
}
else {
unhappy1 = pop1/dist;
}
dist = Math.sqrt((i-citi2x)*(i-citi2x) +
(j-citi2y)*(j-citi2y));
if (dist <= 2){
unhappy2 = 1000000;
}
else {
unhappy2 = pop2/dist;
}
dist = Math.sqrt((i-citi3x)*(i-citi3x) +
(j-citi3y)*(j-citi3y));
if (dist <= 2){
unhappy3 = 1000000;
}
else {
unhappy3 = pop3/dist;
}
dist = Math.sqrt((i-citi4x)*(i-citi4x) +
(j-citi4y)*(j-citi4y));
if (dist <= 2){
unhappy4 = 1000000;
}
else {
unhappy4 = pop4/dist;
}
double unhappy = (unhappy1 + unhappy2 + unhappy3 +
unhappy4)/(pop1+pop2+pop3+pop4);
if (unhappy < min){
min = unhappy;
plantx = i;
planty = j;
}
}
}
}
public void display_map(){
for (int i = 1; i <=25; i++){
for (int j = 1; j <=25; j++){
if (i == citi1x && j == citi1y)
System.out.print("C1");
else if (i == citi2x && j == citi2y)
System.out.print("C2");
else if (i == citi3x && j == citi3y)
System.out.print("C3");
else if (i == citi4x && j == citi4y)
System.out.print("C4");
else if (i == plantx && j == planty)
System.out.print("PP");
else
System.out.print("<>");
}
System.out.println();
}
System.out.println();
}
}
import java.util.Scanner;
public class
StatePlant {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
State s = new State();
s.read_input();
s.calc_plant();
System.out.println("Locate the plan at : " +
s.getPlantX() + " " +s.getPlantY() );
System.out.println("Enter 1 to view a Map of the
scenario, or 0 to exit:");
String inp = sc.nextLine();
if (inp.charAt(0) == '1'){
s.display_map();
}
}
}
I appreciate any help
import java.util.Scanner; class State { private int cityX[], cityY[]; private int pop[]; private int plantx, planty; public State() { cityX = new int[4]; cityY = new int[4]; pop = new int[4]; } public int getCityX(int index) { return cityX[index]; } public int getCityY(int index) { return cityY[index]; } public void setCity(int a, int b, int index) { cityX[index] = a; cityY[index] = b; } public void setPop(int a, int index) { pop[index] = a; } public int getPop(int index) { return pop[index]; } public int getPlantX() { return plantx; } public int getPlantY() { return planty; } public void setPlantX(int a) { plantx = a; } public void setPlantY(int a) { planty = a; } public void read_input() { int x, y; int pop; Scanner sc = new Scanner(System.in); for (int i = 0; i < 4; i++) { do { System.out.print("Enter X and Y for city " + (i + 1) +": "); x = sc.nextInt(); y = sc.nextInt(); } while ((x < 1 || x > 25 || y < 1 || y > 25)); setCity(x, y, i); System.out.print("Enter population for city " + (i + 1) + ": "); pop = sc.nextInt(); setPop(pop * 1000, i); } } public void calc_plant() { double min = 100000; for (int i = 1; i <= 25; i++) { for (int j = 1; j <= 25; j++) { if ((i == cityX[0] && j == cityY[0]) || (i == cityX[1] && j == cityY[1]) || (i == cityX[2] && j == cityY[2]) || (i == cityX[3] && j == cityY[3])) continue; double totalPopulation = 0; double totalUnhappy = 0; for(int x=0; x<4; x++) { double dist = Math.hypot(i - cityX[x], j - cityY[x]); if (dist <= 2) { totalUnhappy += 10000000; } else { totalUnhappy += pop[x] / dist; } totalPopulation += pop[x]; } double unhappyRatio = totalUnhappy / totalPopulation; if (unhappyRatio < min) { min = unhappyRatio; plantx = i; planty = j; } } } } public void display_map() { for (int i = 1; i <= 25; i++) { for (int j = 1; j <= 25; j++) { if (i == cityX[0] && j == cityY[0]) System.out.print("C1"); else if (i == cityX[1] && j == cityY[1]) System.out.print("C2"); else if (i == cityX[2] && j == cityY[2]) System.out.print("C3"); else if (i == cityX[3] && j == cityY[3]) System.out.print("C4"); else if (i == plantx && j == planty) System.out.print("PP"); else System.out.print("<>"); } System.out.println(); } System.out.println(); } } public class StatePlant { public static void main(String[] args) { Scanner sc = new Scanner(System.in); State s = new State(); s.read_input(); s.calc_plant(); System.out.println("Locate the plan at : " + s.getPlantX() + " " + s.getPlantY()); System.out.println("Enter 1 to view a Map of the scenario, or 0 to exit:"); String inp = sc.nextLine(); if (inp.charAt(0) == '1') { s.display_map(); } sc.close(); } }
************************************************** Thanks for your question. We try our best to help you with detailed answers, But in any case, if you need any modification or have a query/issue with respect to above answer, Please ask that in the comment section. We will surely try to address your query ASAP and resolve the issue.
Please consider providing a thumbs up to this question if it helps you. by Doing that, You will help other students, who are facing similar issue.