简体   繁体   English

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

[英]How to fill a 2d array, given the values

I am trying to input the values inside of one class into the 2d array declared into another class. 我试图将一个类内的值输入到声明为另一类的2d数组中。

I keep getting a null pointer exception when I run it, so I feel the way I am trying is not working well. 运行它时,我总是收到空指针异常,因此我觉得我尝试的方式运行不正常。

The way it's supposed to work is in the main the nested loop is supposed to supply the values to the other method which is then supposed to input them into the 2d array. 它的工作方式主要是嵌套循环,它应将值提供给另一种方法,然后再将其输入2d数组。

Thanks 谢谢

Here is main 这是主要的

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

Here is the method I am trying to put it into, I'll write the whole class though. 这是我尝试放入的方法,不过我将编写整个类。

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;

}

Below is the whole class. 以下是全班。

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;

 }
}

EDIT: The exception 编辑:例外

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

Just looking briefly. 只是简短地看。 You're never resetting your class variable 'j' to 0 before incrementing in some functions. 在增加某些功能之前,您永远不会将类变量'j'重置为0。 Could the value of 'j' be out of your index bounds in some of your functions? 在某些函数中,“ j”的值是否可能超出索引范围?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM