Si la declaración no funciona con los métodos Getter y Setter

Actualmente estoy trabajando en un juego de consola con un grupo de 3 personas, incluido yo mismo, que están creando el juego "Black Jack" para un proyecto escolar, pero tenemos un problema en el programa dentro de la clase de Java 'Menu.java'. Hice un método para verificar el valor actual de la tarjeta cada vez que el jugador selecciona "HIT" dentro de una instrucción de cambio en la línea 63 que luego llama al método llamado playerGetCard () en la clase Dealer.java que luego llama al método n.addValue (x); en la línea 143 y lo devuelve a la clase Menu.java que luego suma el número del valor de la tarjeta aleatoria dada en Dealer.java en un método setter que fue renombrado como addValue en la línea 22 dentro de la clase Menu.java, porque Quiero sumar todos los números que se le dan al jugador y tan pronto como alguien seleccione "HIT" en el menú. La clase de Java en la línea 37 llama a un método llamado "handValuePlayerCheck" en la línea 26 que verifica si el valor actual de la carta llega a 21, si lo hace, entonces el juego termina y cambia el booleano llamado "setLose" el método setter a verdadero en la línea 14, pero por alguna razón la instrucción if se niega a generar el System.out.println ("USTED PERDIÓ"); y tampoco cambia el valor booleano a verdadero, lo que termina el juego dentro del método menu () en la línea 55 en la clase Menu.java.

He intentado todo, como no usar un método setter o getter y también tratar de usar "this". pero tampoco parece funcionar, ¿alguien tiene idea de por qué esto no parece actualizar el valor booleano llamado "perder"?

  • Intenté no usar los métodos Getter / Setter.

  • Cambió los métodos Getter / Setter a la clase WinOrLose.java pero tampoco funcionó, también trató de colocarlo en la misma clase que verifica los números en primer lugar en la clase Menu.Java en la línea 26

  • También intenté usar esto. (VariableName); pero no pareció cambiar nada.

  • Intenté renombrar las variables pero nada parece cambiar.

  • También intenté verificar si una variable está sobrescribiendo un valor con el mismo nombre, pero no encontré nada que pudiera sobrescribir nada.

Main.java

package com.tony;
public class Main {

    public static void main(String[] args) {
        Dealer d = new Dealer();
        Menu menu = new Menu();
        d.Cards();
        menu.menu();


    }

}


Dealer.java

package com.tony;
import java.util.ArrayList;
import java.util.Random;
import java.util.HashMap;
public class Dealer {
    String cardName;
    private int randomInt;
    private int value;
    private WinOrLose wl = new WinOrLose();
    private Menu m = new Menu();
    private HashMap<Integer, String> hmap = new HashMap<Integer, String>();

    public void Cards(){
        int counter = 1;

        for(int i = 0; i<9; i++){
            counter++;
            hmap.put(i, counter + " of diamonds");
        }
        counter = 1;
        for(int i = 9; i<18; i++){
            counter++;
            hmap.put(i, counter + " of clubs");
        }
        counter = 1;
        for(int i = 18; i<27; i++){
            counter++;
            hmap.put(i, counter + " of hearts");
        }
        counter = 1;
        for(int i = 27; i<36; i++){
            counter++;
            hmap.put(i, counter + " of spades");
        }

        for(int i = 36; i<37; i++){
            hmap.put(i, "Ace of diamonds");
        }

        for(int i = 37; i<38; i++){
            hmap.put(i, "Ace of clubs");
        }

        for(int i = 38; i<39; i++){
            hmap.put(i, "Ace of hearts ");
        }

        for(int i = 39; i<40; i++){
            hmap.put(i, "Ace of spades");
        }

        for(int i = 40; i<41; i++){
            hmap.put(i, "Jack of diamonds");
        }

        for(int i = 41; i<42; i++){
            hmap.put(i, "Jack of clubs");
        }

        for(int i = 42; i<43; i++){
            hmap.put(i, "Jack of hearts");
        }

        for(int i = 43; i<44; i++){
            hmap.put(i, "Jack of spades");
        }

        for(int i = 44; i<45; i++){
            hmap.put(i, "Queen of spades");
        }

        for(int i = 45; i<46; i++){
            hmap.put(i, "Queen of diamonds");
        }

        for(int i = 46; i<47; i++){
            hmap.put(i, "Queen of clubs");
        }
        for(int i = 47; i<48; i++){
            hmap.put(i, "Queen of hearts");
        }

        for(int i = 48; i<49; i++){
            hmap.put(i, "King of spades");
        }

        for(int i = 49; i<50; i++){
            hmap.put(i, "King of diamonds");
        }

        for(int i = 50; i<51; i++){
            hmap.put(i, "King of clubs");
        }

        for(int i = 51; i<52; i++){
            hmap.put(i, "King of hearts");
        }
    }

