Cómo configurar if-else en Java para analizar elementos de matriz

Estoy tratando de configurar mi código Java para analizar si un elemento de mi matriz asistió a Disneyland o Universal Studios. Mi matriz tiene 7 elementos para 7 asistentes. Los asistentes reciben descuentos específicos para cada parque al que asistieron, y he creado dos bucles para representar los dos parques.

¿Cómo puedo configurar mi código en el método principal para determinar a qué asistentes asistieron?

public class Visitor
{
public static void main( String args[] ) 
{

  double totalAttendeeCost = 0.0;

  //Using 1 array
  VisitorPackage[] attendee = new VisitorPackage[7];

  attendee[0] = new VisitorPackage("Mickey", 'S', "weekday", 
"Disneyland", 75.0);
  attendee[1] = new VisitorPackage("Donald", 'C', "weekday", 
"Disneyland", 75.0);
  attendee[2] = new VisitorPackage("Minnie", 'E', "weekend", 
"Disneyland", 75.0);
  attendee[3] = new VisitorPackage("Goofie", 'E', "weekend", 
"Disneyland", 75.0);
  attendee[4] = new VisitorPackage("Harry", 'C', "weekend", "Universal 
Studios", 60.0);
  attendee[5] = new VisitorPackage("Hermoine", 'S', "weekend", 
"Universal Studios", 60.0);
  attendee[6] = new VisitorPackage("Ron", 'E', "weekday", "Universal 
Studios", 60.0);

  //This is where I am looking for help    
  //if attendee == disneyland
  for(int i=0; i < attendee.length; i++)
  {
    {
      attendee[i].applyDiscount(attendee[i], 5.0, 10.0);
      attendee[i].applyWeekdayRate(attendee[i], 15.0);
      attendee[i].printInfo(attendee[i]);
      totalAttendeeCost += attendee[i].getTotalCost();
    }
  }

  //else if attendee == universal
  for(int i=0; i < attendee.length; i++)
  {
      attendee[i].applyDiscount(attendee[i], 10.0, 15.0);
      attendee[i].applyWeekdayRate(attendee[i], 20.0);
      attendee[i].printInfo(attendee[i]);
      totalAttendeeCost += attendee[i].getTotalCost();
  }

  //System.out.println("Total: $" + totalCostDisney + "\n");
  System.out.println("--------------");
  System.out.printf("Total: $%.2f\n", totalAttendeeCost);

  }
} 

Aquí está la otra clase que contiene los métodos:

public class VisitorPackage
{  
private String visitorName;
private char visitorType;
private String visitDay;
private String destination;
private double totalCost;

public VisitorPackage()
{
   visitorName ="N/A";
   visitorType = '-';
   visitDay = "-";
   destination = "N/A";
   totalCost = 0.0;
}

public VisitorPackage(String newVisitorName, char newVisitorType, 
String newVisitDay, String newDestination, double newTotalCost)
{
   visitorName = newVisitorName;
   visitorType = newVisitorType;
   visitDay = newVisitDay;
   totalCost = newTotalCost;
   destination = newDestination;
}   

public String getDestinationPark(VisitorPackage arrayInstance)
{
   if (arrayInstance.destination.equalsIgnoreCase("disneyland"))
    return destination;
   else
    return destination;
}

public double getTotalCost()
{
   return totalCost;
}

public void applyDiscount(VisitorPackage arrayInstance, double 
childRate, double seniorRate)
{
   if (arrayInstance.visitorType == 'C')
       totalCost -= ((totalCost * childRate) / 100);
   else if (arrayInstance.visitorType == 'S')
           totalCost -= ((totalCost * seniorRate) / 100);
}

 public void applyWeekdayRate(VisitorPackage arrayInstance, double 
 weekdayDiscount)
{
   if (arrayInstance.visitDay.equalsIgnoreCase("weekday"))
      totalCost -= weekdayDiscount;
}

public void printInfo(VisitorPackage arrayInstance)
{
   System.out.print(arrayInstance.visitorName + " - ");
   System.out.print(arrayInstance.destination + " - ");
   System.out.print("$");
   System.out.printf("%.2f", arrayInstance.totalCost);
   if (arrayInstance.visitorType == 'E')
      System.out.print("   ***** Discount cannot be applied to " + 
 arrayInstance.visitorName);
   System.out.println();
  }
 }
Respuesta 1

Tenga en cuenta que cada elemento de su matriz de asistentes es una instancia específica de VisitorPackage . Por lo tanto, utilice sus métodos Getter dentro de la clase VisitorPackage , pero primero elimine el parámetro para ese método y simplifíquelo así:

public String getDestinationPark() {
    return this.destination;
}

Haga lo mismo para todos sus otros métodos dentro de la clase VisitorPackage, elimine el parámetro VisitorPackage arrayInstance y cualquier relación con él dentro de sus métodos de clase, como este:

public void applyDiscount(double childRate, double seniorRate) {
    if (visitorType == 'C') {
        totalCost -= ((totalCost * childRate) / 100);
    }
    else if (visitorType == 'S')
       totalCost -= ((totalCost * seniorRate) / 100);
}

public void applyWeekdayRate(double weekdayDiscount) {
   if (visitDay.equalsIgnoreCase("weekday")) {
       totalCost -= weekdayDiscount;
   }
}

public void printInfo() {
    System.out.print(visitorName + " - ");
    System.out.print(destination + " - ");
    System.out.print("$");
    System.out.printf("%.2f", totalCost);

    if (visitorType == 'E') {
        System.out.print("   ***** Discount cannot be applied to " + visitorName);
    } 
    System.out.println();
}

Debido a que cada elemento de la matriz de asistentes es una instancia de la clase VisitorPackage, no necesita enviar esa instancia a sus métodos de clase. Ya sabe a qué instancia se refiere (Mickey, Donald, Ron, etc.) cuando proporciona el número de índice. Dado que Minnie está en el índice 2 de la matriz de asistentes, cualquier llamada a la clase VisitorPackageattendee[2].applyWeekdayRate(15.0) solo se aplicará a Minnie.

Ahora, cuando desee procesar la Matriz del asistente :

// iterate through each attendee and 
// apply necessary discounts, etc.
for (int i = 0; i < attendee.length; i++) { 
    // Disneyland
    if (attendee[i].getDestinationPark().equalsIgnoreCase("disneyland")) {
        attendee[i].applyDiscount(5.0, 10.0);
        attendee[i].applyWeekdayRate(15.0);
        attendee[i].printInfo();
        totalAttendeeCost += attendee[i].getTotalCost();
    }
    // Universal Studios
    else if (attendee[i].getDestinationPark().equalsIgnoreCase("universal studios")) {
        attendee[i].applyDiscount(10.0, 15.0);
        attendee[i].applyWeekdayRate(20.0);
        attendee[i].printInfo();
        totalAttendeeCost += attendee[i].getTotalCost();
    }
}

O podrías hacerlo así:

for (int i = 0; i < attendee.length; i++) { 
    String dest = attendee[i].getDestinationPark();
    if (dest.equalsIgnoreCase("disneyland")) {
        attendee[i].applyDiscount(5.0, 10.0);
        attendee[i].applyWeekdayRate(15.0);
        attendee[i].printInfo();
        totalAttendeeCost += attendee[i].getTotalCost();
    }
    else if (dest.equalsIgnoreCase("universal studios")) {
        attendee[i].applyDiscount(10.0, 15.0);
        attendee[i].applyWeekdayRate(20.0);
        attendee[i].printInfo();
        totalAttendeeCost += attendee[i].getTotalCost();
    }
}

O podrías hacerlo así:

for (int i = 0; i < attendee.length; i++) { 
    String dest = attendee[i].getDestinationPark();
    switch (dest.toLowerCase()) {
        case "disneyland":
            attendee[i].applyDiscount(5.0, 10.0);
            attendee[i].applyWeekdayRate(15.0);
            attendee[i].printInfo();
            totalAttendeeCost += attendee[i].getTotalCost();
            break;
        case "universal studios":   // if the string has a space
        case "universalstudios":    // OR if the string has no space
            attendee[i].applyDiscount(10.0, 15.0);
            attendee[i].applyWeekdayRate(20.0);
            attendee[i].printInfo();
            totalAttendeeCost += attendee[i].getTotalCost();
            break;
    }
}
Respuesta: 2

He firmado mi applet y está en jar. He agregado el código siguiente en mi jsp para incrustar el applet <applet name = "viewerApplet" id = "TViewerApplet" width = "100%" height = "500" code = "TViewerApplet ...

¿Cómo clasifico una matriz según un criterio? En Python puedo hacer algo como esto arr.sort (key = lambda x: x / (10 ** len (str (x)) - 1), reverse = True) Ejemplo: arr = [3,30,34,5 , 9] Después de ordenar arr = [9,5, ...

Editar: Resulta que no había reconstruido el programa en mucho tiempo. Si todas las otras respuestas para este tipo de problema no funcionan para usted, ¡intente reconstruir! Gracias timo! He visto un montón de respuestas y ...

Actualmente trabajo en un proyecto de seguimiento utilizando un receptor GPS y un módem que envía las posiciones GPS a un servidor. Desde este año hay un nuevo módem disponible con una biblioteca de firmware actualizada. Los ...