我正在尝试为我的作业创建一副纸牌。代码发布在下面。我需要创建
四套牌(四套)和我创建一个多维数组。当我打印结果而不是尝试传递数组时,我可以看到数组中的数据是预期的。但是,当我尝试传递数组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
}
}
答案 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;
}
}