Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从卡组底部更换卡_Java_Arrays_For Loop_Arraylist_Collections - Fatal编程技术网

Java 从卡组底部更换卡

Java 从卡组底部更换卡,java,arrays,for-loop,arraylist,collections,Java,Arrays,For Loop,Arraylist,Collections,我是java的初学者,创建了一个2类的程序“VideoPoker”,它基本上模仿了一个人5张牌的游戏。在这个游戏中,一副牌被洗牌,最上面的5张牌(现在洗牌的牌)被用来进行5次平局。用户可以在发牌时移除他/她收到的5张牌中的部分、全部或任何一张。如果用户移除一张卡,它将被移除并替换为下一张顶级卡。我被卡在用户决定移除卡的位置。在我的程序中,当有人移除所有卡片时,有时甚至只移除部分卡片时,卡片2(索引1)和卡片4(索引3)始终保留在下一手(5张)打印中。我的尝试在下面的代码图中: Deck.java

我是java的初学者,创建了一个2类的程序“VideoPoker”,它基本上模仿了一个人5张牌的游戏。在这个游戏中,一副牌被洗牌,最上面的5张牌(现在洗牌的牌)被用来进行5次平局。用户可以在发牌时移除他/她收到的5张牌中的部分、全部或任何一张。如果用户移除一张卡,它将被移除并替换为下一张顶级卡。我被卡在用户决定移除卡的位置。在我的程序中,当有人移除所有卡片时,有时甚至只移除部分卡片时,卡片2(索引1)和卡片4(索引3)始终保留在下一手(5张)打印中。我的尝试在下面的代码图中:

Deck.java:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Random;

public class Deck {
    // Constructing a deck from two arrays
    String[] suit = { "C", "D", "H", "S" };
    String[] rank = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
    ArrayList<String> deck = new ArrayList<String>(suit.length * rank.length);
    int currentCard = 0;

    // Storing public variables
    int suits = suit.length;
    int ranks = rank.length;
    int deckSize = deck.size();

    // Constructs a deck with 52 cards
    public Deck(){
        for(int i = 0; i < suits; i ++){
            for(int j = 0; j < ranks; j++){
                String temp = rank[j] + suit[i];
                deck.add(temp);
            }
        }
    }

    public String toString(){
        return Arrays.deepToString(deck.toArray());    
    }

    // Fisher-Yates Shuffle 
    public ArrayList<String> shuffle(){
        Collections.shuffle(deck);
        return deck;
    }

    public String deal(){
        return deck.get(currentCard++);
    }

    public String remove(int i){
        return deck.remove(i);
    }

    public String get(int i){
        return deck.get(i);
    }

    public ArrayList<String> getList(){
        return deck;
    }
}
import java.util.ArrayList;
导入java.util.array;
导入java.util.Collections;
导入java.util.Random;
公务舱甲板{
//从两个数组构造一个数据组
字符串[]suit={“C”、“D”、“H”、“S”};
字符串[]秩={“A”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“J”、“Q”、“K”};
ArrayList甲板=新ArrayList(suit.length*rank.length);
int currentCard=0;
//存储公共变量
int suits=suit.length;
int ranks=rank.length;
int deckSize=deck.size();
//用52张牌构建一个牌组
公共甲板(){
for(int i=0;i
Dealer.java(测试程序):

import java.util.ArrayList;
导入java.util.array;
导入java.util.Scanner;
公共类交易商{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
甲板测试甲板=新甲板();
系统输出打印LN(测试平台);
testDeck.shuffle();
系统输出打印LN(测试平台);
对于(int i=0;i<5;i++){
System.out.print(testDeck.deal()+);
}
字符串选择;
对于(int i=0;i<5;i++){
System.out.print(“\n是否要删除卡”+(i+1)+“?”);
choice=in.next();
if(选择等于(“Y”)){
测试台。移除(i);
}
}
对于(int i=0;i<5;i++){
System.out.print(testDeck.get(i)+“”);
}
}
}
输出:

您的问题在于:

for (int i = 0; i < 5; i++){
    System.out.print("\nWould you like to remove card " + (i + 1) + "? ");
    choice = in.next();
    if (choice.equals("Y")){
        testDeck.remove(i); // <-- removing the 'i'th element is the problem
    }
}
for(int i=0;i<5;i++){
System.out.print(“\n是否要删除卡”+(i+1)+“?”);
choice=in.next();
if(选择等于(“Y”)){

testDeck.remove(i);//问题归根结底在于实现卡片组逻辑的方式。与其使用ArrayList存储卡片,然后通过它进行索引,不如使用ArrayQue(发音为“ArrayDeck”)来处理存储和移除逻辑

你应该独立于牌组跟踪玩家手部的内容;主要问题是牌组和玩家手部的耦合方式。通过使你的程序更通用,你可以消除很多复杂性


在使程序更通用的同一个过程中,你也应该使用一个单独的类来处理卡。虽然不需要想象:只有两个公共最终字段、一个构造函数和一个ToStand方法。

作为一个美学注释,你可以考虑用<代码> t>代码>替换<代码> 10代码>代码,这样所有的行列都是一个字符。杰曼斯菲尔德:谢谢你,可以。试着把第一张牌移走几次,或者在每张牌移走后展示手牌。这会让你对发生的事情有一个大致的了解。我同意你的第一个解释,但要解决:
如果他把所有的牌都移走了怎么办?看看打印屏幕。他已经移走了所有的牌,但仍然得到了相同的牌。你准备好了ht,我要解决的问题不正确-正在编辑他正在从他的牌组中移除一张不在玩家牌上的牌。希望这将有助于改进您的回答:)他应该将牌组和玩家手牌分开。尝试使用地图。映射玩家及其当前手牌的列表。
map然后使用/创建另一个玩家手牌或另一个av的ArrayList可供查阅的收藏。
for (int i = 0; i < 5; i++){
    System.out.print("\nWould you like to remove card " + (i + 1) + "? ");
    choice = in.next();
    if (choice.equals("Y")){
        testDeck.remove(i); // <-- removing the 'i'th element is the problem
    }
}
// a list used to store the index of cards to be removed    
ArrayList<Integer> indexesToRemove = new ArrayList();

for (int i = 0; i < 5; i++) {
    System.out.print("\nWould you like to remove card " + (i + 1) + "? ");
    choice = in.next();
    if (choice.equals("Y")) {
        indexesToRemove.add(i); // record index of card to be removed
    }
}

// here we remove the cards all at once    
for(int i = 0; i < indexesToRemove.size(); i++) {
    // each iteration is a guaranteed removal so
    // we subtract by i to counteract for each subsequent removal
    testDeck.remove(indexesToRemove.get(i) - i);
}