如何从方法返回数组?

时间:2012-03-19 23:22:25

标签: java arrays parameter-passing

我正在尝试为我的作业创建一副纸牌。代码发布在下面。我需要创建
四套牌(四套)和我创建一个多维数组。当我打印结果而不是尝试传递数组时,我可以看到数组中的数据是预期的。但是,当我尝试传递数组card时,出现错误cannot find symbol。我已经在texbook和Java教程示例之后建模,我需要一些帮助来弄清楚我缺少的东西。我已经过度记录,想知道我认为这应该如何运作......请让我知道我的理解中出现了可怕的错误。

import java.util.*;
import java.lang.*;
//
public class CardGame
{
    public static int[][] main(String[] args)
    {
        int[][] startDeck = deckOfCards();  /* cast new deck as int[][], calling method deckOfCards
        System.out.println(" /// from array: " + Arrays.deepToString(startDeck));
    }

    public static int[][] deckOfCards()   /* method to return a multi-dimensional array */
    {
        int rank;
        int suit; 
        for(rank=1;rank<14;rank++)    /* cards 1 - 13 .... */
        {
            for(suit=1;suit<5;suit++)  /* suits 1 - 4 .... */
            {
                int[][] card = new int[][]    /* define a new card...  */
                {
                    {rank,suit}      /* with rank/suit from for... loops */
                };
                System.out.println(" /// from array: " + Arrays.deepToString(card));
             }
         }
         return card;  /*  Error: cannot find symbol 
    }
}

5 个答案:

答案 0 :(得分:4)

card仅存在于for循环中:变量仅在声明它们的块({..})内有效。

注意main()方法的规则(来自 12.1.4 JLS 3.0 12.1.4调用Test.main ):

  

方法main必须声明为public,static和void。它必须接受   单个参数,是一个字符串数组。

答案 1 :(得分:2)

啊......范围是你的问题......看一下卡片的相对于返回位置的地方。请记住,当您在循环或子函数中声明变量时,其范围仅限于堆栈中的该位置。如果这样做没有帮助给我回复信息。

答案 2 :(得分:1)

参考卡仅限于内部for循环的范围。变量仅存在于包围它的最内部大括号{}内部。

你想在循环之外创建一个数组,并在循环中填充它。不要为循环的每次传递创建一个全新的数组。

答案 3 :(得分:1)

您的卡片已在for循环中定义。尝试在顶部定义它,否则它会在每个循环中重新定义,并且您的函数将返回null。

import java.util.*;
import java.lang.*;
//
public class CardGame
{
    public static int[][] main(String[] args)
    {
        int[][] startDeck = deckOfCards();  /* cast new deck as int[][], calling method deckOfCards
        System.out.println(" /// from array: " + Arrays.deepToString(startDeck));
    }

    public static int[][] deckOfCards()   /* method to return a multi-dimensional array */
    {
        int rank;
        int suit; 
        int[][] card = new int[][]    /* define a new card...  */
        for(rank=1;rank<14;rank++)    /* cards 1 - 13 .... */
        {
            for(suit=1;suit<5;suit++)  /* suits 1 - 4 .... */
            {

                {
                    {rank,suit}      /* with rank/suit from for... loops */
                };
                System.out.println(" /// from array: " + Arrays.deepToString(card));
             }
         }
         return card;  /*  Error: cannot find symbol 
    }
}

答案 4 :(得分:0)

感谢大家指出范围是我的问题......这绝对是它。这是我的修改后的代码,我很乐意报告它的作品。

import java.util.*;
import java.lang.*;
//
public class CardGame 
{
    static int card[][];   /* card is now a global variable...and static so it can */
                           /* interact with static methods.  */
//
    public static void main(String[] args)
    {
        int card[][];
        int[][] startDeck = deckOfCards();
        System.out.println(" /// from array: " + Arrays.deepToString(startDeck));
    }


    public static int[][] deckOfCards()
    {
        int rank;
        int suit;
        for(rank=1;rank<14;rank++)
        {
            for(suit=1;suit<5;suit++)
            {
                card = new int[][]
                {
                    {rank,suit}
                };
                System.out.println(" /// from array: " + Arrays.deepToString(card));
             }
         }
         return card;
    }   
}