[英]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.4節Invoke 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.