是否可以使用布尔值而不是列表以这种方式进行随机播放?
Is it possible to do a shuffle in this manner with a boolean instead of a list?
我的代码(在 Eclipse 上的 Java 中)显示了 a 文件中的 3 张随机卡片。我正在尝试让洗牌按钮起作用并随机洗牌 3 张新牌。我用了“Collections.shuffle(卡片);”并将我的布尔数组传递给它,但它说我不能,因为它需要一个 List<> 列表。是否可以让随机播放与我的布尔值一起使用,还是我必须使用列表?
这是我的代码:
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;
@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);
}
}
您可以对数组实施 Fisher–Yates 随机播放。
private void shuffle(){
for(int i = cards.length - 1; i > 0; i--){
int j = java.util.concurrent.ThreadLocalRandom.current().nextInt(i + 1);
boolean temp = cards[i];
cards[i] = cards[j];
cards[j] = temp;
}
}
我的代码(在 Eclipse 上的 Java 中)显示了 a 文件中的 3 张随机卡片。我正在尝试让洗牌按钮起作用并随机洗牌 3 张新牌。我用了“Collections.shuffle(卡片);”并将我的布尔数组传递给它,但它说我不能,因为它需要一个 List<> 列表。是否可以让随机播放与我的布尔值一起使用,还是我必须使用列表?
这是我的代码:
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;
@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);
}
}
您可以对数组实施 Fisher–Yates 随机播放。
private void shuffle(){
for(int i = cards.length - 1; i > 0; i--){
int j = java.util.concurrent.ThreadLocalRandom.current().nextInt(i + 1);
boolean temp = cards[i];
cards[i] = cards[j];
cards[j] = temp;
}
}