簡體   English   中英

如何從方法返回數組?

[英]How do I return an array from a method?

我正在嘗試為我的作業創建一副紙牌。 代碼發布在下面。 我需要創造
四套牌(四套)和我創建一個多維數組。 當我打印結果而不是嘗試傳遞數組時,我可以看到數組中的數據是預期的。 但是,當我嘗試傳遞陣列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 
    }
}

card僅存在於for循環中:變量僅在聲明它們的塊( {..} )內有效。

注意main()方法的規則(來自JLS 3.0的12.1.4Invoke Test.main ):

方法main必須聲明為public,static和void。 它必須接受一個字符串數組的參數。

啊......范圍是你的問題......看看卡片的相對於返回的位置。 請記住,當您在循環或子函數中聲明變量時,其范圍僅限於堆棧上的該位置。如果這無助於向我發送消息。

參考卡僅限於內部for循環的范圍。 變量僅存在於包圍它的最內部括號{}內部。

你想在循環之外創建一個數組,並在循環中填充它。 不為循環的每次傳遞創建一個全新的數組。

您的卡是在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 
    }
}

感謝大家指出范圍是我的問題......這絕對是它。 這是我的修改后的代碼,我很樂意報告它的作品。

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;
    }   
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM