es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es posible realizar un intercambio en esta forma con un booleano en lugar de una lista?

Aquí está mi código (en Java en Eclipse) muestra 3 cartas aleatorias de un archivo. Estoy tratando de hacer que funcione un botón de mezcla y que mezcle aleatoriamente 3 cartas nuevas. Usé “Collections.shuffle(cards);” y le pasé mi matriz booleana pero dice que no puedo porque quiere una lista < >. ¿Es posible hacer que la mezcla funcione con mi booleana o tendría que usar una lista?

Aquí está mi código:

“`java
import java.util.Collections;
import java.util.List;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class DisplayCards extends Application {

<pre><code>HBox imageViews;

@Override
public void start(Stage primaryStage) throws Exception {
GridPane pane = new GridPane();
pane.setAlignment(Pos.CENTER);
boolean[] cards = new boolean[52];
int count = 0;
while(count < 3) {
int card = (int)(Math.random() * 52);

if(!cards[card]) {
cards[card] = true;
pane.add(new ImageView(new Image("card/" + (card) + ".png")), count, 0);
count++;
}
}
imageViews = new HBox();
imageViews.setAlignment(Pos.CENTER);

shuffle();

Button btnShuffle = new Button("Shuffle");
btnShuffle.setOnAction(new EventHandler<actionevent>() {

public void handle(ActionEvent event) {
shuffle();

}
});

BorderPane Bpane = new BorderPane();
Bpane.setCenter(imageViews);
Bpane.setBottom(btnShuffle);

Scene scene = new Scene(pane, 250, 150);
primaryStage.setTitle("Display 4 Cards");
primaryStage.setScene(scene);
primaryStage.show();

}

private void shuffle() {
Collections.shuffle(cards);

}

public static void main(String[] args) {
launch(args);
}
</code></pre>

}
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    El método Collections.shuffle() requiere un parámetro List<> para funcionar. Para utilizar este método, puedes convertir tu matriz de tipo boolean en una List<integer> y pasarla al método.

    Aquí tienes cómo puedes modificar tu código para mezclar las cartas:

    1. Cambia la variable cards a una List<integer>:
    List<integer> cards = new ArrayList<integer>();
    
    1. Añade 52 cartas a la lista:
    for (int i = 0; i < 52; i++) {
        cards.add(i);
    }
    
    1. Mezcla la lista:
    Collections.shuffle(cards);
    
    1. Toma las primeras tres cartas de la lista mezclada:
    List<integer> hand = cards.subList(0, 3);
    
    1. Utiliza estas cartas para mostrar las imágenes:
    for (int i = 0; i < 3; i++) {
        int card = hand.get(i);
        pane.add(new ImageView(new Image("card/" + (card) + ".png")), i, 0);
    }
    

    Aquí tienes el código modificado:

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.geometry.Pos;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.image.Image;
    import javafx.scene.image.ImageView;
    import javafx.scene.layout.BorderPane;
    import javafx.scene.layout.GridPane;
    import javafx.scene.layout.HBox;
    import javafx.stage.Stage;
    
    public class DisplayCards extends Application {
    
        HBox imageViews;
        List<integer> cards;
    
        @Override
        public void start(Stage primaryStage) throws Exception {
            GridPane pane = new GridPane();
            pane.setAlignment(Pos.CENTER);
    
            cards = new ArrayList<integer>();
            for (int i = 0; i < 52; i++) {
                cards.add(i);
            }
    
            mostrarCartas(pane);
    
            imageViews = new HBox();
            imageViews.setAlignment(Pos.CENTER);
    
            Button btnShuffle = new Button("Mezclar");
            btnShuffle.setOnAction(new EventHandler<actionevent>() {
    
                public void handle(ActionEvent event) {
                    mezclar();
                    mostrarCartas(pane);
                }
            });
    
            BorderPane Bpane = new BorderPane();
            Bpane.setCenter(imageViews);
            Bpane.setBottom(btnShuffle);
    
            Scene scene = new Scene(pane, 250, 150);
            primaryStage.setTitle("Mostrar 3 Cartas");
            primaryStage.setScene(scene);
            primaryStage.show();
    
        }
    
        private void mostrarCartas(GridPane pane) {
            List<integer> hand = cards.subList(0, 3);
            pane.getChildren().clear();
            for (int i = 0; i < 3; i++) {
                int card = hand.get(i);
                pane.add(new ImageView(new Image("card/" + (card) + ".png")), i, 0);
            }
        }
    
        private void mezclar() {
            Collections.shuffle(cards);
    
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    
    
    
    }
    

    Con estos cambios, el botón de mezcla debería funcionar como se espera.

Comments are closed.