簡體   English   中英

如何使用 ArrayList 從 Java 中的另一個類調用方法?

[英]How to use ArrayList to call a method from another class in Java?

我是 Java 的初學者,我們有一個關於 Bingo 的程序要做。 您必須讓用戶輸入玩家數量,然后每個玩家都會收到一個棋盤。 然后從另一個類調用一個隨機令牌,您必須使用該令牌在板上標記它。 我不知道如何確定誰贏了……而且 Mark() 上有錯誤。 有人可以幫忙嗎? 謝謝。

import java.util.Scanner;
import java.util.ArrayList;
public class Bingo 
{
    public static void main(String[] args) 
    {
     Scanner a = new Scanner(System.in);
     System.out.println("Enter number of players: ");
     int num = a.nextInt();
     ArrayList<Board> player = new ArrayList<Board>();
     for(int i = 0; i < num; i++)
       player.add(new Board());
     Token one = new Token();
     int tempNumber = 0, tempLetter = 0;
     boolean win = false;
     while(win = false)
     {
       tempLetter = one.getLetter();
       tempNumber = one.getNumber();

       char letter;
       if(tempLetter == 0)
       letter = 'B';
       else if(tempLetter == 1)
         letter = 'I';
       else if(tempLetter == 2)
         letter = 'N';
       else if(tempLetter == 3)
         letter = 'G';
       else
         letter = 'O';

       System.out.println("Token: " + tempNumber + letter);
       System.out.println();

       win = player.Mark(tempNumber,tempLetter);
     }
  }
}

這是 Board 類:

public class Board
{
    private int[][] card;
    private int row, column;
    boolean bingo;
    public Board()
    {
        card = new int[5][5];
        for(int i = 0; i < card.length; i++)
            for(int j = 0; j < card[i].length; j++)
                card[i][j] = (int) (Math.random() * 75 + 1);
        card[2][2] = 0;

        for(int i = 0; i < card.length; i++)
            for(int j = 0; j < card[i].length; j++)
            {
                System.out.print(card[i][j] + " ");
                if(j == 4)
                    System.out.println();
            }
    bingo = false; //False
    row = 0;
    column = 0;

}

public boolean Mark(int x, int y)
{   
    for(int i = 0; i < card.length; i++)
        for(int j = 0; j < card[i].length; j++)
        {
            if(card[i][j] == x)
                if(j == y)
                {
                    card[i][j] = 0;
                    row = i;
                    column = j;
                }

        }
    System.out.println("Mark: ");

    for(int i = 0; i < card.length; i++)
        for(int j = 0; j < card[i].length; j++)
        {
            System.out.print(card[i][j] + " ");
            if(j == 4)
                System.out.println();
        }
    Check();
    return bingo;
}

private void Check()
{
    int flagRow = 0, flagColumn = 0, flagDiagonal = 0;
    int tempRow = 0, tempColumn = 0, tempRow1 = 4, tempColumn1 = 4;
    //Diagonal check
    if(row == column)
    {
        while(bingo == false)
        {
            if(card[tempRow][tempColumn] == 0)
            {
                tempRow++;
                tempColumn++;
                flagDiagonal++;
            }
            else if(card[tempRow1][tempColumn1] == 0)
            {
                tempRow1--;
                tempColumn1--;
                flagDiagonal++;
            }

            if(flagDiagonal == 5)
                bingo = true;
            else
            {
                tempRow = 0;
                tempColumn = 0;
                tempRow1 = 4;
                tempColumn1 = 4;
                flagDiagonal = 0;
            }
        }
    }
    //Row and column check
    for(int i = 0; i < card.length; i++)
        for(int j = 0; j < card[i].length; j++)
        {
            if(card[i][column] == 0) //Column check
                flagColumn++;
            if(card[row][j] == 0) //Row check
                flagRow++;
        }

    if(flagRow == 5)
        bingo = true;
    else if(flagColumn == 5)
        bingo = true;
    else
    {
        flagRow = 0;
        flagColumn = 0;
    }

    System.out.println("\nCheck: ");
    for(int i = 0; i < card.length; i++)
        for(int j = 0; j < card[i].length; j++)
        {
            System.out.print(card[i][j] + " ");
            if(j == 4)
                System.out.println();
        }
    System.out.println("Bingo status: " + bingo);
   }
}

這是 Token 類:

import java.util.ArrayList;
import java.util.Random;
public class Token
{
    ArrayList<Integer> number;
    public Token()
    {
        number = new ArrayList<Integer>();
        for(int i = 0; i < 75; i++)
            number.add((int)(Math.random() * 75 + 1));
    }
    public int getNumber()
    {
        Random rand = new Random();
        int temp = number.get(rand.nextInt(number.size()));

        number.remove(temp);
        return temp;
    }

    public int getLetter()
    {
        Random rand = new Random();
        int temp = number.get(rand.nextInt(number.size()));
        if(temp >= 1 && temp <= 15)
            return 0; //B
        else if(temp >= 16 && temp <= 30)
            return 1; //I
        else if(temp >= 31 && temp <= 45)
            return 2; //N
        else if(temp >=46 && temp <= 60)
            return 3; //G
        return 4; //O
    }
}

謝謝大家! 我知道……這是一個很長的程序。

你打電話給player.Mark(tempNumber,tempLetter); 其中player是一個沒有該方法的ArrayList<Board> 它是在類Board本身中定義的。

所以你想從這個列表中get當前的Board實例並在那個上調用Mark

win = player.get(currentPlayerIndex).Mark(tempNumber,tempLetter);

根據您的邏輯,您需要一些獲取當前玩家/棋盤的currentPlayerIndex

注意:正如@opensam 提到的,你需要用while(win == false)替換while(win = false)否則你將false分配給win並且循環在你可以進行一次迭代之前中斷。

TL; 博士

並且 Mark() 上有錯誤。

'player' 是 ArrayList 類的實例,而 Mark(int,int) 是為您的類 Board 定義的方法。 如果要調用方法 Mark(int,int),則必須通過類 Board 的實例調用它。 如果你不明白這意味着什么,那么請通過這個這個

暫無
暫無

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

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