Если оператор не работает с методами Getter и Setter - PullRequest
1 голос
/ 11 мая 2019

В настоящее время я работаю над консольной игрой с группой из 3 человек, включая меня, которая создает игру «Блэк Джек» для школьного проекта, но у нас есть проблема в программе в классе Java «Menu.java». Iсоздал метод проверки текущего значения карты каждый раз, когда игрок выбирает «HIT» в инструкции switch в строке 63, которая затем вызывает метод playerGetCard () в классе Dealer.java, который затем вызывает метод n.addValue (Икс);в строке 143 и возвращает его в класс Menu.java, который затем складывает номер значения случайной карты, заданной в Dealer.java в методе установки, который был переименован в addValue в строке 22 в классе Menu.java, потому чтоЯ хочу сложить все числа, которые дает игрок, и как только кто-то выбирает «HIT» в классе Menu.Java в строке 37, он вызывает метод под названием «handValuePlayerCheck» в строке 26, который проверяет, является ли текущее значениеиз карт выше 21, если это произойдет, тогда игра заканчивается и меняет логическое значение setLose метода set на true в строке 14, но по какой-то причине оператор if отказывается выводить System.out.println («ВЫ ПОТЕРЯЛИ»«);а также не изменяет логическое значение на true, что завершает игру в методе menu () в строке 55 в классе Menu.java.

Я пробовал все, например, не использовать метод setter или getter итакже пытается использовать «это».метод, но это, похоже, тоже не работает, у кого-нибудь есть идея, почему это не обновляет логическое значение, называемое «потерять»?

  • Пробовал не использовать Getter / Setterметодов.

  • Изменены методы Getter / Setter в класс WinOrLose.java, но он не работает, также пытался поместить его в тот же класс, который проверяет числа на первом месте вКласс Menu.Java в строке 26

  • Также попытался использовать это. (VariableName);но, похоже, ничего не изменилось.

  • Попытка переименования переменных, но, похоже, ничего не изменилось.

  • Также попытался проверить, является ли переменнаяперезаписывает значение с тем же именем, но я не нашел ничего, что могло бы перезаписать что-либо.

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;
                }

            }





        }


    }


}



Ответы [ 3 ]

2 голосов
/ 12 мая 2019

Вы используете два разных экземпляра вашего класса меню. (два отдельных объекта)

Один в вашем основном методе и один в вашем классе Дилера.

Итак, когда вы добавляете Value, вы добавляете его два к одному в классе Dealer.

Но значение в вашем классе меню всегда остается 0.

Это можно увидеть, когда вы печатаете значение в ваших классах меню с помощью функции handValuePlayerCheck.

0 голосов
/ 12 мая 2019

Ну, в вашем основном методе вы объявляете объект Menu и объект Dealer, который создает два объекта Menu. Также в вашем методе menu () вы создаете новый экземпляр Dealer.

Что вам нужно сделать, это переместить метод menu () из вашего класса Menu в класс Dealer и немного его отредактировать.

Menu.java

//the other methods and instance variables
//you should move your menu() method, I just commented it out
//for your conveniance

/*
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;
                }
            }
        }
    }
*/

Dealer.java

//the other methods and instance variables

public void menu() {
        Scanner i = new Scanner(System.in);
        Player p = new Player();
        System.out.println("Welcome to black jack!");
        Cards(); //formerly, 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 (m.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:
                        m.handValuePlayerCheck();
                        dealCard(); //formerly d.dealCard()
                        playerGetCard(); //formerly d.playerGetCard()
                        break;
                }

            }
        }
    }

И ваш основной метод должен быть таким:

public static void main( String[] args ) {
     Dealer d = new Dealer();
     d.Cards();
     d.menu();
}
0 голосов
/ 12 мая 2019

Ваш код немного запутан.Но у вас есть несколько экземпляров ваших классов.

Основная проблема в том, что у вас есть два экземпляра меню.Тот, который выполняет проверку и который печатает меню, и один экземпляр создается внутри вашего экземпляра Dealer, который получает увеличенное значение.

Но вы также создали несколько экземпляров Dealer.Вы создали один в main, который не будет использован позже ...

Вы должны четко определить, какие экземпляры вам нужны, а какие нужны друг другу ... Поэтому вместо создания новых экземпляров Dealer и Menu внутри конструкторов,Вы можете создавать экземпляры внутри main и устанавливать переменные экземпляра через сеттеры.

...