    public void dealCard(){ // Once hit has been selected this will randomly generate a number 
        this.randomInt = (int) (Math.random()*52+1);
        setCardName(hmap.get(this.randomInt));
    }

    public String getCardName() {
        return cardName;
    }

    public void setCardName(String cardName) {
        this.cardName = cardName;
    }


    public void playerGetCard() { // that card and it's value and adds it to m.addValue();
        ArrayList<String> player = new ArrayList<String>();
        player.add(getCardName());


        if(getCardName().contains("Ace")){
            System.out.println("This is an " + getCardName());
            //Check players total card number if goes over add 1
            //if doesn't add 10
            if(m.getValue() <= 11){
                m.addValue(11);
            }else{
                m.addValue(1);
            }


        }else if(getCardName().contains("Jack") || getCardName().contains("Queen") || getCardName().contains("King")) {
            System.out.println("This is a " + getCardName());
            // Check max in winorlose
            m.addValue(10);
        }else {
            int n = Integer.parseInt(getCardName().substring(0, 1));
            System.out.println(n);
            m.addValue(n);
            // check max in winorlose
            System.out.println("Name of random card is " + getCardName());
        }
        System.out.println("Your total hand value is: " + m.getValue());
    }



}

Menu.java

package com.tony;

import java.util.Scanner;


public class Menu {
    private boolean lose;
    private int value;

    public boolean isLose() {
        return lose;
    }

    public void setLose(boolean lose) {
        this.lose = lose;
    }

    public int getValue() {
        return value;
    }

    public void addValue(int value) { // This takes the value of the randomly given card and adds it here.
        this.value = this.value + value;
    }

    public void handValuePlayerCheck(){ // Checks if the value of the cards that were given goes over 21 if it does then change boolean lose to false and display "You lost"
        System.out.println(isLose());
        if(this.value > 21){
            System.out.println("YOU LOST");
            setLose(true);
        }



    }

    public void menu(){
        Scanner i = new Scanner(System.in);
        Player p = new Player();
        Dealer d = new Dealer();
        System.out.println("Welcome to black jack!");
        d.Cards();
        System.out.println("What is your name?");
        p.setName(i.nextLine());
        System.out.println("Let's Begin!");
        System.out.println();
        System.out.println("1: Hit");
        System.out.println("2: Split");
        System.out.println("3: Hold");
        System.out.println("4: Double Down");
        System.out.println("5: Surrender");
        System.out.println("Your turn!");

        while(true){
            if (isLose()) {
                System.out.println("You lost! Try again!");
                break; // IF lose variable is set to TRUE then the game will end using the break command and display "You lost! Try Again!"
            }


            boolean has = i.hasNextInt();
            if (has) {
                switch (i.nextInt()) { //This calls the methods case 1: is the "HIT" option.
                    case 1:
                        handValuePlayerCheck();
                        d.dealCard();
                        d.playerGetCard();
                        break;
                }

            }





        }


    }


}



Respuesta 1

Está utilizando dos instancias diferentes de su clase de menú. (dos objetos separados)

Uno en su método principal y otro en su clase de distribuidor.

Entonces, cuando está agregando valor, lo está agregando dos al uno en la clase Dealer.

Pero el valor en su clase de menú siempre permanece 0.

Puede ver esto cuando imprime el valor en la función handValuePlayerCheck de las clases de menú.

Respuesta: 2

Tu código es un poco confuso. Pero tienes varias instancias de tus clases.

El problema principal es que tiene dos instancias de menú. Uno que está haciendo la verificación y que está imprimiendo el menú y se crea una instancia dentro de su instancia de distribuidor que aumenta el valor.

Pero también creó varias instancias de distribuidor. Creó uno en main que no se usa más tarde ...

Debe definir claramente qué instancias necesita y qué instancias se necesitan entre sí ... Entonces, en lugar de crear nuevas instancias de Dealer y Menu dentro de los constructores, puede crear las instancias dentro de main y establecer las variables de instancia a través de setters.

Respuesta: 3

paquete de tarea1; import java.applet.Applet; import java.awt.Graphics; Tarea pública La tarea 1A extiende Applet {pintura vacía pública (Gráficos g) {g.drawString ("CIS 35A Student Learning ...

Estoy tratando de usar la entrada del usuario para eliminar una tupla de la canción del atributo, pero recibo un error que dice java.sql.SQLSyntaxErrorException: columna desconocida 'Paragould' en 'cláusula where' Aquí está mi ...

Soy nuevo en Java 8 y necesito ayuda para analizar si la implementación de BiFunction usando lambda se puede reducir a una sola línea de código. Recibo una respuesta JSON de una API REST en forma de una cadena, ...

Estoy haciendo un programa que calcula una combinación dados dos números, por ejemplo: java Combination 5 3 daría una respuesta de 10. Tengo un método que se parece a esto: public static int choose (int n, ...