给定值,如何填充二维数组

时间:2016-01-15 00:11:20

标签: java arrays

我试图将一个类中的值输入声明为另一个类的2d数组。

当我运行它时,我一直得到一个空指针异常,所以我觉得我尝试的方式效果不佳。

它应该工作的方式主要是嵌套循环应该将值提供给另一个方法,然后将其输入到二维数组中。

由于

这是主要的

public class Lab1 {


static final int NBPLAYERS = 11;
static final int NBMONTHS = 6;

public static void main(String[] args) {

    String[] month = {"April", "May","June", "July", "August","September"};
    String[] players = {"Colabello","Donaldson","Smoak","Martin","Goins","Encarnacion","Carrera","Tulowitzki","Pillar","Bautista","Travis"};
    double[][] battingAvg = {
                    {0,.368,.300,.224,.386,.268},
            {.319,.306,.269,.287,.324,.296},
            {.229,.310,.213,.191,.203,.262},
            {.197,.327,.239,.256,.138,.213},
            {.276,.236,.172,.240,.314,.279},
            {.205,.225,.303,.241,.407,.279},
            {0,.302,.282,.244,.333,.231},
            {0,0,0,.357,.214,.237},
            {.273,.181,365,.283,.240,.323},
            {.164,.295,.226,.219,.286,.293},
            {.325,.189,.313,.368,0,0}};

    double [][] onBase = {
                    {.417,.330,.286,.413,.362,.429},        
            {.370,.373,.322,.370,.408,.403},
            {.372,.333,.275,.283,.243,.324},
            {.367,.362,.329,.322,.263,.300},
            {.323,.278,.221,.286,.442,.347},
            {.258,.333,.382,.384,.460,.411},
            {0,.357,.333,.277,.333,.313},
            {0,0,0,.400,.325,.250},
            {.297,.237,.380,.323,.283,.363},
            {.325,.418,.388,.300,.370,.436},
            {.393,.246,.313,.421,0,0}};

    PlayerStats player;

    BlueJays team = new BlueJays(NBPLAYERS, NBMONTHS);

    for(int iPlayer=0; iPlayer<NBPLAYERS; iPlayer++) {
        for(int iMonth=0; iMonth<NBMONTHS; iMonth++) {

             player = new PlayerStats(players[iPlayer], iMonth, battingAvg[iPlayer][iMonth],onBase[iPlayer][iMonth]);

            team.setPlayerStatsCell(player,iPlayer,iMonth);
        }
    }

    team.getHighestSingleMonthBattingAvg();

    team.getHighestOnBase(5);

    team.getLowestBattingAvg(5);

    team.getBestMonth("Bautista");

    team.getBestOverallRecord();

    team.getLowestOnBase();

这是我试图将其付诸实践的方法,我将编写整个班级。

PlayerStats setPlayerStatsCell(PlayerStats p, int nbPlayers, int nmMonths) {

    for(int i=0; i<nbPlayers; i++) {
        for(int j=0; j<nmMonths; j++) {

            stats[i][j]= p;
        }
    }
        return p;

}

以下是全班。

class BlueJays {

int nbPlayers;
int nbMonths;
int j = 0;
int highestBattingAvg;
int highestBattingMonth;
String highestBattingPlayer;
int highestOnBase;
int lowestAvg;
String lowestAvgPlayer;
int highestOverall;
String highestOverallPlayer;
int lowestOnBase;
int lowestOnBaseMonth;
String highestOnBasePlayer;
double bestOverAllMonth;

PlayerStats[][] stats;

public BlueJays(int nbplayers2, int nbmonths2) {
    this.nbPlayers = nbplayers2;
    this.nbMonths = nbmonths2;

    this.stats = new PlayerStats[nbPlayers][nbMonths];

}



PlayerStats setPlayerStatsCell(PlayerStats p, int nbPlayers, int nmMonths) {

    for(int i=0; i<nbPlayers; i++) {
        for(int j=0; j<nmMonths; j++) {

            stats[i][j]= p;
        }
    }
        return p;

}


 PlayerStats getHighestSingleMonthBattingAvg() {



    for(int i = 0; i < nbPlayers; i++)   {
        for(int j = 0; j<nbMonths; j++) {

            stats[i][j].getAvg();

                if(highestBattingAvg < stats[i][j].getAvg()) {
                    highestBattingMonth = stats[i][j].getMonth();
                    highestBattingPlayer = stats[i][j].getName();

                }

                System.out.println("Highest average batting player for the month " + highestBattingMonth + " is " + highestBattingPlayer);

            }
        }

        return null;


    }

 PlayerStats getHighestOnBase(int month) {

    while(j < nbMonths) {

        for(int i = 0; i < nbPlayers; i++)  {
            stats[i][month].getOnBase();

            if(highestOnBase < stats[i][month].getOnBase()) {

            highestOnBasePlayer =  stats[i][month].getName();
        }

        if (i == nbMonths) {
            j++;
            i = 0;

        }
        System.out.println("Highest average onBase player for the month " + month + highestOnBasePlayer);

    }
}


return null;

}


public PlayerStats getLowestBattingAvg(int month) {

    while(j < nbMonths) {

        for(int i = 0; i < nbPlayers; i++)  {
            stats[i][month].getOnBase();

        if(lowestAvg > stats[i][month].getAvg()) {

            lowestAvgPlayer =  stats[i][month].getName();
        }

        if (i == nbMonths) {
            j++;
            i = 0;

        }



    }
    System.out.println("Lowest average batting player for the month " + month + " is " + lowestAvgPlayer);
}
return null;

}

   PlayerStats getBestMonth(String player) {

  while(j < nbMonths) {

    for(int i = 0; i < nbPlayers; i++)  {
        stats[i][j].getBoth();

        if(bestOverAllMonth > stats[i][j].getAvg() && stats[i][j].getName().contains(player)) {


             bestOverAllMonth =  stats[i][j].getBoth();


        }

        if (i == nbMonths) {
            j++;
            i = 0;

        }



    }
    System.out.println("Best month for the player " + player + " is " + bestOverAllMonth);
}
return null;






  }

  public String getBestOverallRecord() {

   while(j < nbMonths) {

       for(int i = 0; i < nbPlayers; i++)  {
           stats[i][j].getBoth();

        if(highestOverall < stats[i][j].getBoth()) {

            highestOverallPlayer =  stats[i][j].getName();
        }

        if (i == nbMonths) {
            j++;
            i = 0;

        }



    }
    System.out.println("Highest overall record is " + highestOverallPlayer);
    }
   return null;



}



   public PlayerStats getLowestOnBase() {

   while(j < nbMonths) {

       for(int i = 0; i < nbPlayers; i++)  {
        stats[i][j].getOnBase();

        if(lowestOnBase > stats[i][j].getOnBase()) {

            double lowestOnBase =  stats[i][j].getOnBase();

            if(lowestOnBase > 0) {

                lowestAvgPlayer = stats[i][j].getName();

            } else {

                i++;
            }
        if (i == nbMonths) {
            j++;
            i = 0;

        } 

    }



}
    System.out.println("Lowest On Base is  " + lowestOnBase);



   }
return null;

 }
}

编辑:例外

Exception in thread "main" java.lang.NullPointerException
at BlueJays.getHighestSingleMonthBattingAvg(BlueJays.java:52)
at Lab1.main(JonathanRoy_Lab1.java:52)

1 个答案:

答案 0 :(得分:0)

简单地看一下。在增加某些函数之前,您永远不会将类变量'j'重置为0。 'j'的值是否超出了某些函数的索引范围?