需要帮助:Stack in Vector

时间:2017-03-23 16:57:45

标签: java vector stack

我正在为大学做一个项目,我需要你的帮助,因为我在API文档中找不到我的愿望。

我有一个名为Belote.java的课程(模拟纸牌游戏)。

我的教授想强迫我们在Vector中使用Stack类(不能使用另一个类抱歉:/)

这两种方法不会运行,我想我知道为什么,但我不能单独解决这个问题。

this.mainsJoueurs.set(numjoueur, this.mainsJoueurs.get(numjoueur).push(carte));

this.mainsJoueurs.set(numjoueur, this.mainsJoueurs.get(numjoueur).pop());

我对方法bug进行了评论。

package TP.TP5.Exercice2.Question2;

import java.util.Random;
import java.util.Vector;
import java.util.Stack;

import TP.TP5.Exercice1.Question4.Carte;

public class Belote {
    private Stack<Carte> tasDistibution;
    private Vector<Stack<Carte>> mainsJoueurs;
    private Vector<Stack<Carte>> plisJoueurs;

    public Belote() {
        this.tasDistibution = new Stack<Carte>();
        this.mainsJoueurs = new Vector<Stack<Carte>>(4);
        this.plisJoueurs = new Vector<Stack<Carte>>(4);

        for (int i = 0; i < 4; i++) {
            this.mainsJoueurs.add(i, new Stack<Carte>());
            this.plisJoueurs.add(i, new Stack<Carte>());
        }

    }

    private void initialiserTasDistribution() {
        for (int i = 1; i <= 4; i++) {
            for (int j = 1; j <= 13; j++) {
                if (j == 1 || (j >= 7 && j <= 13)) {
                    this.tasDistibution.push(new Carte(i, j));
                }
            }
        }
    }

    private void couper() {
        Stack<Carte> tas1 = new Stack<Carte>();
        Stack<Carte> tas2 = new Stack<Carte>();

        Random r = new Random();
        int coupe = 1 + r.nextInt(33 - 1);

        for (int i = 0; i < coupe; i++) {
            Carte carte = this.tasDistibution.peek();
            this.tasDistibution.pop();
            tas1.push(carte);
        }

        while (tasDistibution.isEmpty() == false) {
            Carte carte = this.tasDistibution.peek();
            this.tasDistibution.pop();
            tas2.push(carte);
        }

        while (tas1.isEmpty() == false) {
            Carte carte = tas1.peek();
            tas1.pop();
            this.tasDistibution.push(carte);
        }

        while (tas2.isEmpty() == false) {
            Carte carte = tas2.peek();
            tas2.pop();
            this.tasDistibution.push(carte);
        }
    }

    private void melanger(int nbMelange) {
        Carte tabcarte[] = new Carte[32];

        for (int i = 0; i < tabcarte.length; i++) {
            Carte cartesommet = this.tasDistibution.peek();
            this.tasDistibution.pop();
            tabcarte[i] = cartesommet;
        }

        for (int i = 0; i < nbMelange; i++) {
            Random r = new Random();
            int pos1 = 1 + r.nextInt(32 - 1);
            int pos2 = 1 + r.nextInt(32 - 1);

            if (pos1 == pos2) {
                System.out.println("Pas de chance");
            } else {
                Carte temp;
                temp = tabcarte[pos1];
                tabcarte[pos1] = tabcarte[pos2];
                tabcarte[pos2] = temp;
            }
        }

        for (int i = 0; i < tabcarte.length; i++) {
            Carte carte = tabcarte[i];
            this.tasDistibution.push(carte);
        }
    }

    private void donnerCartesAJoueur(int nbcartedonnes, int numjoueur) {
        for (int i = 0; i < nbcartedonnes; i++) {
            Carte carte = this.tasDistibution.peek();
            this.tasDistibution.pop();

            //My problem is right here, the method set doesn't work, because the method push return a "Carte" and not a "Stack<Carte>"
            //The compilateur says : The method set(int, Stack<Carte>) in the type Vector<Stack<Carte>> is not applicable for the arguments (int, Carte)

            this.mainsJoueurs.set(numjoueur, this.mainsJoueurs.get(numjoueur).push(carte));
        }
    }

    private void distribuer() {
        for (int i = 0; i < 4; i++) {
            this.donnerCartesAJoueur(3, i);
        }

        for (int i = 0; i < 4; i++) {
            this.donnerCartesAJoueur(2, i);
        }

        for (int i = 0; i < 4; i++) {
            this.donnerCartesAJoueur(3, i);
        }

        for (int i = 0; i < 4; i++) {
            System.out.println("\n\nDistribution pour joueur : " + (i + 1) + " \n\nMain du joueur : " + (i + 1));
            this.mainsJoueurs.get(i).toString();
        }
    }

    private void assemblerPlisJoueur() {
        for (int i = 0; i < 4; i++) {
            while (this.plisJoueurs.get(i).isEmpty() == false) {
                Carte carte = this.plisJoueurs.get(i).peek();

                //Same problem here

                this.plisJoueurs.set(i, this.plisJoueurs.get(i).pop());
                this.tasDistibution.push(carte);
            }
        }
    }

    private void preparerPremiereManche() {
        this.initialiserTasDistribution();
        this.melanger(32);
        this.couper();
        this.distribuer();
    }

    private void preparerMancheSuivante() {
        this.assemblerPlisJoueur();
        this.couper();
        this.distribuer();
    }

    private void jouerPli() {
        Stack < Carte > tasIntermediaire = new Stack<Carte>();

        for (int i = 0; i < 4; i++) {
            Carte carte = this.mainsJoueurs.get(i).peek();

            //Same problem here

            this.mainsJoueurs.set(i, this.mainsJoueurs.get(i).pop());
            tasIntermediaire.push(carte);
        }

        Random r = new Random();
        int gagnant = 0 + r.nextInt(4 - 0);
        System.out.println("Le joueur " + (gagnant + 1) + " a gagné ce pli");

        for (int i = 0; i < 4; i++) {
            Carte carte = tasIntermediaire.peek();
            tasIntermediaire.pop();

            //Same problem here

            this.plisJoueurs.set(gagnant, this.plisJoueurs.get(gagnant).push(carte));
        }
        System.out.println("Pli du joueur " + (gagnant + 1));
        this.plisJoueurs.get(gagnant).toString();
    }

    private void jouerManche(int nbPlis) {
        for (int i = 1; i <= nbPlis; i++) {
            System.out.println("\n\nPli numéro : " + i);
            this.jouerPli();
        }
        this.preparerMancheSuivante();
    }

    public void jouerPartie(int nbManches) {
        this.preparerPremiereManche();
        for (int i = 1; i <= nbManches; i++) {
            System.out.println("\n\nManche numéro : " + i);
            this.jouerManche(8);
        }
        System.out.println("Jeu terminé");
    }
}

我不知道如何仅使用Stack类来解决这个问题。

每个人都有一个想法可以真的很好:)

(抱歉我的英语不好)

1 个答案:

答案 0 :(得分:0)

问题是您传递了push方法的结果,该方法不是Stack<Carte>,而是Carte

Stack<Carte> stack = this.mainsJoueurs.get(numjoueur);
stack.push(carte); // this returns the added element
this.mainsJoueurs.set(numjoueur, stack);