【问题标题】:Get and set array values from instance in arraylist从arraylist中的实例获取和设置数组值
【发布时间】:2015-12-13 14:50:43
【问题描述】:

我不知道如何从数组列表中的类的实例获取和设置数组值。有人知道怎么做吗?

添加玩家代码:

此代码用于学校宾果游戏项目。在此代码中,“SpelerLijst”是一个宾果游戏玩家列表。它是介于 1 到 5 之间的随机玩家数量。

import java.util.ArrayList;
import java.util.Random;

public class BingoPaneel {
    public BingoPaneel(){
        Random rand = new Random();
        ArrayList<BingoKaart> SpelerLijst = new ArrayList<BingoKaart>();
        //Aanmaken van spelers
        int spelers =  rand.nextInt((5-2 +1)+2);
        while (spelers == 0){
            spelers =  rand.nextInt((5-2 +1)+2);
        }
        System.out.println(spelers + " Spelers");
        for(int i = 0; i < spelers; i++){ 
        SpelerLijst.add(new BingoKaart()); 

        }

    }
}

播放器代码: 此代码为玩家提供了一张名为“Kaart”(数组)的卡片,其中包含 25 个随机整数。

import java.util.Arrays;
import java.util.Collections;
import java.util.Random;


public class BingoKaart {
    Random random = new Random();
    public BingoKaart(){
        int[][] kaart = new int[5][5];
        System.out.println("Spelerkaart: ");
        kaart= GetNumer(kaart);



    }
    private int[][] GetNumer(int[][] kaart) {       
        for(int i= 0; i < 5 ; i++){
            int[] getallen = new int[15];
            for(int k= 0; k < 15; k++){
                getallen[k] = k + (i*15);
            }
            shuffleArray(getallen);

            for(int j = 0; j < 5; j++){
                kaart[i][j] = getallen[j];
            }
        }

        //KAART PRINTEN
        for(int i = 0; i < 5; i++){
            for(int j = 0; j < 5; j++){
                System.out.print(kaart[i][j]+ " ");
            }
            System.out.println();
        }
        System.out.println();


        return kaart;
    }
     static void shuffleArray(int[] ar)
      {
        Random rnd = new Random();
        for (int i = ar.length - 1; i > 0; i--)
        {
          int index = rnd.nextInt(i + 1);
          int a = ar[index];
          ar[index] = ar[i];
          ar[i] = a;
        }
      }


}

主码: 此代码通过随机整数运行并检查其中一个玩家是否在其数组中具有该数字。

import java.util.Random;

public class BingoMaster {

    public BingoMaster(){
        //Vars
        int[] getrokkenGetallen = new int[75];
        boolean bingo = false;

        //Vullen en randomizen trekbare getallen
        VulGetrokkenGetallen(getrokkenGetallen);

        System.out.println("Het spel Start!");
        while(!bingo){
        TrekGetal(getrokkenGetallen);
        }

    }


    private int[] VulGetrokkenGetallen(int[] getrokkenGetallen) {       

        for(int i = 0; i < 75; i++){
            getrokkenGetallen[i] = i;
        }
        shuffleArray(getrokkenGetallen);
        return getrokkenGetallen;


    }

    private void TrekGetal(int[] getrokkenGetallen) {
        for(int i = 0; i < 75; i++){
            int getal = getrokkenGetallen[i];

        }
    }

    static void shuffleArray(int[] ar)
     {
        Random rnd = new Random();
        for (int i = ar.length - 1; i > 0; i--)
        {
          int index = rnd.nextInt(i + 1);
          int a = ar[index];
          ar[index] = ar[i];
          ar[i] = a;
        }
      }



}

我只是不知道如何检查数字是否在玩家的数组中。保存检查号码的系统是我下一步将构建的东西。

【问题讨论】:

  • 这不能回答您的问题,但我注意到您在 BingoMasterBingoKaart 中都有 shuffleArray(int[] ar)。你应该把它放在一个地方(其中一个类,或者一个实用类,如果它有意义的话)。

标签: java arrays class arraylist


【解决方案1】:

我只想指出:

ArrayList<BingoKaart> SpelerLijst = new ArrayList<BingoKaart>();

Java 约定的变量不应该大写——只有类名,这对组织代码有很大帮助。

无论如何,要回答您的问题,我将在第一个答案的基础上进行。

那么,首先我想问一下,你想在同一个包中访问它的类吗?如果是,您需要做的就是保持 ArrayList 实例原样,或者添加 protected(因为在我看来,protected 看起来比没有更酷,并且做同样的事情并允许子类访问)。否则,如果它们在不同的包中,则将其标记为公共,以便所有类都可以访问它(实际上,您无论如何都可以将其标记为公共,因为它没有任何区别,从长远来看这是一个优势)。

下一步:实例化类

BingoPaneel <var name> = new BingoPaneel();

实例化后就可以做

bp.SpelerLijst.add(<Something from BingoKaart>);

访问 ArrayList。

或者,如果您不想实例化(坏主意),您可以将其设为静态,然后执行

BingoPaneel.SpelerLijst.add(<Something from BingoKaart>);

【讨论】:

    【解决方案2】:

    您应该在构造函数之外将 SpelerLijst 定义为实例变量。 添加 getter 和 seter,以便在实例化 BingoPanel 时可以访问它。

    public class BingoPanel(){
    
    List<BingoKaart> spelerLijst;
    
    public BingoPanel(){
    spelerLijst=new ArrayList<>();
    //load all the data.
    }
    
    //getters and setters..
    

    同样在 BingoKaart 中,int[][] kaart 应该在外部声明,就像前一个一样,你正在做的事情,当它完成构造函数时,值会丢失。

    【讨论】:

      【解决方案3】:

      您需要能够在课堂外访问SpelerLijst。将您的 SpelerLijst 声明移到 BingoPaneel 中的构造函数之外,然后您可以通过以下方式调用它-

      BingoPaneel bp = new BingoPaneel();
      
      //do something here with the arrayList by calling bp.SpelerLijst
      

      【讨论】:

        猜你喜欢
        • 2014-12-08
        • 1970-01-01
        • 2017-06-16
        • 2014-12-04
        • 2013-08-05
        • 2016-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多