所以我是OOP的新手,目前在使用其他方法的功能时遇到了麻烦。下面的课程是纸牌游戏的主要课程。在这里,它通过从Game类中创建一个对象来创建一副纸牌。然后,它将使用创建的套牌开始游戏,并应打印套牌的大小。
public class Run {
public static void main(String[] args) {
Game game;
System.out.println("Welcome!");
play = true;
while (play) {
game = new Game(3); //Create deck of card based on number of ranks given
game.play(); //Starts the game with deck of card
}
}
下面的类是Game类。游戏开始时,它应该打印所创建的套牌的大小。
public class Game {
public Game(int ranks)
{
Deck Main = new Deck(ranks);
}
public static void play()
{
System.out.println(Main.size()); //Where the error occurs
}
下面的类是Deck类,它实际上在其中创建甲板,并具有一个返回甲板尺寸的方法。
public class Deck {
private ArrayList<Card> cards;
public Deck(int range) {
cards = new ArrayList<Card>();
for (int i=1; i<=range; i++)
{
Card card = new Card(1, i);
Card card2 = new Card(2, i);
Card card3 = new Card(3, i);
Card card4 = new Card(4, i);
cards.add(card);
cards.add(card2);
cards.add(card3);
cards.add(card4);
}
}
public int size()
{
int num=cards.size();
return num;
}
最后一类是Card类。
public class Card {
private int rank;
private int suit;
public Card(int s, int r)
{
suit=s;
rank=r;
}
public int getSuit()
{
return suit;
}
public int getRank()
{
return rank;
}
由于我缺乏理解,这肯定是一个明显的错误,所以任何人都可以显示解决方法?
答案 0 :(得分:3)
您在Deck类的构造函数中将“ Main”声明为局部变量。这意味着它仅在该构造函数的主体中可见。
您需要将局部变量转换为类的 field 。只有这样,它才能在您班上的其他地方变为“可见”!您为套件和卡类中的排名正确所做的事情也是如此!
当然,播放方法应该不是是静态的!一个游戏大约只有一个套牌,而不是“全部”!
答案 1 :(得分:2)
在构造函数中声明的主体会影响其对其他类的可见性,您可以这样编写:
Deck Main = null;
public Game(int ranks)
{
Main = new Deck(ranks);
}
另一个缺点是,无需创建对象来调用静态方法,您可以直接使用类名来调用它,例如:
Game.play();
答案 2 :(得分:0)
更改游戏类,如下所示:
public class Game {
private static Deck Main;
public Game(int ranks)
{
Main = new Deck(ranks);
}
public static void play()
{
System.out.println(Main.size()); //Where the error occurs
}
}
如果要以静态方法获取它,则必须将其设为静态。
另一种方法是:
public class Game {
Deck Main;
public Game(int ranks)
{
Main = new Deck(ranks);
}
public void play()
{
System.out.println(Main.size()); //Where the error occurs
}
}
无论哪种方式,都可以使其没有错误。 问题是:您想获取一个在构造函数内部的变量, 就像在构造函数中一样,它是局部变量。
N.B:变量名称应以小写字母开头。使用Pascal大小写作为JAVA的命名约定。
答案 3 :(得分:-1)
请尝试以下操作:
public class Game {
private Deck Main;
public Game(int ranks)
{
Main = new Deck(ranks);
}
public static void play()
{
System.out.println(Main.size()); //Where the error occurs
}