2017-02-10 13 views
-1

私はJavaの初心者です.Bingoのプログラムもあります。あなたは、ユーザーにプレーヤーの数を入力させ、各プレーヤーはボードを受け取らなければなりません。次に、ランダムなトークンが別のクラスから呼び出され、そのトークンを使用してボード上にマークする必要があります。私は誰が勝ったかを理解する方法を知らないし、Mark()には誤りがある。誰でも助けてくれますか?ありがとう。ここでArrayListを使ってJavaの別のクラスからメソッドを呼び出す方法は?

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

は、理事会のクラスです:

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

そしてここでは、トークンのクラスです:

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

はあなたにみんなありがとう!私は知っている...これは長いプログラムです。

+3

「これは長いプログラムです。 - 実際はそうではありません。しかし、このサイトのフォーマットではあまりにも多くの。 [ask]を読んで、スニペットを関連する部分に減らしてください。 [mcve] – Fildor

+0

このエラーを解決するには、 'player.get()。Mark();' – XtremeBaumer

+0

* '' Mark() '" *にエラーがあります。あなたは指定できますか? – QBrute

答えて

1

player.Mark(tempNumber,tempLetter);ここで、playerは、その方法がないArrayList<Board>です。これはクラスBoard自体で定義されています。

だから、このリストから現行Boardインスタンスをgetその上Markを呼びたいです。

すなわちwin = player.get(currentPlayerIndex).Mark(tempNumber,tempLetter);

は、あなたのロジックによっては、現在のプレーヤー/ボードを取得するいくつかのcurrentPlayerIndexを必要としています。

注:前述@opensamとして、あなたはwhile(win == false)while(win = false)を交換する必要があるか、他あなたは一回の反復を行うことができます前に、あなたはwinとループ休憩にfalseを割り当てます。

0

TL; DR

とマークに誤りが(あります)。

'player'はArrayListクラスのインスタンスですが、Mark(int、int)はクラスBoard用に定義されたメソッドです。メソッドMark(int、int)を呼び出す場合は、Boardクラスのインスタンスを介して呼び出す必要があります。その意味を理解できない場合は、thisまたはthisにアクセスしてください。

関連する問題