Java 如何从另一个类调用方法?
所以我是OOP的新手,目前在使用另一种方法的函数时遇到了问题。下面的类是纸牌游戏的主要类。在这里,它通过从游戏类创建一个对象来创建一副牌。然后用创建的牌组开始游戏,并打印牌组的大小Java 如何从另一个类调用方法?,java,oop,Java,Oop,所以我是OOP的新手,目前在使用另一种方法的函数时遇到了问题。下面的类是纸牌游戏的主要类。在这里,它通过从游戏类创建一个对象来创建一副牌。然后用创建的牌组开始游戏,并打印牌组的大小 public class Run { public static void main(String[] args) { Game game; System.out.println("Welcome!"); play = true; while (play) { ga
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
}
}
下面的类是游戏类。当游戏开始时,它应该打印创建的牌组的大小
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类,它在其中实际创建Deck,并有一个返回该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;
}
这一定是一个明显的错误,因为我不理解,所以有人能告诉我如何修复它吗?您在Deck类的构造函数中将“Main”声明为局部变量。这意味着它只在该构造函数的主体中可见
您需要将局部变量转换为类的字段。只有这样,它才会在你们班的其他地方“可见”!同样的事情,你做正确的套房和排名在您的卡类
当然,游戏方法应该而不是是静态的!一场比赛是关于一副牌,而不是“全部” Main在构造函数中声明,这会影响它对其他类的可见性,您可以这样编写它:
Deck Main = null;
public Game(int ranks)
{
Main = new Deck(ranks);
}
另一个重击是,无需创建对象来调用静态方法,您可以直接使用类名调用它,如:
Game.play();
更改游戏类,如下所示:
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
}
}
无论哪种方式,您都可以使其无错误。
问题是:您想要获取构造函数中的变量,
在构造函数中,它的局部变量
注意:变量名应该以小写字母开头。使用Pascal大小写作为JAVA的命名约定。请尝试以下方法:
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
}
你提到了一个错误,但没有说错误是什么。。。虽然我们可以通过阅读您的代码来解决这个问题,但您应该在问题中包含所有这些细节。无关:Main是一个变量,所以它应该以小写开头。你真正的main方法将永远循环,因为你一直在调用play方法,但是你永远不会改变控制封闭循环的局部变量。可能是@GhostCat Ya的重复,因为游戏还没有结束,所以它应该永远运行。我可能应该编辑那个部分,然后发布它哈哈。@Zephyr我很抱歉我下次一定会这么做。关于静态的观点很好,但是:这个方法首先不应该是静态的。嗨,欢迎使用堆栈溢出。虽然答案总是受欢迎的,但最好解释代码的作用以及它如何帮助解决问题。请花点时间读一读啊,我看到了愚蠢的我。谢谢你的解释,这更有意义。
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
}