簡體   English   中英

如何從另一個類調用方法?

[英]How to call method from another class?

因此,我是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;
}

最后一類是卡片類。

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

由於我缺乏理解,這肯定是一個明顯的錯誤,因此任何人都可以顯示解決該問題的方法嗎?

您在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
}

暫無
暫無

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

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