El método devuelve un valor incorrecto en la clase principal

Hockz:

Cada vez que corro InschrijvingApplicatie, consigo un valor erróneo de la raya System.out.printf("Hoeveel broodjes wil je bestellen? (max %d) ", maxBroodjes);porque el int debe ser "10" cuando entro 'p' en esta línea

System.out.printf("Tot welke categorie behoort u?\nTyp w voor een werknemer, p voor een werknemer met partner, g voor een gast: ");

Estoy suponiendo que hay algo equivocado en el int línea maxBroodjes = (inschrijving.geefAantalPersonen() * 5);, pero parece que no puede averiguar qué.

Como la salida debe ser similar

El ejercicio es la siguiente: para una empresa que está invitando a los empleados ( 'W' en el código), empleado con un socio ( 'p') y clientes ( 'g') y dejar que ellos se llenan en su nombre, qué tipo de visitante (empleado + socio, cliente o empleado) que están, entonces preguntan cuántos sándwiches que la persona quiere (Habitación y el empleado puede máximo requieren 5 sándwiches, empleado + partner pueden solicitar 10) y el valor máximo se muestra en el entero (máx% d). Todo esto es en un bucle hasta que el usuario escribe "no" (pero que el primer carácter se utiliza => lo que resulta en 'n') cuando se le preguntó "Zijn er ponche inschrijvingen", y si la respuesta es sí, se repite.

Inschrijving.java

package domein;
public class Inschrijving {

private String naam;
private char categorie;
private int aantalBroodjes;

public Inschrijving(String naam, char categorie) {
    setNaam(naam);
    setCategorie(categorie);
}

public String getNaam() {
    return naam;
}

private void setNaam(String naam) {
    this.naam = naam;
}

public char getCategorie() {
    return categorie;
}

private void setCategorie(char categorie) {
    if (categorie == 'w' || categorie == 'p' || categorie == 'g') {
        this.categorie = categorie;
    } else {
        this.categorie = 'g';
    }

}

public int getAantalBroodjes() {
    return aantalBroodjes;
}

public void setAantalBroodjes(int aantalBroodjes) {

    if (aantalBroodjes <= (geefAantalPersonen() * 5)) {
        this.aantalBroodjes += aantalBroodjes;
    } else {
        this.aantalBroodjes += (geefAantalPersonen() * 2);
    }
}

public int geefAantalPersonen() {
    switch (categorie) {
        case 'w':
        case 'g':
            return 1;
        default:
            return 2;

    }
  }
}

Solicitud de inscripción

package ui;

import domein.Inschrijving;
import java.util.Scanner;

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

    Scanner invoer = new Scanner(System.in);
    String antwoord;
    char eersteLetter;

    System.out.println("Zijn er nog inschrijvingen? ");
    antwoord = invoer.nextLine();
    eersteLetter = antwoord.toLowerCase().charAt(0);

    String naam = null;
    String categorie;
    char categorieEersteLetter = 0;

    int werknemer = 0;
    int werknemerMetPartner = 0;
    int gast = 0;

    int aantalBroodjes;
    int tijdelijk;

    Inschrijving inschrijving = new Inschrijving(naam, categorieEersteLetter);

    if (eersteLetter != 'n') {
        do {
            System.out.println("Wie mag ik inschrijven? ");
            naam = invoer.next();

            do {
                System.out.printf("Tot welke categorie behoort u?\nTyp w voor een werknemer, p voor een werknemer met partner, g voor een gast: ");

                categorie = invoer.next();
                categorieEersteLetter = categorie.toLowerCase().charAt(0);


                switch (categorieEersteLetter) {
                    case 'w':
                        werknemer++;
                        break;
                    case 'p':
                        werknemerMetPartner++;
                        break;
                    case 'g':
                        gast++;
                        break;
                }

            } while (categorieEersteLetter != 'w' && categorieEersteLetter != 'p' && categorieEersteLetter != 'g');
            int maxBroodjes = (inschrijving.geefAantalPersonen() * 5);
            do {
                System.out.printf("Hoeveel broodjes wil je bestellen? (max %d) ", maxBroodjes);
                tijdelijk = invoer.nextInt();
            } while (tijdelijk > maxBroodjes);
            aantalBroodjes = tijdelijk;
            inschrijving.setAantalBroodjes(aantalBroodjes);

            System.out.println("Zijn er nog inschrijvingen? ");
            antwoord = invoer.next();
            eersteLetter = antwoord.toLowerCase().charAt(0);
        } while (eersteLetter != 'n');

    }
    System.out.printf("Er komen %d werknemer(s) zonder partner, %d werknemer(s) met partner en %d gast(en) naar de receptie. Er dienen %d broodjes besteld te worden.", werknemer, werknemerMetPartner, gast, inschrijving.getAantalBroodjes());

}
}
Dos salvaje:

