【问题标题】:Can't access array in the main method无法在 main 方法中访问数组
【发布时间】:2015-02-20 06:16:18
【问题描述】:

我正在尝试创建一个类,该类在一种方法中创建一副纸牌,而在另一种方法中,我希望它洗牌 1000 次,然后打印到控制台。 (这是老师让我做的实验) 我的问题是我在 CardDeck 方法中创建了数组,我无法在该方法之外访问它们。我正在寻找一个对于编程新手来说很简单的答案,可以理解并应用于我当前的代码。 这个程序是用java编写的。

import java.util.Random;

public class Deck {
    public static void main(String args[]) {
        // mah lovely arrays ^.^
        CardDeck();

        Random random = new Random();
        for (int q = 0; q < 52; q++) {
            int rand = random.nextInt(52);
        }
    }

    public static void CardDeck() {

        final String[] deckSuit = new String[52];
        String[] deckKind = new String[52];
        int[] deckValue = new int[52];

        String spade = "Spades";
        String diamond = "Diamonds";
        String heart = "Hearts";
        String club = "Clubs";

        // set the respective suits
        for (int q = 0; q < 13; q++) {
            deckSuit[q] = spade;
        }
        for (int q = 13; q < 26; q++) {
            deckSuit[q] = diamond;
        }
        for (int q = 26; q < 39; q++) {
            deckSuit[q] = heart;
        }
        for (int q = 39; q < 52; q++) {
            deckSuit[q] = club;
        }
        // set the kind of card
        for (int q = 0; q < 52; q += 13) {
            deckKind[q] = "Two";
            deckKind[q + 1] = "Three";
            deckKind[q + 2] = "Four";
            deckKind[q + 3] = "Five";
            deckKind[q + 4] = "Six";
            deckKind[q + 5] = "Seven";
            deckKind[q + 6] = "Eight";
            deckKind[q + 7] = "Nine";
            deckKind[q + 8] = "Ten";
            deckKind[q + 9] = "Jack";
            deckKind[q + 10] = "Queen";
            deckKind[q + 11] = "King";
            deckKind[q + 12] = "Ace";
        }

        for (int q = 0; q < 52; q += 13) {
            deckValue[q] = 2;
            deckValue[q + 1] = 3;
            deckValue[q + 2] = 4;
            deckValue[q + 3] = 5;
            deckValue[q + 4] = 6;
            deckValue[q + 5] = 7;
            deckValue[q + 6] = 8;
            deckValue[q + 7] = 9;
            deckValue[q + 8] = 10;
            deckValue[q + 9] = 10;
            deckValue[q + 10] = 10;
            deckValue[q + 11] = 10;
            deckValue[q + 12] = 11;
        }


        //display all the cards
        for (int q = 0; q < 52; q++) {
            System.out.println("[" + deckSuit[q] + ", " + deckKind[q] + ", " + deckValue[q] + "]");
        }
    }
    //declare ye methods here
}

【问题讨论】:

  • 除了下面的答案,你应该使用骆驼命名约定来更好地理解代码
  • 代码格式化很有帮助

标签: java arrays class methods


【解决方案1】:

几个解决方案

  1. 将数组设为静态公开

  2. 从函数中返回数组

【讨论】:

    【解决方案2】:

    因为您在 CardDeck 方法中创建/声明了数组,所以您无法在该方法之外使用。

    您可以将数组声明为实例变量并在 CardDeck() 方法中进行初始化。

    【讨论】:

      【解决方案3】:

      第一个解决方案是在更高的范围内声明您的变量。您可以在 Deck 类中创建一个可以通过任何静态方法访问的静态成员(在本例中为 main()CardDeck()),或者您可以在 main() 方法中创建一个变量并将其作为参数传递CardDeck(String[]) 方法。

      但我认为更好的解决方案是将CardDeck()方法的原型更改为String[] createDeck()。该方法首先创建卡片组,然后将其返回。在main() 方法中,您将返回的值存储在可用于for 循环的本地String[] 中。

      【讨论】:

        【解决方案4】:

        您的括号格式不正确。 `public static void CardDeck() 上方有一个额外的大括号。

        固定代码:

        import java.util.Random;
        
        
        public class Deck {
        
            public static void main(String args []){
                // mah lovely arrays ^.^
        
        
                CardDeck();
        
                Random random = new Random();
                for(int q = 0;q<52;q++){
                int rand = random.nextInt(52);
        
                }
            }
        
            public static void CardDeck(){
        
                   final String[] deckSuit = new String[52];
                    String[] deckKind = new String[52];
                       int[] deckValue = new int[52];
        
                    String spade = "Spades";
                    String diamond = "Diamonds";
                    String heart = "Hearts";
                    String club = "Clubs";
        
        
        
                    // set the respective suits
                    for(int q = 0;q<13;q++){
                        deckSuit[q] = spade;
                    }
                    for(int q = 13;q<26;q++){
                        deckSuit[q] = diamond;
                    }
                    for(int q = 26;q<39;q++){
                        deckSuit[q] = heart;
                    }
                    for(int q = 39;q<52;q++){   
                        deckSuit[q] = club;
                    }
                    // set the kind of card
                    for(int q = 0;q<52;q+=13){
                        deckKind[q] = "Two";
                        deckKind[q+1] = "Three";
                        deckKind[q+2] = "Four";
                        deckKind[q+3] = "Five";
                        deckKind[q+4] = "Six";
                        deckKind[q+5] = "Seven";
                        deckKind[q+6] = "Eight";
                        deckKind[q+7] = "Nine";
                        deckKind[q+8] = "Ten";
                        deckKind[q+9] = "Jack";
                        deckKind[q+10] = "Queen";
                        deckKind[q+11] = "King";
                        deckKind[q+12] = "Ace";
                    }
        
                    for(int q = 0;q<52;q+=13){
                        deckValue[q] = 2;
                        deckValue[q+1] = 3;
                        deckValue[q+2] = 4;
                        deckValue[q+3] = 5;
                        deckValue[q+4] = 6;
                        deckValue[q+5] = 7;
                        deckValue[q+6] = 8;
                        deckValue[q+7] = 9;
                        deckValue[q+8] = 10;
                        deckValue[q+9] = 10;
                        deckValue[q+10] = 10;
                        deckValue[q+11] = 10;
                        deckValue[q+12] = 11;
                    }
        
        
                    //display all the cards
                    for(int q = 0;q<52;q++){
        
                        System.out.println("["+deckSuit[q]+", "+deckKind[q]+", "+deckValue[q]+"]");
                        }   
        
                //declare ye methods here
                }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-12
          • 2021-04-17
          • 2020-06-15
          • 1970-01-01
          • 2015-03-19
          • 2018-01-02
          • 1970-01-01
          • 2020-12-27
          相关资源
          最近更新 更多