Java 打印通过方法调用创建的数组中的位置0

Java 打印通过方法调用创建的数组中的位置0,java,Java,我正在尝试使用两个单独的类创建一副卡片,这两个类将调用createCard方法并返回该卡片并将其附加到DeckOfCards类中的数组中。就我所知,阵列似乎是一种冒险。我目前的问题是,我正在试图弄清楚,为什么当我请求打印appendex 0时,我收到的卡位置不正确。因此,如果我输入2个NumberOfRanks和2个NumberOfSuits并尝试打印出位置0,我将收到第二个位置。如果我尝试使用3和3打印,我将获得第三个位置 对不起,这是一段文字 有什么想法吗 public class Deck

我正在尝试使用两个单独的类创建一副卡片,这两个类将调用createCard方法并返回该卡片并将其附加到DeckOfCards类中的数组中。就我所知,阵列似乎是一种冒险。我目前的问题是,我正在试图弄清楚,为什么当我请求打印appendex 0时,我收到的卡位置不正确。因此,如果我输入2个NumberOfRanks和2个NumberOfSuits并尝试打印出位置0,我将收到第二个位置。如果我尝试使用3和3打印,我将获得第三个位置

对不起,这是一段文字

有什么想法吗

public class DeckofCards {
    private int NumberOfRanks;
    private int NumberOfSuits;
    private int SizeOfDeck;
    private int whatSuit;

    public void DeckofCards ( int NumberOfRanks, int NumberOfSuits ) {
        this.NumberOfRanks = NumberOfRanks;
        this.NumberOfSuits = NumberOfSuits;

        SizeOfDeck = NumberOfRanks * NumberOfSuits;

        Cards newCard = new Cards();

        newCard.setCards ( NumberOfRanks, NumberOfSuits );

        String[] newDeck = new String [ SizeOfDeck ];
        int counter;
        for ( counter=0; counter <= NumberOfRanks; counter++ ) {

        for ( whatSuit = 1; whatSuit <= NumberOfSuits; whatSuit++ ){
            newCard.createCard ( counter, whatSuit );
            newDeck[counter] = newCard.createCard ( counter, whatSuit );
            System.out.println ( newDeck[ counter ] );
        }

    }
   System.out.println ( newDeck [0] );
}


public String createCard( int newCard, int whatSuit ) {


    createCard = newCard;
    theNumber = Integer.toString(createCard + 1);
    theSuit = Integer.toString ( whatSuit );

    theCard = ( "S" + theSuit + "R" + theNumber );

    return theCard;

}



Output:

How many suits? 2
How many ranks? 2 
S1R1
S2R1
S1R2
S2R2
S1R3
S2R3
S2R1 //Attempt to print position 0

Output:
How many suits? 3
How many ranks? 2
S1R1
S2R1
S3R1
S1R2
S2R2
S3R2
S1R3
S2R3
S3R3
S3R1 //Attempt to print position 0
公共类卡片{
私人国际职级;
私人诉讼;
私有int SizeOfDeck;
私人whatSuit;
公共无效甲板(国际号码等级、国际号码套装){
this.NumberOfRanks=NumberOfRanks;
this.NumberOfSuits=NumberOfSuits;
SizeOfDeck=NumberOfRanks*NumberOfSuites;
卡片newCard=新卡片();
newCard.setCards(NumberOfRanks,NumberOfSuits);
String[]newDeck=新字符串[SizeOfDeck];
整数计数器;

对于(counter=0;counter而言,问题在于您不是每次添加卡时都递增
counter
,而是每个完整的内部循环只递增一次。通过重复使用相同的索引,您正在覆盖数组中的值

将外部循环更改为循环
rank
,并使用类似以下内容:

int counter = 0;
for (int rank = 1; rank <= NumberOfRanks; rank++) {
    for (whatSuit = 1; whatSuit <= NumberOfSuits; whatSuit++) {
        newDeck[counter++] = newCard.createCard(rank, whatSuit);
        System.out.println(newDeck[counter - 1]);
    }
} 
int计数器=0;

对于(int rank=1;rank而言,问题在于您不是每次添加卡时都递增
计数器
,而是每个完整的内部循环只递增一次。通过使用相同的索引,您正在覆盖数组中的值

将外部循环更改为循环
rank
,并使用类似以下内容:

int counter = 0;
for (int rank = 1; rank <= NumberOfRanks; rank++) {
    for (whatSuit = 1; whatSuit <= NumberOfSuits; whatSuit++) {
        newDeck[counter++] = newCard.createCard(rank, whatSuit);
        System.out.println(newDeck[counter - 1]);
    }
} 
int计数器=0;

对于(intrank=1;rank,我很确定您的代码缺少一个
}
关闭
计数器
循环。您正在生成内部循环中每个等级的所有卡片,但每个卡片都进入同一索引的
newDeck
。如果您将变量
计数器
重命名为
whichRank
,可能会使问题更清楚。我很确定您的代码缺少一个
}
关闭
计数器
循环。您正在生成内部循环中每个级别的所有卡片,但每个卡片都进入同一索引的
新卡片组
。如果您将变量
计数器
重命名为
whichRank
,可能会使问题更清楚。这似乎有效。唯一的问题是如果我尝试打印每次通过循环时,它都会输出空数组位置。但是,如果我在循环完成后特别要求一个位置,我似乎在获得该位置时没有问题。因此,最终这对我来说是可行的,因为它按预期工作。我真的很感谢您查看我的代码并做出响应!我选择这样做的原因是使用计数器来完成这两项工作是因为我想不出更好的方法来完成这项工作。除了我在上面发布的事实之外,它似乎有点@Kevinanderson的作用。为了每次真正打印出数据组计数器,唯一需要改变的是删除newDeck[counter++]中的++。否则它将按预期工作。@Twissted OK,将其更改为
System.out.println(newDeck[counter-1])
,但你真的应该在加载卡片后从循环和打印中取出打印内容。创建和打印是独立的。是啊,我把它们放进去只是为了让我能够直观地看到for循环中发生的事情。只是为了我的编码开发阶段:)Ty!这似乎有效。唯一的另一件事是,如果我每次尝试打印数组位置时,它都会打印空值。但是,如果我在循环完成后特别要求一个位置,我似乎在获得该位置时没有问题。因此,最终这对我有效,因为它按预期工作。我真的同意感谢您查看我的代码并作出回应!我之所以选择使用计数器来完成这两项工作,是因为我想不出更好的方法来完成这项工作。除了我在上面发布的事实之外,它似乎在某种程度上起到了@Kevinanderson的作用。唯一需要更改的是每次打印甲板计数器删除newDeck[counter++]中的+。否则它将按预期工作。@t单击“确定”,将其更改为
System.out.println(newDeck[counter-1])
,但你真的应该在加载卡片后从循环和打印中取出打印内容。创建和打印是独立的。是啊,我把它们放进去只是为了让我能够直观地看到for循环中发生的事情。就在我编码的开发阶段:)Ty!