Hay algunos problemas con su enfoque, se puede trabajar, pero no debe hacerlo de esa manera.

En primer lugar, se almacenan los sándwiches total solicitado para todos invitados poblaron en un solo Inschrijvingobjeto, que no tienen sentido! (¿Es necesario conocer los sándwiches totales solicitados o únicos solicitados por mí?). Por lo tanto, cambiar setAantalBroodjesen su Inschrijvingclase a:

public void setAantalBroodjes(int aantalBroodjes) {
  this.aantalBroodjes = aantalBroodjes;
}

En segundo lugar, el requisito es tener una lista de personas y hacer algo con ellos, por lo que debería considerar usar un soporte de estructura de datos que almacena una lista de personas como un Arrayo un ArrayList, entonces usted puede hacer lo que quiera con sus datos una vez entrada de parada de usuario ( eersteLetter == 'n'en su caso).

List<Inschrijving> inschrijven = new ArrayList<>();
try (Scanner invoer = new Scanner(System.in)) { // http://tutorials.jenkov.com/java-exception-handling/try-with-resources.html
  System.out.println("Zijn er nog inschrijvingen? ");
  String antwoord = invoer.nextLine();
  char eersteLetter = antwoord.toLowerCase().charAt(0);
  while (eersteLetter != 'n') {

    Inschrijving inschrijving = null;
    System.out.println("Wie mag ik inschrijven? ");
    String naam = invoer.nextLine();
    char categorieEersteLetter = 0;
    do {
      System.out.printf(
          "Tot welke categorie behoort u?\nTyp w voor een werknemer, p voor een werknemer met partner, g voor een gast: ");
      String categorie = invoer.nextLine();
      categorieEersteLetter = categorie.toLowerCase().charAt(0);
    } while (categorieEersteLetter != 'w' && categorieEersteLetter != 'p' && categorieEersteLetter != 'g');
    inschrijving = new Inschrijving(naam, categorieEersteLetter);

    int maxBroodjes = (inschrijving.geefAantalPersonen() * 5);
    int tijdelijk;
    do {
      System.out.printf("Hoeveel broodjes wil je bestellen? (max %d) ", maxBroodjes);
      tijdelijk = invoer.nextInt();
      invoer.nextLine(); // https://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-or-nextfoo 
    } while (tijdelijk > maxBroodjes);
    inschrijving.setAantalBroodjes(tijdelijk);
    inschrijven.add(inschrijving);

    System.out.println("Zijn er nog inschrijvingen? ");
    antwoord = invoer.nextLine();
    eersteLetter = antwoord.toLowerCase().charAt(0);
  }
}

Cuando el usuario se terminó su entrada:

// Do stuffs with your list of people here
int werknemer = 0;
int werknemerMetPartner = 0;
int gast = 0;
int aantalBroodjes = 0;
for (Inschrijving inschrijving : inschrijven) {
  char categorie = inschrijving.getCategorie();
  switch (categorie) {
    case 'w':
      werknemer++;
      break;
    case 'p':
      werknemerMetPartner++;
      break;
    case 'g':
      gast++;
      break;
  }
  aantalBroodjes += inschrijving.getAantalBroodjes();
}
System.out.printf(
        "Er komen %d werknemer(s) zonder partner, %d werknemer(s) met partner en %d gast(en) naar de receptie. Er dienen %d broodjes besteld te worden.",
        werknemer, werknemerMetPartner, gast, aantalBroodjes);

Debido a que usted es nuevo en java, utilizo un bucle foreach ejemplo aquí para hacer, después de aprender sobre programación orientada a objetos y familiarizados con Java, le sugiero que reaserch Java 8 Corriente del API y la expresión lambda para el trabajo con tipos de colección.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=218203&siteId=1
Recomendado
Clasificación