![](/img/trans.png)
[英]How to call a method in another class using the arraylist index in 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
並且循環在你可以進行一次迭代之前中斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.