【问题标题】:1D array not printing in for loop, always equal to 0一维数组未在 for 循环中打印,始终等于 0
【发布时间】:2020-01-22 01:24:48
【问题描述】:

我正在制作一个二十一点程序。在 cardDraw 方法中,我在返回之前最后有一个 for 循环,它应该打印每个数组值,但是当我运行程序时没有显示任何内容。此外,当我在 main 方法中打印数组时,每个值都是 0,即使我在方法中设置了值。有人可以解释为什么会发生这些事情吗?这可能是一个逻辑错误,但我在程序中的其他方法中遇到了这个问题。我们只允许使用一维数组。提前致谢。

最后一件事,你能收到这个网站的电子邮件通知吗

public class blackjack {

    public static int [] drawCard(int [] cardValues, int [] otherUserCardValues) {

        int duplicates = 0;

        //fills array with cards    
        for (int count = 0; count == cardValues.length; count++) {

            duplicates = 0;
            cardValues [count] = (int)(Math.random() * 12) + 1;

            //Checks for duplicate cards in one of the hands
            for (int count2 = 0; count2 == cardValues.length; count2++) {

                if (cardValues [count] == cardValues [count2]) {
                    duplicates++;
                } //end of  if (cardValues [count] == cardValues [count2])

            } //end of  for (int count2 = 0; count != 7; count++)

            //Checks for duplicate cards in the other hand
            for (int count2 = 0; count2 == cardValues.length; count2++) {

                if (cardValues [count] == otherUserCardValues [count2]) {
                    duplicates++;
                } //end of  if (cardValues [count] == cardValues [count2])

            } //end of  for (int count2 = 0; count != 7; count++)

            //makes it loop again if there are duplicates
            if (duplicates > 4) {
                count--;
            } //end of  if (duplicates > 4)

        } //end of  for (int count = 0; count != 7; count++)

        for (int count = 0; count == cardValues.length; count++) {
            System.out.println(cardValues[count]);
        }


        return cardValues;

    } //end of  cardDraw


    public static void main(String[] args) {

        //user variables
        double money = 0;
        int userCardTotal = 0;
        int userCardCount = 0;

        int [] lowerUserCards = {0, 0, 0, 0, 0, 0};
        int [] higherUserCards = {0, 0, 0, 0, 0, 0};
        int [] userCardValues = {0, 0, 0, 0, 0, 0};
        String [] userCardNames = {"a", "a", "a", "a", "a", "a"};
        String [] userCardSuits = {"a", "a", "a", "a", "a", "a"};

        //dealer variables
        int dealerCardTotal = 0;
        int dealerCardCount = 0;

        int [] lowerDealerCards = {0, 0, 0, 0, 0, 0};
        int [] higherDealerCards = {0, 0, 0, 0, 0, 0};
        int [] dealerCardValues = {0, 0, 0, 0, 0, 0};
        String [] dealerCardNames = {"a", "a", "a", "a", "a", "a"};
        String [] dealerCardSuits = {"a", "a", "a", "a", "a", "a"};

///////////////////////////////////////////////////////////////////////

        //methods
        userCardValues = drawCard(userCardValues, dealerCardValues);
        dealerCardValues = drawCard(dealerCardValues, userCardValues);

    } //end of main

} //end of class

【问题讨论】:

  • 我想你想要count < cardValues.length
  • 同样适用于count2if (cardValues [count] == cardValues [count2]) 的逻辑应改为排除count == count2时的逻辑
  • 谢谢我怎么没听懂。老实说哇。顺便说一句,爱你的名字
  • 你如何结束这个问题?

标签: java arrays methods


【解决方案1】:

for 循环只是一个稍微修饰过的while 循环。

循环:

for (initial; condition; increment) {
   // do something
}

相当于:

initial;
while(condition) {
    // do something

    increment;
}

除了初始语句中描述的变量只有循环的范围之外。

当你写作时:

for (int i = 0; i == array.length; i++) {
    doSomething(array[i]);
}

程序首先声明一个名为i 的变量并将其设置为0。然后它进入while 循环,条件为:i == array.length,它立即返回false,因此循环在完成第一次迭代之前退出。

迭代循环的标准语法是:

for (int i = 0; i < array.length; i++) {
    doSomething(array[i]);
}

一种(可以说)更易读的方法是使用“for-each”循环:

for (int value : array) {
    doSomething(value);  // loops over all values in the array, creating a variable value in each iteration
}

更好的是,使用 Java 8 函数式样式/流:

Arrays.asList(array).forEach(blackjack::doSomething);

// or using streams
Arrays.stream(array).forEach(blackjack::doSomething);

【讨论】:

    【解决方案2】:

    当你想用for循环对数组中的每个元素做一些动作时,你应该这样写:

    for (int i = 0; i < array.length; i++) {
        doSomething(array[i]);
    }
    

    其中i &lt; array.length 是在每次迭代之前应该为真的条件。

    但是在你的 for 循环中你是这样写的:

    for (int i = 0; i == array.length; i++) {
        doSomething(array[i]);
    }
    

    所以如果数组不为空,那么这个循环甚至不会进行一次迭代。如果数组为空,它甚至会抛出异常,因为你会尝试访问数组[0]。

    【讨论】:

      猜你喜欢
      • 2015-06-12
      • 2014-02-02
      • 2012-11-26
      • 2013-08-02
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      相关资源
      最近更新 更多